Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dodanie do mysql tylko po zaznaczeniu checkboxa
Forum PHP.pl > Forum > PHP
mb83
witam
potrzebuję wysłać do mysql tylko te rekordy, które na początku mają zaznaczonego checkboxa.
tak wygląda przykładowo pobrana lista rekordów.
http://przeklej.org/file/7EAkoa/form.JPG
na samym początku jest checkbox, ma atrybut name='check' i przy insert wykonuję coś takiego:
  1. if(!empty($_POST['check'])) {
  2.  
  3. $i = 0;
  4. while ($i < $rows) {
  5. $utf = mysql_query("set names 'utf8'");
  6. $sql = mysql_query("INSERT INTO event (id, event_id, name, start_time)
  7. VALUES ('$id[$i]', '$eid[$i]', '$name[$i]', '$st[$i]')");
  8. $i++;
  9. printf("Dodanych rekordów: %d\n", mysql_affected_rows());
  10. }
  11. }


wszystkie rekordy są pobierane w jednym <form> i jeden submit dla wszystkich. chcę wysłać tylko te, które zaznaczę - jak nie zaznaczę żadnego to nic nie leci.

mogę prosić o wskazanie co zrobić aby to działało? a może źle to rozumuję i trzeba się za to jakoś inaczej zabrać?
bardzo proszę o pomoc!
aras785
Cześć.

Zrobiłem na szybko imitację tego co chcesz osiągnąć.

  1. <?php
  2. if(isset($_POST['wybrane']) AND count($_POST['wybrane'])>0) {
  3. foreach($_POST['wybrane'] as $wybrane) {
  4. if(isset($wybrane['dodaj']) AND $wybrane['dodaj']==1) {
  5. //dodajesz do bazy
  6. echo 'Dodano: '.$wybrane['imie'].' | '.$wybrane['nazwisko'].' | '.$wybrane['email'].'<br>';
  7. }
  8. }
  9. }
  10. ?>
  11.  
  12. <form action="" method="post">
  13. <table>
  14. <?php for($i=1;$i<=4;$i++):?>
  15. <tr>
  16. <td><input type="checkbox" name="wybrane[<?php echo $i;?>][dodaj]" value="1"></td>
  17. <td><input type="text" name="wybrane[<?php echo $i;?>][imie]"></td>
  18. <td><input type="text" name="wybrane[<?php echo $i;?>][nazwisko]"></td>
  19. <td><input type="text" name="wybrane[<?php echo $i;?>][email]"></td>
  20. </tr>
  21. <?php endfor;?>
  22. </table>
  23. <input type="submit" value="Dodaj">
  24. </form>


Wszystko wklej do jednego pliku php i zobacz sobie jak to działa.

Ew. wejdź na http://phpfiddle.org/ i tam wklej ten kod.

Pozdrawiam
mb83
Dzięki @aras785, o to chodzi.
A jak teraz będę chciał do tego insert dołączyć to robic to w while() czy trzeba to jakoś w for() wpakowac?
Generalnie chce osiągnąć efekt że jak już dany rekord występuje w bazie to robię update() a jak nie ma to insert(). Pomożesz jak to osiągnąć?
viking
Poczytaj o tym http://dev.mysql.com/doc/refman/5.7/en/ins...-duplicate.html
mb83
Nie wiem czy to jest to o co mi chodzi.
Generalnie potrzebuje po submicie pobrać rekordy z bazy, sprawdzić czy $_POST[id] istnieje i jeśli nie to insert a jak tak to update. Tylko jak to napisać:-)
kapslokk
Użyj tego co wysłał @viking, zrobi dokładnie to co chcesz. Jesli ID będzie istniało w bazie to zrobi update, a jeśli nie to inserta.
mb83
ok a jeśli w phpmyadmin kluczem jest pole id a ja chcę sprawdzać według innej kolumny? id ma auto_increment, ale to pole eid jest unikatowe i na jego podstawie chciałbym sprawdzać w późniejszych celach insert/update.

a samo zapytanie powinno wyglądać tak?
  1. INSERT INTO event (id, eid, opis) VALUES ($id, $eid, $opis) ON duplicate KEY VALUES ($id, $eid, $opis)


jak tutaj zdefiniowac aby sprawdzał po eid?
kapslokk
Mozesz dodac klucz unique na eid. A co do zapytania to google i "mysql on duplicate key update example", no i IMO w zapytaniu powinieneś wywalić id, bo nie jest Ci do niczego potrzebne.
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.