Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Usuwa wszystki dane z bazy danych
Forum PHP.pl > Forum > Przedszkole
ufo1990
Mam problem z kodem który po zaznaczeniu checkboxa ma usuwać daną domenę, natomiast kod usuwa wszystkie domeny które są przypisane do danej osoby. Poniżej wrzucam cześć kodu.

  1. if(isset($_POST['delete_domain']))
  2. {
  3. $all_ok=true;
  4. $_POST['delete_domain']=1;
  5. $delete_domain=$_POST['delete_domain'];
  6. }
  7. if ($all_ok==true)
  8. {
  9. $count = count($id);
  10. for($i=0;$i<$count;$i++) {
  11.  
  12. $connect->query('UPDATE domains SET domain_end="'.$domain_end[$i].'", media="'.$media[$i].'", staff="'.$staff[$i].'", serwer="'.$serwer[$i].'", positioning="'.$positioning[$i].'", domain_price="'.$domain_price[$i].'", domain_name="'.$domain_name[$i].'" WHERE id='.(int)$id[$i].'');
  13. if(!empty($delete_domain))
  14. {
  15. $connect->query('DELETE FROM domains WHERE id='.(int)$id[$i].'');
  16. }}
  17.  
  18.  
  19. $_SESSION['well_done']=true;
  20. header('Location: change_data_confirm.php');
  21. }




  1. $id_domain = $_POST['id'];
  2. foreach ($id_domain as $value)
  3. {
  4. if(isset($_POST['delete_domain']))
  5. {
  6. $all_ok=true;
  7. $_POST['delete_domain']=1;
  8. $delete_domain=$_POST['delete_domain'];
  9. }}


dorobiłem pętle, jednak teraz w bazie danych usuwany jest rekord z domeną o najwyższym id
viking
A co konkretnie zawiera $id? Bo nazwa wydaje się nieadekwatna do wartości.
ufo1990
$id = $_POST['id'];

  1. $result = $connect->query("SELECT * FROM domains where id_person='$id_person'");
  2. $how_nick = $result->num_rows;
  3.  
  4. if ($how_nick != 0)
  5. {
  6. while($data = $result->fetch_assoc())
  7. {
  8. ?>
  9. <input type="hidden" name="id[]" value="<?php echo $data['id'];?>"/>
  10.  
trueblue
A w jakim celu w tej samej pętli update'ujesz domenę i ją usuwasz ($delete_domain jest zawsze ustawiona na 1)?
ufo1990
Potrzebne mi jest do tego, abym mógł zmienić cene, nazwę domeny albo ją usunąć. Poprawiłem kod i teraz działa poprawnie, jednak mogę usunąć tylko jedną domenę, a np. chciałbym usunąć kilka domen

  1. foreach ($id as $key => $value)
  2. {
  3.  
  4. if(isset($value))
  5. {
  6. $all_ok=true;
  7. $delete_domain=$value;
  8. }
  9.  
  10. }
  11. if ($all_ok==true)
  12. {
  13. $count = count($id);
  14. for($i=0;$i<$count;$i++)
  15. {
  16. $connect->query('UPDATE domains SET domain_end="'.$domain_end[$i].'", media="'.$media[$i].'", staff="'.$staff[$i].'", serwer="'.$serwer[$i].'", positioning="'.$positioning[$i].'", domain_price="'.$domain_price[$i].'", domain_name="'.$domain_name[$i].'" WHERE id='.(int)$id[$i].'');
  17. }
  18. if(!empty($delete_domain))
  19. {
  20. $connect->query('DELETE FROM domains WHERE id='.$value.'');
  21. }
  22.  
  23.  
  24. $_SESSION['well_done']=true;
  25. header('Location: change_data_confirm.php');
  26. }
trueblue
To sprawdź skąd teraz wzięła się wartość $value, którą używasz do usuwania.

W formularzu HTML przy edycji każdego rekordu domeny dodaj checkbox o nazwie tablicowej (podobnie jak ten ukryty input). Z niego pobieraj id domen do usunięcia.

Pola hidden w ogóle nie są potrzebne, bo id domeny możesz przypisać bezpośrednio jako klucz w nazwie tablicowej inputa (np. <input type="text" name="staff[2]" value="..."/>). Podobnie zresztą w tych checkboxach.

Do obsługi używaj pętli foreach, a nie for.
ufo1990
Panowie a gdzie popełniam błąd że zaznaczając kilka checkboxów dostaje zwróconą wartość tylko jednego ?
nospor
Z racji, ze nie raczyles podac kody checkboxow to strzelam:
nie nadales checkboxom nazw tablicowych
dublinka
Cytat(ufo1990 @ 13.11.2019, 14:34:16 ) *
Panowie a gdzie popełniam błąd że zaznaczając kilka checkboxów dostaje zwróconą wartość tylko jednego ?


  1.  
  2. <form method="post" action="">
  3. <input type="checkbox" name="options[]" value="jablko"/> jablko<br/>
  4. <input type="checkbox" name="options[]" value="gruszka" /> gruszka<br/>
  5. <input type="checkbox" name="options[]" value="pietruszka "/>pietruszka<br/>
  6. <input type="submit" value="Go!" />
  7. </form>


I

  1.  
  2. if(isset($_POST["options"]))
  3. {
  4. $arg = $_POST["options"];
  5. foreach($arg as $opt) {
  6. echo $opt . " kupiona <br>";
  7. };
  8. };
ufo1990
z pętli while zaczytuje z bazy danych wszystkie rekordy tj. ile dany użytkownik ma domen
  1. <?php
  2. $result = $connect->query("SELECT * FROM domains where id_person='$id_person'");
  3. $how_nick = $result->num_rows;
  4.  
  5. if ($how_nick != 0)
  6. {
  7. while($data = $result->fetch_assoc())
  8. {
  9. ?>
  10. <tr class="staff">
  11. <td class="staff">
  12. Nazwa Domeny:<br>
  13. <input class="staff" type="text" value="<?php echo $data['domain_name']; ?>" name="domain_name[]" placeholder="<?php echo $data['domain_name']; ?>" onfocus="this.placeholder='<?php echo $data['domain_name']; ?>'" onblur="this.placeholder='<?php echo $data['domain_name']; ?>'"/><br />
  14. </td>
  15.  
  16. <td class="staff">Usuń:<br>
  17. <input type="checkbox" name="id[]" value="<?php echo $data['id'];?>"/>
  18. </td>
  19.  
  20. </tr>
  21. <?php
  22. }}}}
  23. ?>


