Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Usuwanie rekordu z bazy danych
Forum PHP.pl > Forum > Przedszkole
Nitz
Jestem nowicjuszem w PHP oraz MySQL dlatego przepraszam za poziom trudności mojego błędu oraz prosiłbym o wyrozumiałość i pomoc w jego rozwiązaniu.

Wszystko fajnie chodzi, tylko nie usuwa rekordu z bazy danych.

Mógłby ktoś mi wyjaśnić dlaczego?

Z góry dziękuję za odpowiedzi.

  1. <?php
  2.  
  3. mysql_connect ("localhost","root","haslo");
  4. $zapytanie = "SELECT * FROM dane ORDER BY id";
  5. $wykonaj = mysql_query ($zapytanie);
  6.  
  7. while($wiersz=mysql_fetch_array ($wykonaj)) {
  8. echo "
  9.  
  10.  
  11. ID:".$wiersz['id']." Imię: ".$wiersz['imie']." Nazwisko:".$wiersz['nazwisko']." <a href=\"index.php?delid=".$wiersz['id']."\">Kasuj</a><br>
  12.  
  13.  
  14.  
  15. ";
  16. }
  17. $zapytanie2 = "DELETE FROM dane WHERE id='$delid'";
  18. $wykonaj2 = mysql_query ($zapytanie2);
  19. ?>
Puzi
  1. <?php
  2.  
  3. mysql_connect ("localhost","root","haslo");
  4. $zapytanie = "SELECT * FROM dane ORDER BY id";
  5. $wykonaj = mysql_query ($zapytanie);
  6.  
  7. while($wiersz=mysql_fetch_array ($wykonaj)) {
  8. echo "
  9.  
  10.  
  11. ID:".$wiersz['id']." Imię: ".$wiersz['imie']." Nazwisko:".$wiersz['nazwisko']." <a href=\"index.php?delid=".$wiersz['id']."\">Kasuj</a><br>";
  12. }
  13. $zapytanie2 = "DELETE FROM `dane` WHERE `id`='".$delid."'";
  14. $wykonaj2 = mysql_query ($zapytanie2);
  15. ?>



Tak raczej powinno być
Nitz
Po wprowadzeniu poprawek (dokładniej zasugerowanej przez Puczi) wywalił błąd:

Cytat
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\strona\txt\kontakt.txt on line 14
marcio
  1. <?php
  2. $zapytanie2 = ('DELETE FROM dane WHERE id="'.$delid.'"');
  3. $wykonaj2 = mysql_query($zapytanie2);
  4. ?>
kallosz
zamiast
  1. <?php
  2. $wykonaj2 = mysql_query ($zapytanie2);
  3. ?>

zastosuj
  1. <?php
  2. mysql_query ($zapytanie2);
  3. ?>
mike
~kallosz zmiana, którą proponujesz jest kompletnie bez sensu i nic nie wnosi. Utworzenie zmiennej lub nie nic nie znaczy.
Bład powoduje to że autor zgubił nawiasy i zamiast napisać mysql_close(); napisał mysql_close;
Nitz
Dalej nic.


Żadnych błędów, ale rekordu dalej nie usuwa.
mike
A co to jest id? Jeśli ciąg znaków (string) to jest dobrze.
Jeśli liczba (najprawdopodobniej) to zapytanie jest złe. Powinno być:
  1. <?php
  2.  
  3. // ...
  4. mysql_query('DELETE FROM dane WHERE id=' . $delid);
  5. // ...
  6.  
  7. ?>
kallosz
to zrob
  1. <?php
  2. mysql_query('DELETE FROM dane WHERE id='.$delid.) or die (mysql_error());
  3. ?>
Nitz
Niestety dalej nie usuwa rekordów.

Wklejam ponownie kod (z poprawkami):

  1. <?php
  2.  
  3. mysql_connect ("localhost","root","haslo");
  4. $zapytanie = "SELECT * FROM dane ORDER BY id";
  5. $wykonaj = mysql_query ($zapytanie);
  6.  
  7. while($wiersz=mysql_fetch_array ($wykonaj)) {
  8. echo "
  9.  
  10.  
  11. ID:".$wiersz['id']." Imię: ".$wiersz['imie']." Nazwisko:".$wiersz['nazwisko']." <a href=\"index.php?delid=".$wiersz['id']."\">Kasuj</a><br>
  12.  
  13.  
  14.  
  15. ";
  16. }
  17. $zapytanie2 = "DELETE FROM dane WHERE id='.$delid'";
  18. mysql_query($zapytanie2);
  19. ?>
mike
Jak nie uwzględniasz w kodzie tego co Ci piszemy to jak ma działać?
Popraw zapytanie tworzone w linii 18 to pogadamy.

A na samym początku skryptu dodatkowo daj:
  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. // ...
  6.  
  7. ?>
marcio
Sorki ale co zawiera zmienna $delid??
nithajasz
  1. <?php
  2. $zapytanie2 = "DELETE FROM dane WHERE id='.$delid'";
  3. ?>


Mój ulubiony bład, zjadłeś kropkę po zmiennej $delid smile.gif

powinno być tak :

  1. <?php
  2. $zapytanie2 = "DELETE FROM dane WHERE id=".$delid.;
  3. ?>


