Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Usuwanie danych z bazy
Forum PHP.pl > Forum > Przedszkole
Basia555
Witam
Nie wiem jak usunąć dane z bazy danych, chodzi mi o pojedyńczy wiersz. Zrobiłam coś takiego ale nie chce mi działać.

usun.php
  1. <?
  2. $id = $_POST['ID'];
  3. $q = mysql_query("DELETE FROM cennik_uslug WHERE ID = $id") or die (mysql_error());
  4. ?>


główny kod programu
usunu.php
  1. <?php
  2.  
  3. $q = mysql_connect('localhost','root','bilerek555') or
  4. die('Padl serwer');
  5. $q = mysql_select_db('stronaphp') or die('Padla baza');
  6.  
  7.  
  8. $wynik = mysql_query('SELECT * FROM cennik_uslug')
  9. or die('Błąd zapytania');
  10.  
  11.  
  12.  
  13. echo '<table>
  14. <tr class = "header">
  15. <th>ID</th>
  16. <th>Nazwa usługi</th>
  17. <th>Cena za metr</th>
  18. <th>Cena za pkt/mb</th>
  19. </tr>';
  20. while($row = mysql_fetch_array($wynik)) {
  21. echo "<tr>
  22. <td>{$row['ID']}</td>
  23. <td>{$row['Nazwa_uslugi']}</td>
  24. <td>{$row['Cena_za_metr']}</td>
  25. <td>{$row['Cena_za_pktmb']}</td>";
  26.  
  27.  
  28. echo " <td><a href="usun.php?ID='.$row['ID'].'">usuń</a></td>";
  29.  
  30.  
  31.  
  32. echo "</tr>";
  33. }
  34. echo '</table>';
  35.  
  36. ?>


Co mogę z tym dalej zrobić? Kilka godzin i nic dalej nie zrobiłam :/
Turson
  1. $id = $_POST['ID'];

nie $_POST a $_GET
Basia555
Parse error: syntax error, unexpected 'usun' (T_STRING), expecting ',' or ';' in C:\xampp\htdocs\praca\usunu.php on line 28

Wywala mi taki błąd
Turson
Tutaj
  1. echo " <td><a href="usun.php?ID='.$row['ID'].'">usuń</a></td>";

zobacz jak w PHP wygląda konkatenacja
Basia555
Cytat(Turson @ 2.07.2015, 15:14:27 ) *
Tutaj
  1. echo " <td><a href="usun.php?ID='.$row['ID'].'">usuń</a></td>";

zobacz jak w PHP wygląda konkatenacja


Mógłbym prosić jaśniej bo dalej nie wiem, czytałam teraz w necie ale dalej nie wiem gdzie jest błąd :/
kreatiff
Zwróć uwagę na cydzysłowy i apostrofy. Masz kilka opcji:
  1. echo "<td><a href=\"usun.php?ID=".$row['ID']."\">usuń</a></td>";
albo
  1. echo '<td><a href="usun.php?ID='.$row['ID'].'">usuń</a></td>';
albo
  1. echo "<td><a href=\"usun.php?ID={$row['ID']}\">usuń</a></td>";
Basia555
Przetestowałam wszystkie te metody i ogólnie funkcja dziala w każdym przypadku ale dalej nie usuwa mi rekordu o danym ID :/


Próbowałam coś w ten sposób zrobić ale dalej nic
  1. <?
  2.  
  3. if (isset($_GET['id'])){
  4. $q = mysql_query("DELETE FROM cennik_uslug WHERE ID = $_GET['ID']") or die (mysql_error());
  5. }
  6. else
  7. {
  8. echo "Blad w usuwaniu";
  9. }
  10. ?>


Cytat(kreatiff @ 2.07.2015, 17:57:34 ) *
Zwróć uwagę na cydzysłowy i apostrofy. Masz kilka opcji:
  1. echo "<td><a href=\"usun.php?ID=".$row['ID']."\">usuń</a></td>";
albo
  1. echo '<td><a href="usun.php?ID='.$row['ID'].'">usuń</a></td>';
albo
  1. echo "<td><a href=\"usun.php?ID={$row['ID']}\">usuń</a></td>";


