Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z usuwaniem i dodawaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
ultramega-ok
Mam taką małą bazę dla celów ćwiczebnych smile.gif ale niestety cos mi nie działa przy usuwaniu rekordów. Wyświetla się taki komunikat:
---------------------------------------
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
--------------------------------------------------------------------------------
Apache/1.3.23 Server at localhost Port 80
---------------------------------------

Na dodatek jeśli dodam nową osobę do bazy, to po odświeżeniu strony ten sam rekord dodaje się po raz drugi, po następnym odświeżeniu jeszcze raz i tak w kółko - jak temu zapobiec? blink.gif

---------------------------------------
Oto kod:

<?php
mysql_connect( "localhost", "root", "")
or die( "nie mozna sie polaczyc z mysql.");
mysql_select_db( "bazaa" )
or die( "nie mozna wybrac bazy.");

if( $co == 'dodaj' )
{
if( $imie && $nazwisko && $telefon )
{
$query = "INSERT INTO book (nr, imie, nazwisko, telefon) " ;
$query .= "VALUES ('', '$imie', '$nazwisko', '$telefon');" ;
$baz = mysql_query( $query );
/* $baz= mysql_query( "INSERT INTO book (nr, imie, nazwisko, telefon) VALUES ('', '$imie', '$nazwisko', '$telefon');" );*/
}
}
elseif( $co == 'skasuj') {
$baz = mysql_query
("DELETE FROM book WHERE nr='$id' LIMIT 1;")
or die("blad w kasowaniu");
}

$baz = mysql_query("SELECT * FROM book;")
or die("blad w zapytaniu.");

print( "<table border=0 cellpadding=5 cellspacing=2 bgcolor=teal>");
print( "<tr><td><b>imie</b></td><td><b>nazwisko</b></td>");
print( "<td><b>telefon</b></td></tr>\n");
while( $rekord = mysql_fetch_array( $baz ))
{
$id = $rekord[0];

print( "<tr><td>$rekord[1]</td><td>$rekord[2]</td><td>$rekord[3]</td>");
print( "<td><a href=\"book.php?co=skasuj&id=$id\">skasuj</a></td></tr>\n" );
}
print "</table>" ;
print '<form method="get">Nowy rekord:' ;
print '<input type="hidden" name="co" value="dodaj"><table>' ;
print '<tr><td>imie:</td><td><input type="text" name="imie"></td></tr>' ;
print '<tr><td>nazwisko:</td><td><input type="text" name="nazwisko"></td></tr>' ;
print '<tr><td>telefon:</td><td><input type="text" name="telefon"></td></tr></table>' ;
print '<input type="submit" value="dodaj"></form>' ;
?>
Vertical
  1. <?php
  2. $baz= mysql_query( &#092;"INSERT INTO book (nr, imie, nazwisko, telefon) VALUES ('', '$imie', '$nazwisko', '$telefon');\" )
  3. ?>

Może powinno być:
  1. <?php
  2. $baz= mysql_query( &#092;"INSERT INTO book VALUES (NULL, '$imie', '$nazwisko', '$telefon');\" )
  3. ?>

Co drugiego problemu to zrób tak, żeby nie można było dodać dwóch takich samych użytkowników:
  1. <?php
  2. //łączenie do bazy
  3. $sql = &#092;"SELECT * FROM tabela WHERE imie = '$imie' AND nazwisko = '$nazwisko' AND telefon = '$telefon'\";
  4. $result = mysql_query($sql);
  5. $row_count = mysql_num_rows($result);
  6. if($row_count != 0)
  7. {
  8. echo (&#092;"Nie można dodać! Podane informacje już są w bazie!n\");
  9. } else
  10. {
  11. //dodawanie do bazy
  12. }
  13. ?>

Poza tym jest jeszcze trochę innych błędów:
1.
Cytat
  1. <?php
  2. if( $imie && $nazwisko && $telefon )
  3. ?>

Powinno być:
  1. <?php
  2. if( isset ($imie && $nazwisko && $telefon ) )
  3. ?>

2. Używaj BBcode!
crash
Vertical: ekhm, między nazwą tabeli a VALUES można podawać przecież nazwy kolum, które chce się wypełnić INSERT'em, to nie jest błąd.

ultramega-ok: Nie dawaj średnika na końcu zapytań MySQL w php. No i pamiętaj o BBCode...
Vertical
Cytat
Nie dawaj średnika na końcu zapytań MySQL

To także nie jest błąd
ultramega-ok
Po pierwsze:
kiedy dałem
  1. <?php
  2. isset ($imie && $nazwisko && $telefon )
  3. ?>

to wyskakuje mi taki błąd:
Cytat
Parse error: parse error, expecting `','' or `')'' in d:\moje dokumenty\www\book\main.php on line 17

Czy ta funkcja 'isset' rzeczywiście jest konieczna? Przecież funkcja
Cytat
if( $imie && $nazwisko && $telefon )

sprawdza czy te pola nie są NULL-ami. Czy to nie wystarczy?

Po drugie:
Do Verticala: ja nie chcę blokować możliwości wpisania dwóch takich samych osób - ja chcę tylko, żeby po odświeżeniu strony nie dodawał się do bazy jeszcze raz ten sam rekord. Czy da się to jakoś zrobić? (przecież musi się dać smile.gif )

Po trzecie:
Usuwanie z bazy mi nie działa. Ktoś mi mówił, ze to może być jakis błąd w konfiguracji mySQL czy php na moim komputerze ("twoje php dziala jako modul CGI"). Mam PHPTriad i po zainstalowaniu tego pakietu nic nie zmieniałem w konfiguracji (nawet nie wiem jak tongue.gif ).
Wie ktoś jak zrobić to usuwanie??
dr_bonzo
Cytat
ja chcę tylko, żeby po odświeżeniu strony nie dodawał się do bazy jeszcze raz ten sam rekord

To po dodaniu rekordu przekieruj usera na inna strone (header() )

Cytat
Czy ta funkcja 'isset' rzeczywiście jest konieczna? Przecież funkcja ( $imie && $nazwisko && $telefon )

Jest konieczna, bo sprawdza czy zmienna ISTNIEJE, dopiero jak zmienna istnieje mozesz sprawdzic czy jest NULLem.

Cytat
isset ($imie && $nazwisko && $telefon )

MAN:
Cytat
bool isset ( mixed var [, mixed var [, ...]])

  1. <?php
  2. isset ($imie, $nazwisko, $telefon )
  3. ?>
zwroci TRUE jesli WSZYSTKIE zmienne beda istnialy
Ociu
Masz takie cos
index.php?co=skasuj&id={numerek, np. 2}

  1. <?php
  2.  elseif( $co == 'skasuj') {
  3. $baz = mysql_query
  4. (&#092;"DELETE FROM book WHERE nr='\".$_GET['id'].\"' LIMIT 1\")
  5. or die(&#092;"blad w kasowaniu:\". mysql_error());
  6. }
  7.  
  8. ?>


Staraj dawac zawsze w die(); mysql_error() ponieważ wywali info o błedach w zapytaniu mysql, a nie sam text 'blad w kasowaniu'.
pozdrawiam
Puciek
  1. <?php
  2. if( isset( $zmienna) && isset( $zmienna2 ) && isset( $zmienna3 ) )
  3. ?>

tyle w temacie
ultramega-ok
Dzięki wszystkim za pomoc.
Ale nadal pozostał problem tego usuwania z bazy. smile.gif Kod niby powinien działać, a jednak wyskakuje taki błąd:
Cytat
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

A w logu błędów:
Cytat
[Sat Feb 05 21:19:48 2005] [error] [client 127.0.0.1] Premature end of script headers: c:/apache/php/php.exe


Mam PHPTriad. Wie ktoś może jak powinienem zmienić konfigurację programu aby mySQL działało mi poprawnie?questionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.