Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapis zaznaczonych elementów
Forum PHP.pl > Forum > Przedszkole
krzesik
Witam,
mam formularz z nazwiskami do każdego nazwiska przypisany jest checkbox, chciałbym aby do bazy zapisane zostały wyłącznie rokordy gdzie są zaznaczone checkbox-y. Na tą chwilę mam takie cóś:

  1. //fragment forma gdzie jest chec oraz nazwisko
  2. .........
  3. echo "<td>
  4. <input type=\"checkbox\" name=\"wystaw[]\" value=\"1\" />
  5. <input type=\"text\" name=\"imie_nazwisko[]\" value=\"$r[imie_nazwisko]\" />
  6. </td>";
  7. echo '</tr>';
  8. .......


później mam taki kod:
  1. ...........
  2. $n = count($_POST['imie_nazwisko']);
  3. for ($i = 0; $i < $n; $i++)
  4. {
  5. foreach ($imie_nazwisko as $i => $wartosc)
  6. if(!empty($wystaw[$i])){
  7.  
  8. echo "imie_nazwisko['".$i."'] ==". $wartosc;
  9. echo '<br>';
  10. }
  11. }
  12. ....................


efekt jest taki że drukuje mi na ekranie właściwą ilość rekordów ale zawsze jest to x PIERWSZYCH rekordów, gdzie x jest liczbą zaznaczonych checków
aras785
Bo masz 2 pętle, FOR i FOREACH
_Borys_
Niepotrzebne for, masz przecież pętle foreach, poza tym sprawdź co ci zwraca $_POST
  1. echo '<pre>';
  2. print_r($_POST);
  3. echo '</pre>';
Sephirus
@ups bez urazy

@autor zrób inaczej smile.gif

  1. //fragment forma gdzie jest chec oraz nazwisko
  2. .........
  3. echo "<td>
  4. <input type=\"checkbox\" name=\"wystaw[$index]\" value=\"1\" />
  5. <input type=\"text\" name=\"imie_nazwisko[$index]\" value=\"$r[imie_nazwisko]\" />
  6. </td>";
  7. echo '</tr>';
  8. .......


gdzie $index to numer pary checkbox-nazwisko (od 0 do n)

  1. foreach ($_POST['imie_nazwisko'] AS $i => $wartosc) {
  2. if(isset($_POST['wystaw'][$i]) echo $wartosc.'<br/>'; // tutaj sobie możesz to gdzieś przepisać czy coś
  3. }
krzesik
Cytat(Sephirus @ 6.02.2013, 15:29:13 ) *
@ups bez urazy

@autor zrób inaczej smile.gif

  1. //fragment forma gdzie jest chec oraz nazwisko
  2. .........
  3. echo "<td>
  4. <input type=\"checkbox\" name=\"wystaw[$index]\" value=\"1\" />
  5. <input type=\"text\" name=\"imie_nazwisko[$index]\" value=\"$r[imie_nazwisko]\" />
  6. </td>";
  7. echo '</tr>';
  8. .......


gdzie $index to numer pary checkbox-nazwisko (od 0 do n)

  1. foreach ($_POST['imie_nazwisko'] AS $i => $wartosc) {
  2. if(isset($_POST['wystaw'][$i]) echo $wartosc.'<br/>'; // tutaj sobie możesz to gdzieś przepisać czy coś
  3. }


ok, ale co zminić się powinno jeśli w nazwie checkboxa i imienia i nazwiska zamiast [] wstawię $index?
bo na dobrą sprawę innych poprawek nie widzę (oczywiście poza wywaleniem for-a)
Sephirus
Masz coś takiego:

Kod
nazwisko checkbox
nazwisko checkbox
nazwisko checkbox
nazwisko checkbox
nazwisko checkbox


prawda?

Jak są któreś nie zaznaczone to wygląda to tak:

Kod
nazwisko checkbox
nazwisko
nazwisko checkbox
nazwisko
nazwisko checkbox


Ale dostajesz jako:

Kod
nazwisko checkbox
nazwisko checkbox
nazwisko checkbox
nazwisko
nazwisko


Jeśli dodasz index to dostaniesz to co powinieneś bo te checkboxy zostaną na swoim miejscu. I jeśli przykładowo zaznaczysz nazwisko 1 i 5 tylko to tablica $_POST['wystaw'] będzie taka:

Kod
array(1 => 1, 5 => 1);


dzięki czemu możesz to porównać z tabelą nazwisk. W twoim przypadku wcześniejszym dostałbyś:

Kod
array(0 => 1, 1 => 1);


Pomyśl o tym wink.gif
krzesik
Nie, mam inaczej np
mam 10 nazwisk w liście, zaznaczam trzy ostatnie checki, to skrypt listuje mi trzy pierwsze nazwiska
_Borys_
Każdy checkbox inne value i potem masz w $_POST[wystaw] to co chcesz czyli numer klikniętego checkboxa

  1. <input type="checkbox" name="wystaw[]" value="1" />
  2. <input type="checkbox" name="wystaw[]" value="2" />
  3. <input type="checkbox" name="wystaw[]" value="3" />

PHP: Checkbox Array

cyfry w value w checkboxach możesz zastąpić imieniem i nazwiskiem, potem będzie ci łatwiej listować albo wyszukiwać w bazie.
Sephirus
@up brakuje jedynie [] w name'ach wink.gif

EDIT: Ok jesteś szybszy niż myślałem tongue.gif
krzesik
Bardzo dziekuje za wszelkie podpowiedzi!
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-2024 Invision Power Services, Inc.