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.
if(http://www.php.net/isset($_POST['delete_domain'])) { $all_ok=true; $_POST['delete_domain']=1; $delete_domain=$_POST['delete_domain']; } if ($all_ok==true) { $count = http://www.php.net/count($id); for($i=0;$i<$count;$i++) { $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].''); if(!http://www.php.net/empty($delete_domain)) { $connect->query('DELETE FROM domains WHERE id='.(int)$id[$i].''); }} $_SESSION['well_done']=true; http://www.php.net/header('Location: change_data_confirm.php'); }
$id_domain = $_POST['id']; foreach ($id_domain as $value) { if(http://www.php.net/isset($_POST['delete_domain'])) { $all_ok=true; $_POST['delete_domain']=1; $delete_domain=$_POST['delete_domain']; }}
A co konkretnie zawiera $id? Bo nazwa wydaje się nieadekwatna do wartości.
$id = $_POST['id'];
$result = $connect->query("SELECT * FROM domains where id_person='$id_person'"); $how_nick = $result->num_rows; if ($how_nick != 0) { while($data = $result->fetch_assoc()) { ?> <input type="hidden" name="id[]" value="<?php http://www.php.net/echo $data['id'];?>"/>
A w jakim celu w tej samej pętli update'ujesz domenę i ją usuwasz ($delete_domain jest zawsze ustawiona na 1)?
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
foreach ($id as $key => $value) { if(http://www.php.net/isset($value)) { $all_ok=true; $delete_domain=$value; } } if ($all_ok==true) { $count = http://www.php.net/count($id); for($i=0;$i<$count;$i++) { $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].''); } if(!http://www.php.net/empty($delete_domain)) { $connect->query('DELETE FROM domains WHERE id='.$value.''); } $_SESSION['well_done']=true; http://www.php.net/header('Location: change_data_confirm.php'); }
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.
Panowie a gdzie popełniam błąd że zaznaczając kilka checkboxów dostaje zwróconą wartość tylko jednego ?
Z racji, ze nie raczyles podac kody checkboxow to strzelam:
nie nadales checkboxom nazw tablicowych
<form method="post" action=""> <input type="checkbox" name="options[]" value="jablko"/> jablko<br/> <input type="checkbox" name="options[]" value="gruszka" /> gruszka<br/> <input type="checkbox" name="options[]" value="pietruszka "/>pietruszka<br/> <input type="submit" value="Go!" /> </form>
if(http://www.php.net/isset($_POST["options"])) { $arg = $_POST["options"]; foreach($arg as $opt) { http://www.php.net/echo $opt . " kupiona <br>"; }; };
z pętli while zaczytuje z bazy danych wszystkie rekordy tj. ile dany użytkownik ma domen
<?php $result = $connect->query("SELECT * FROM domains where id_person='$id_person'"); $how_nick = $result->num_rows; if ($how_nick != 0) { while($data = $result->fetch_assoc()) { ?> <tr class="staff"> <td class="staff"> Nazwa Domeny:<br> <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 /> </td> <td class="staff">Usuń:<br> <input type="checkbox" name="id[]" value="<?php http://www.php.net/echo $data['id'];?>"/> </td> </tr> <?php }}}} ?>
if(http://www.php.net/isset($_POST['send'])) { $all_ok=true; $id = $_POST['id']; $domain_name = $_POST['domain_name']; foreach ($domain_name as $key => $value) { if((http://www.php.net/preg_match('/[ćęłńóśźżA\/]/',$value)) || (!http://www.php.net/preg_match('/[.]/',$value))) { $all_ok=false; $score="Formuła domeny".' <b> '.$value.' </b> '. "jest nie poprawna!".'<br>'; } else { $result = $connect->query("SELECT id FROM domains WHERE domain_name='$value' AND id_person != '$id_person'"); if (!$result) throw new Exception($connect->error); $how_domain_name = $result->num_rows; if($how_domain_name>0) { $all_ok=false; $score="Istnieje już domena".' <b> '.$value.' </b> '.'<br>'; } } foreach ($id as $key => $value) { if(http://www.php.net/isset($value)) { $score=$value; } } if ($all_ok==true) { $count = http://www.php.net/count($id); for($i=0;$i<$count;$i++) { $connect->query('UPDATE domains SET domain_name="'.$domain_name[$i].'" WHERE id='.(int)$id[$i].''); } if(!http://www.php.net/empty($delete_domain)) { $connect->query('DELETE FROM domains WHERE id='.$value.''); } $_SESSION['well_done']=true; http://www.php.net/header('Location: change_data_confirm.php'); } }
Sugerowałem Ci rozwiązanie.
W nazwach inputów zawrzyj id domeny, czyli nie:
name="domain_name[]"
(zakładając, że masz do czynienia z id=4).
name="domain_name[4]"
czemu taka sugestia że id=4 ?
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)