Autor Zpráva
danhill
Profil
Chjooo ... myslím,že buď už bych měl jít spát a nebo to zase bude pekelný oříšek ... :)
Prosím o pomoc jak na to ...

Pomocí foreach si na stránce vykreslím tabulku z dat v databázi:
$select = $mysqli->query("SELECT * FROM `test`");

echo '<table>';
echo '<tr>';
echo '<th>ID</th>';
echo '<th>Old value</th>';
echo '<th>New value</th>';
echo '<th>Check</th>';
echo '</tr>';
foreach ($select AS $row)    {
  echo '<form name="action_defect" method="POST">';
  echo '<tr>';
  echo '<td>'.$row['ID'].'</td>';
  echo '<td>'.$row['old_value'].'</td>';
  echo '<td>'.$row['new_value'].'</td>';
  echo '<td><input type="checkbox" name="check_id[]" value="'.$row['ID'].'" /></td>';
  echo '<tr>';
  echo '</form>';
}
echo'</table>';

Až do teď v pohodě - tohle samozřejmě není problém ...
ale nyní někde nad nebo pod tabulku potřebuji umístit dva submity
Něco jako:
echo '<input type="submit" name="delete" value="Delete selected" />';
echo '<input type="submit" name="repair" value="Repair selected" />';

a následně na základě stisku jedno z tlačítek provést akci ve smyslu:
if (isset($_POST['delete']))  {
  foreach ($_POST['check_id'] AS $check_id){
    echo 'Vymažu id: '.$check_id.'<br>;
  }
}

else if (isset($_POST['repair']))  {
  foreach ($_POST['check_id'] AS $check_id){
    echo 'Opravím id: '.$check_id.'<br>;
  }
}

Ale to mi nechodí, protože mám submit zcela mimo form, jenže já nemůžu přeci dát form z toho foreache,jinak bych nezískal potřebné array s id ...
Tak jako vůbec nevím a nemůžu najít jak tohle se řeší ...
Jde o to, že chci prostě vymazat nebo opravit pouze vybrané řádky a ne všechny.
Jo, to mi připomíná,že další problém je, jak udělat něco jako select all třeba kliknutím na th Check...
Už se s tím trápím asi 3 hodiny a už prostě nevím, takže děkuji za jakoukoli radu.
Alphard
Profil
danhill:
jenže já nemůžu přeci dát form z toho foreache
Musíš, jinak nikdy neodešleš víc checkboxů (bez js).

jinak bych nezískal potřebné array s id
Mělo by to být snadné, prohlížeč dá vybrané checkboxy za sebe, odešle něco jako check_id[]=2&check_id[]=3&check_id[]=5.
CZechBoY
Profil
echo '<table>';
echo '<tr>';
echo '<th>ID</th>';
echo '<th>Old value</th>';
echo '<th>New value</th>';
echo '<th>Check</th>';
echo '</tr>';
echo '<form name="action_defect" method="POST">';
foreach ($select AS $row)    {
  echo '<tr>';
  echo '<td>'.$row['ID'].'</td>';
  echo '<td>'.$row['old_value'].'</td>';
  echo '<td>'.$row['new_value'].'</td>';
  echo '<td><input type="checkbox" name="check_id[]" value="'.$row['ID'].'" /></td>';
  echo '<tr>';
}
echo '<input type="submit" name="delete" value="Delete selected" />';
echo '<input type="submit" name="repair" value="Repair selected" />';
echo '</form>';
echo'</table>';

btw v takhle vypisovat html je pěkně na ***, nedá se v tom vůbec vyznat. Mně osobně vyhovuje obrácený způsob (vypisovat html a kde je něco z php tak začít php <?php echo $abc; ?> jako to dělají šablonovací systémy)
danhill
Profil
Supeeer - jak snadné - už to valíííí :)
Moc děkuji za pomoc. Varianta CZechBoYe mě včera fakt nenapadla a je to tak geniální a prosté :)
Ještě jednou díky moc!

A omlouvám se, jak html vypisuji ... Nějak jsem si na to zvykl a mě se to naopak zdá přehlednější ... Ale tak na funkci to myslím žádný vliv nemá ...
Ono taky asi bude záležet na tom jaký má člověk editor a jaké má nastavené barvičky atd... samozřejmě chápu, že to asi úpně správné není...

Ještě někdy, když se mi jako hodně nechce, nebo spěchám, tak si to zapíšu :
echo '
<tr>
  <td>'.$row['ID'].'</td>
  <td>'.$row['old_value'].'</td>
  <td>'.$row['new_value'].'</td>
  <td><input type="checkbox" name="check_id[]" value="'.$row['ID'].'" /></td>
<tr>
';

:D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: