Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Usuwanie rekordu z bazy danych
-Nitz-
post
Post #1





Goście







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. ?>
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 25)
Puzi
post
Post #2





Grupa: Zarejestrowani
Postów: 231
Pomógł: 17
Dołączył: 26.08.2007

Ostrzeżenie: (10%)
X----


  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ć
Go to the top of the page
+Quote Post
-Nitz-
post
Post #3





Goście







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
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


  1. <?php
  2. $zapytanie2 = ('DELETE FROM dane WHERE id="'.$delid.'"');
  3. $wykonaj2 = mysql_query($zapytanie2);
  4. ?>


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
kallosz
post
Post #5





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


zamiast
  1. <?php
  2. $wykonaj2 = mysql_query ($zapytanie2);
  3. ?>

zastosuj
  1. <?php
  2. mysql_query ($zapytanie2);
  3. ?>


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


~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;
Go to the top of the page
+Quote Post
-Nitz-
post
Post #7





Goście







Dalej nic.


Żadnych błędów, ale rekordu dalej nie usuwa.
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
kallosz
post
Post #9





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


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


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
-Nitz-
post
Post #10





Goście







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. ?>
Go to the top of the page
+Quote Post
mike
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
marcio
post
Post #12





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Sorki ale co zawiera zmienna $delid??


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
nithajasz
post
Post #13





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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

Ten post edytował nithajasz 8.06.2008, 14:59:32
Go to the top of the page
+Quote Post
-Nitz-
post
Post #14





Goście







$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
Go to the top of the page
+Quote Post
mike
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
-Nitz-
post
Post #16





Goście







Z kropką również to samo.
Go to the top of the page
+Quote Post
kallosz
post
Post #17





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


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

Ten post edytował kallosz 8.06.2008, 14:58:01


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
mike
post
Post #18





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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']
Go to the top of the page
+Quote Post
-Nitz-
post
Post #19





Goście







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
Go to the top of the page
+Quote Post
kallosz
post
Post #20





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


  1. WHERE id=".$_GET['delid']


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
nithajasz
post
Post #21





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
mike
post
Post #22





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował mike 8.06.2008, 15:14:46
Go to the top of the page
+Quote Post
kallosz
post
Post #23





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


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


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #24





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


  1. <?php
  2. $zapytanie = mysql_query("DELETE FROM `dane` WHERE `id`='".$_GET['delid']."'");
  3. ?>

ja mam cos takiego i zawsze działa

Ten post edytował Mlodycompany 8.06.2008, 15:37:35
Go to the top of the page
+Quote Post
nithajasz
post
Post #25





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #26





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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. ?>


Ten post edytował Mlodycompany 8.06.2008, 15:46:26
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 00:47