Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [SQL][PHP]Usuwa wszystki dane z bazy danych

Napisany przez: ufo1990 13.11.2019, 14:30:36

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(http://www.php.net/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 = http://www.php.net/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(!http://www.php.net/empty($delete_domain))
  14. {
  15. $connect->query('DELETE FROM domains WHERE id='.(int)$id[$i].'');
  16. }}
  17.  
  18.  
  19. $_SESSION['well_done']=true;
  20. http://www.php.net/header('Location: change_data_confirm.php');
  21. }




  1. $id_domain = $_POST['id'];
  2. foreach ($id_domain as $value)
  3. {
  4. if(http://www.php.net/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

Napisany przez: viking 13.11.2019, 14:35:17

A co konkretnie zawiera $id? Bo nazwa wydaje się nieadekwatna do wartości.

Napisany przez: ufo1990 13.11.2019, 14:37:44

$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 http://www.php.net/echo $data['id'];?>"/>
  10.  

Napisany przez: trueblue 13.11.2019, 14:52:02

A w jakim celu w tej samej pętli update'ujesz domenę i ją usuwasz ($delete_domain jest zawsze ustawiona na 1)?

Napisany przez: ufo1990 13.11.2019, 14:57:35

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(http://www.php.net/isset($value))
  5. {
  6. $all_ok=true;
  7. $delete_domain=$value;
  8. }
  9.  
  10. }
  11. if ($all_ok==true)
  12. {
  13. $count = http://www.php.net/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(!http://www.php.net/empty($delete_domain))
  19. {
  20. $connect->query('DELETE FROM domains WHERE id='.$value.'');
  21. }
  22.  
  23.  
  24. $_SESSION['well_done']=true;
  25. http://www.php.net/header('Location: change_data_confirm.php');
  26. }

Napisany przez: trueblue 13.11.2019, 15:03:30

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.

Napisany przez: ufo1990 13.11.2019, 15:34:16

Panowie a gdzie popełniam błąd że zaznaczając kilka checkboxów dostaje zwróconą wartość tylko jednego ?

Napisany przez: nospor 13.11.2019, 15:44:58

Z racji, ze nie raczyles podac kody checkboxow to strzelam:
nie nadales checkboxom nazw tablicowych

Napisany przez: dublinka 14.11.2019, 03:20:40

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(http://www.php.net/isset($_POST["options"]))
  3. {
  4. $arg = $_POST["options"];
  5. foreach($arg as $opt) {
  6. http://www.php.net/echo $opt . " kupiona <br>";
  7. };
  8. };

Napisany przez: ufo1990 14.11.2019, 08:40:23

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 http://www.php.net/echo $data['domain_name']; ?>" name="domain_name[]" placeholder="<?php http://www.php.net/echo $data['domain_name']; ?>" onfocus="this.placeholder='<?php http://www.php.net/echo $data['domain_name']; ?>'" onblur="this.placeholder='<?php http://www.php.net/echo $data['domain_name']; ?>'"/><br />
  14. </td>
  15.  
  16. <td class="staff">Usuń:<br>
  17. <input type="checkbox" name="id[]" value="<?php http://www.php.net/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(http://www.php.net/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((http://www.php.net/preg_match('/[ćęłńóśźżA\/]/',$value)) || (!http://www.php.net/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(http://www.php.net/isset($value))
  33. {
  34.  
  35. $score=$value;
  36. }
  37. }
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45. if ($all_ok==true)
  46. {
  47. $count = http://www.php.net/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(!http://www.php.net/empty($delete_domain))
  53. {
  54. $connect->query('DELETE FROM domains WHERE id='.$value.'');
  55. }
  56.  
  57.  
  58. $_SESSION['well_done']=true;
  59. http://www.php.net/header('Location: change_data_confirm.php');
  60. }
  61. }





Napisany przez: trueblue 14.11.2019, 09:27:38

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.

Napisany przez: ufo1990 14.11.2019, 09:40:49

czemu taka sugestia że id=4 ?

Napisany przez: trueblue 14.11.2019, 09:58:04

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.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)