Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]Usuwa wszystki dane z bazy danych
ufo1990
post 13.11.2019, 14:30:36
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.07.2019

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


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

Ten post edytował ufo1990 13.11.2019, 14:31:03
Go to the top of the page
+Quote Post
viking
post 13.11.2019, 14:35:17
Post #2





Grupa: Zarejestrowani
Postów: 5 430
Pomógł: 927
Dołączył: 30.08.2006

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


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


--------------------
Go to the top of the page
+Quote Post
ufo1990
post 13.11.2019, 14:37:44
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.07.2019

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


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


Ten post edytował ufo1990 13.11.2019, 14:44:05
Go to the top of the page
+Quote Post
trueblue
post 13.11.2019, 14:52:02
Post #4





Grupa: Zarejestrowani
Postów: 5 601
Pomógł: 1524
Dołączył: 11.03.2014

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


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


--------------------
Go to the top of the page
+Quote Post
ufo1990
post 13.11.2019, 14:57:35
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.07.2019

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


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. }
Go to the top of the page
+Quote Post
trueblue
post 13.11.2019, 15:03:30
Post #6





Grupa: Zarejestrowani
Postów: 5 601
Pomógł: 1524
Dołączył: 11.03.2014

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


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.


--------------------
Go to the top of the page
+Quote Post
ufo1990
post 13.11.2019, 15:34:16
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.07.2019

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


Panowie a gdzie popełniam błąd że zaznaczając kilka checkboxów dostaje zwróconą wartość tylko jednego ?
Go to the top of the page
+Quote Post
nospor
post 13.11.2019, 15:44:58
Post #8





Grupa: Moderatorzy
Postów: 34 868
Pomógł: 5802
Dołączył: 27.12.2004




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


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dublinka
post 14.11.2019, 03:20:40
Post #9





Grupa: Zarejestrowani
Postów: 353
Pomógł: 43
Dołączył: 22.02.2008

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


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. };


Ten post edytował dublinka 14.11.2019, 03:21:56
Go to the top of the page
+Quote Post
ufo1990
post 14.11.2019, 08:40:23
Post #10





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.07.2019

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


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




Go to the top of the page
+Quote Post
trueblue
post 14.11.2019, 09:27:38
Post #11





Grupa: Zarejestrowani
Postów: 5 601
Pomógł: 1524
Dołączył: 11.03.2014

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


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.


--------------------
Go to the top of the page
+Quote Post
ufo1990
post 14.11.2019, 09:40:49
Post #12





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 26.07.2019

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


czemu taka sugestia że id=4 ?
Go to the top of the page
+Quote Post
trueblue
post 14.11.2019, 09:58:04
Post #13





Grupa: Zarejestrowani
Postów: 5 601
Pomógł: 1524
Dołączył: 11.03.2014

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


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.



--------------------
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 16.12.2019 - 06:47