nie bardzo wiem czym te metody się różnią, mogę prosić o jakąś podpowiedź smile.gif
Turson
Tutaj masz opis konkatenacji
http://php.net/manual/en/language.operators.string.php
Warto patrzeć w komentarze

Używaj <?PHP zamiast <? (chyba, że masz włączone short tags)

Co do zapytania, zrób tak:
  1. $query = "DELETE FROM cennik_uslug WHERE ID = $_GET['ID']";
  2. echo $query;

Sprawdź rezultat (to nic nie usunie, ale pokaże czyste zapytanie)
Basia555
Cytat(Turson @ 2.07.2015, 21:51:09 ) *
Tutaj masz opis konkatenacji
http://php.net/manual/en/language.operators.string.php
Warto patrzeć w komentarze

Używaj <?PHP zamiast <? (chyba, że masz włączone short tags)

Co do zapytania, zrób tak:
  1. $query = "DELETE FROM cennik_uslug WHERE ID = $_GET['ID']";
  2. echo $query;

Sprawdź rezultat (to nic nie usunie, ale pokaże czyste zapytanie)


Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\praca\usun.php on line 4

Pokazał mi się taki oto błąd
patwoj98
  1. $query = "DELETE FROM cennik_uslug WHERE ID = '".$_GET['ID']."'";