@mike
Co racja to racja rozpędziłem się smile.gif
Nitz
$delid zawiera numer rekordu, który ma zostać usunięty.

"id" to klucz tabeli "dane", zawiera tylko liczby.

Przepraszam za problemy, jestem nowicjuszem w PHP.

KOD:

  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. mysql_connect ("localhost","root","haslo");
  6. $zapytanie = "SELECT * FROM dane ORDER BY id";
  7. $wykonaj = mysql_query ($zapytanie);
  8.  
  9. while($wiersz=mysql_fetch_array ($wykonaj)) {
  10. echo "
  11.  
  12.  
  13. ID:".$wiersz['id']." Imię: ".$wiersz['imie']." Nazwisko:".$wiersz['nazwisko']." <a href=\"index.php?delid=".$wiersz['id']."\">Kasuj</a><br>
  14.  
  15.  
  16.  
  17. ";
  18. }
  19.  
  20. $zapytanie2 = ("DELETE FROM dane WHERE id='.$delid'") or die (mysql_error());
  21. mysql_query($zapytanie2);
  22.  
  23.  
  24. ?>


Wywala coś takiego:

Cytat
Notice: Use of undefined constant nitz - assumed 'nitz' in C:\xampp\htdocs\strona\txt\kontakt.txt on line 9
ID:1 Imię: Marek Nazwisko:Lipowski Kasuj
ID:2 Imię: aaa Nazwisko:bbb Kasuj
ID:3 Imię: bbb Nazwisko:bbb Kasuj

Notice: Undefined variable: delid in C:\xampp\htdocs\strona\txt\kontakt.txt on line 24
mike
Cytat(nithajasz @ 8.06.2008, 15:54:08 ) *
powinno być tak :
  1. <?php
  2. $zapytanie2 = "DELETE FROM dane WHERE id='".$delid."'";
  3. ?>
A to mój ulubiony błąd. Traktowanie liczb jako stringi. Zapytanie nic nie znajdzie i nic nie usunie tongue.gif
Nitz
Z kropką również to samo.
kallosz
a jak pobierasz to delid? moze jakis $_GET by sie przydal?
bo on nie wie co kasowac...

To wygloda teraz tak
USUN Z tabeli GDZIE id=

czyli wszystko jest ok
mike
Cytat(Nitz @ 8.06.2008, 15:55:34 ) *
$delid zawiera numer rekordu, który ma zostać usunięty.
Nic nie zawiera. PHP nie zna takiej zmiennej, bo niby skąd ma znać?
Z adresu URL? Z adresu URL robi się tak: $_GET['delid']
Nitz
Czyli zamiast

  1. <?php
  2. $zapytanie2 = ("DELETE FROM dane WHERE id='.$delid.'") or die (mysql_error());
  3. ?>

Powinno być:
  1. <?php
  2. $zapytanie2 = ("DELETE FROM dane WHERE id='.$_GET['delid'].'") or die (mysql_error());
  3. ?>


Tak?

Jeśli tak, to:

Cytat
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\strona\txt\kontakt.txt on line 23
kallosz
  1. WHERE id=".$_GET['delid']
nithajasz
  1. <?php
  2. $zapytanie2 = ("DELETE FROM dane WHERE id=".$_GET['delid']) or die (mysql_error());
  3. ?>


Pomijam fakt, że powinieneś walidować dane z $_GET bo tak można by było sobie usunąć dowolny rekord smile.gif
mike
Nie wiem jak bardzo trzeba być ... żeby dwa razy nie zrozumieć. Pisze trzeci raz.
Wartość do id w zapytaniu w klauzuli WHERE ma być bez apostrofów

  1. <?php
  2. $zapytanie2 = 'DELETE FROM dane WHERE id=' . $_GET['delid']) or die (mysql_error());
  3. ?>
kallosz
Cytat(nithajasz @ 8.06.2008, 16:12:50 ) *
  1. <?php
  2. $zapytanie2 = (&#092;"DELETE FROM dane WHERE id=\".$_GET['delid']) or die (mysql_error());
  3. ?>


Pomijam fakt, że powinieneś walidować dane z $_GET bo tak można by było sobie usunąć dowolny rekord smile.gif
a juz nie mowie ze wszystko z bazy mozna bylo by usunac smile.gif mySQL injection
Mlodycompany
  1. <?php
  2. $zapytanie = mysql_query("DELETE FROM `dane` WHERE `id`='".$_GET['delid']."'");
  3. ?>

ja mam cos takiego i zawsze działa
nithajasz
Cytat(Mlodycompany @ 8.06.2008, 16:37:18 ) *
  1. <?php
  2. $zapytanie = mysql_query(&#092;"DELETE FROM `dane` WHERE `id`='\".$_GET['delid'].\"'\");
  3. ?>

ja mam cos takiego i zawsze działa


Działać będzie ale fakt faktem id zapisujesz jako przeważnie int a dodając apostrofy porównujesz id ze stringiem smile.gif

Też właśnie spojrzałem do siebie i takie coś używałem...
Mlodycompany
to przeciez mozna zrobic przed zapytaniem
  1. <?php
  2. $_GET['delid'] = int($_GET['delid']);
  3. ?>
albo warunek,
  1. <?php
  2. if(int($_GET['delid'])){
  3. //zapytanie
  4. }
  5. ?>
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.