Zamysł działania skryptu jest taki abym mógł zmienić nazwę domeny bądź ją usunąć i poniższa cześć kodu tak działa jednak tylko i wyłącznie dla jednej domeny.

  1. if(isset($_POST['send']))
  2. {
  3. $all_ok=true;
  4. $id = $_POST['id'];
  5. $domain_name = $_POST['domain_name'];
  6. foreach ($domain_name as $key => $value)
  7. {
  8. if((preg_match('/[ćęłńóśźżA\/]/',$value)) || (!preg_match('/[.]/',$value)))
  9. {
  10. $all_ok=false;
  11. $score="Formuła domeny".' <b> '.$value.' </b> '. "jest nie poprawna!".'<br>';
  12. }
  13. else
  14. {
  15. $result = $connect->query("SELECT id FROM domains WHERE domain_name='$value' AND id_person != '$id_person'");
  16.  
  17. if (!$result) throw new Exception($connect->error);
  18.  
  19. $how_domain_name = $result->num_rows;
  20. if($how_domain_name>0)
  21. {
  22. $all_ok=false;
  23. $score="Istnieje już domena".' <b> '.$value.' </b> '.'<br>';
  24.  
  25. }
  26. }
  27.  
  28.  
  29. foreach ($id as $key => $value)
  30. {
  31.  
  32. if(isset($value))
  33. {
  34.  
  35. $score=$value;
  36. }
  37. }
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45. if ($all_ok==true)
  46. {
  47. $count = count($id);
  48. for($i=0;$i<$count;$i++)
  49. {
  50. $connect->query('UPDATE domains SET domain_name="'.$domain_name[$i].'" WHERE id='.(int)$id[$i].'');
  51. }
  52. if(!empty($delete_domain))
  53. {
  54. $connect->query('DELETE FROM domains WHERE id='.$value.'');
  55. }
  56.  
  57.  
  58. $_SESSION['well_done']=true;
  59. header('Location: change_data_confirm.php');
  60. }
  61. }




trueblue
Sugerowałem Ci rozwiązanie.
W nazwach inputów zawrzyj id domeny, czyli nie:
  1. name="domain_name[]"

ale:
  1. name="domain_name[4]"
(zakładając, że masz do czynienia z id=4).

Podobnie z checkboxami.

Nie iteruj z pomocą for, ale foreach, wtedy kluczem będzie id domeny.

Sprawdź co masz w $value w przypadku usuwania domeny.
ufo1990
czemu taka sugestia że id=4 ?
trueblue
Chyba nie potrafisz czytać ze zrozumieniem i możemy wałkować ten temat w nieskończoność.

Napisałem, że id=4, jeśli masz do czynienia z takim id domeny. To tylko przykład, powinieneś tam podstawić faktyczne id domen do edycji.

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.