Wklej to za query.
Basia555
  1. if($_GET['action'] == 'edit' && $_GET['ID'])
  2. {
  3. if(mysql_query("DELETE FROM cennik_uslug WHERE ID = ".$_GET['ID']))
  4. {
  5. echo 'usunieto';
  6. }
  7. else
  8. {
  9. echo 'blad';
  10. }
  11. }
  12. else{
  13.  
  14. $wynik = mysql_query('SELECT * FROM cennik_uslug')
  15. or die('Błąd zapytania');
  16.  
  17. echo '<table>
  18. <tr class = "header">
  19. <th>ID</th>
  20. <th>Nazwa usługi</th>
  21. <th>Cena za metr</th>
  22. <th>Cena za pkt/mb</th>
  23. </tr>';
  24. while($row = mysql_fetch_array($wynik)) {
  25. echo "<tr>
  26. <td>{$row['ID']}</td>
  27. <td>{$row['Nazwa_uslugi']}</td>
  28. <td>{$row['Cena_za_metr']}</td>
  29. <td>{$row['Cena_za_pktmb']}</td>";
  30.  
  31. echo '<td><a href="?action=edit&ID='.$row['ID'].'">usun</a></td>';
  32.  
  33.  
  34.  
  35.  
  36. echo "</tr>";


Już mi wszystko działa tylko

  1. php]if($_GET['action'] == 'edit' && $_GET['ID'])


nie wiem jak to zdefiniować,
Notice: Undefined index: action in C:\xampp\htdocs\praca\usunu.php on line 1

usuwa mi to dane z bazy, wszystko super tylko jeszcze nie wiem jak usunąć ten błąd
goartur
Cytat(Basia555 @ 2.07.2015, 22:27:03 ) *
  1. if($_GET['action'] == 'edit' && $_GET['ID'])
  2. {
  3. if(mysql_query("DELETE FROM cennik_uslug WHERE ID = ".$_GET['ID']))
  4. {
  5. echo 'usunieto';
  6. }
  7. else
  8. {
  9. echo 'blad';
  10. }
  11. }
  12. else{
  13.  
  14. $wynik = mysql_query('SELECT * FROM cennik_uslug')
  15. or die('Błąd zapytania');
  16.  
  17. echo '<table>
  18. <tr class = "header">
  19. <th>ID</th>
  20. <th>Nazwa usługi</th>
  21. <th>Cena za metr</th>
  22. <th>Cena za pkt/mb</th>
  23. </tr>';
  24. while($row = mysql_fetch_array($wynik)) {
  25. echo "<tr>
  26. <td>{$row['ID']}</td>
  27. <td>{$row['Nazwa_uslugi']}</td>
  28. <td>{$row['Cena_za_metr']}</td>
  29. <td>{$row['Cena_za_pktmb']}</td>";
  30.  
  31. echo '<td><a href="?action=edit&ID='.$row['ID'].'">usun</a></td>';
  32.  
  33.  
  34.  
  35.  
  36. echo "</tr>";


Już mi wszystko działa tylko

  1. php]if($_GET['action'] == 'edit' && $_GET['ID'])


nie wiem jak to zdefiniować,
Notice: Undefined index: action in C:\xampp\htdocs\praca\usunu.php on line 1

usuwa mi to dane z bazy, wszystko super tylko jeszcze nie wiem jak usunąć ten błąd


Oczywiscie ze dostajesz undefined index, sprawdzasz get action lecz nie sprawdzasz czy zostal on zdefiniowany ustaw:
  1. if(isset($_GET['action']) == 'edit' && isset($_GET['ID']))


baaasmiley.gif
KsaR
Cytat(goartur @ 2.07.2015, 22:29:20 ) *
Oczywiscie ze dostajesz undefined index, sprawdzasz get action lecz nie sprawdzasz czy zostal on zdefiniowany ustaw:
  1. if(isset($_GET['action']) == 'edit' && isset($_GET['ID']))

baaasmiley.gif

isset zwraca czy istnieje zmienna/indeks oraz czy nie jest null.
W twoim przykładzie jakby isset zwracal zmienna... ohmy.gif.
isset($_GET['action']) == 'edit'

poprawnie:
  1. if (isset($_GET['action'],$_GET['id']) && $_GET['action']==='edit')


edycja:

w twoim wypadku to wyglądało tak:
isset($_GET['action']) == 'edit'
Czyli np.
Czy_istnieje($_GET['action']) ktore zwroci prawda/falsz.
I czy prawda/falsz jest rowne edit.

W moim:
if (isset($_GET['action'],$_GET['id']) && $_GET['action']==='edit')
Czyli:
Czy_istnieje($_GET['action'] i $_GET['id']) oraz jesli tak czy $_GET['action'] jest identyczne wartoscia i typem edit.
Basia555
Cytat(kreatiff @ 2.07.2015, 17:57:34 ) *
Zwróć uwagę na cydzysłowy i apostrofy. Masz kilka opcji:
  1. echo "<td><a href=\"usun.php?ID=".$row['ID']."\">usuń</a></td>";
albo
  1. echo '<td><a href="usun.php?ID='.$row['ID'].'">usuń</a></td>';
albo
  1. echo "<td><a href=\"usun.php?ID={$row['ID']}\">usuń</a></td>";


Dziękuję wszystkim za pomoc już wszystko mi działa smile.gif Jeszcze tylko maleńka prośba. Mógłby mi ktoś wyjaśnić o co o tym dokładnie chodzi? Jaka jest różnica między tym co napisał tytaj kolega kreatiff w tych 3 przypadkach. Niby wszystkie mi zadziałały tylko nie rozumiem ich logiki
com
chodzi o to że ten cudzysłowie działają na zasadzie takiej że pierwszy " otwiera a drugi zamyka zawartość w echo wiec

maja np przykład 1 jakby nie dodać \ to ten cudzysłów nie został by zinterpretowany jako tekst tylko jako zamkniecie echo czyli wygl by to tak:
  1. echo "<td><a href="
ale to by spowodowało błąd ponieważ brakowało by ; na końcu a reszta tego co tam była była by traktowana jako zwykły tekst co też było by błedem, stąd tez jeśli chcemy użyć w echo cudzysłowie jako tekst trzeba zapisać to jako \".
Mozna było to też zrobić inaczej czyli:
  1. echo "<td><a href=\"usun.php?ID=$row[ID]\">usuń</a></td>";

Tyko wtedy trzeba pamiętać że index tablicy bez cudzysłowi
W drugim przypadku echo miało pojedyncze cudzysłowie(cal) wiec nie trzeba było zamieniać na encje, ale za to trzeba było skonkatenować tego stringa z nasza zmienna, sta tez to złączenie w postaci zamknięcia tego fragmentu echo poprzez ' dodania . bo tak sie w php konkatenuje wpisania zmiennej i zrobienia ponownie tej operacji żeby dołączyć resztę naszego tekstu.

No a trzeci sposób to to samo co pierwszy tylko zamiast kontentować kropka i zamykać otwierać to wpisujesz zmienna w {} ale to tylko działa jak echo używa ", bo to mówi php, że w echo może sie znajdować coś co trzeba przetworzyćsmile.gif
Basia555
Ok czyli już wiem co i jak wielkie dzięki jeszcze raz smile.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.