Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dlaczego execute() uruchamia się dwa razy ?
Forum PHP.pl > Forum > Przedszkole
barthez
Mam w formularzu taki kod:
  1. <fieldset>
  2. <legend>Przypisz nowe zawody:</legend>
  3. <input type="hidden" name="zawody[]" value="0">';
  4. echo self::sql_notInOccupations($pesel);
  5. </fieldset>


Dalej robię insert tablicy do bazy:

  1. $query2 = "Insert into workers_occupation (lev0, pesel) values (?,?)";
  2. $stmt2 = $db->prepare($query2);
  3. if($stmt2 == true)
  4. {
  5. foreach ($wykaz_zawodow as $occupation)
  6. {
  7. $stmt2->bind_param('ss', $occupation, $pesel);
  8. $stmt2->execute();
  9. $stmt2->store_result();
  10. }
  11. }


Log sql wygląda tak, gdy został zaznaczony jeden chceckbox 'Kierowca'
  1. 529 Prepare INSERT INTO workers_occupation (lev0, pesel) VALUES (?,?)
  2. 529 Execute INSERT INTO workers_occupation (lev0, pesel) VALUES ('Kierowca','1305420057')


Gdy nie zaznaczę żadnego checkbox-a , mysql tylko przygotowuje zapytanie, ale go nie wykonuje log, sam prepare:
  1. 529 Prepare INSERT INTO workers_occupation (lev0, pesel) VALUES (?,?)
  2. 529 Prepare INSERT INTO workers_skills (lev0, pesel) VALUES (?,?)
  3. ....


Natomiast gdy chce usunać jakiś rekord z bazy execute zawsze wykonuje się dwa razy:
  1. <fieldset>
  2. <legend>Przypisz nowe zawody:</legend>
  3. <input type="hidden" name="zawodyusun[]" value="0">';
  4. echo self::sql_InOccupations($pesel);
  5. </fieldset>


  1. $query7 ="Delete From workers_privilages Where shortname=? and pesel=?";
  2. $stmt7 = $db->prepare($query7);
  3. if ($stmt7 == true)
  4. {
  5. foreach ($wykaz_uprawnienia_usun as $usun_uprawnienie)
  6. {
  7. $stmt7->bind_param('ss',$usun_uprawnienie,$pesel );
  8. $stmt7->execute();
  9. $stmt7->store_result();
  10. }
  11. }


  1. 539 Prepare Delete From workers_occupation Where lev0=? and pesel=?
  2. 539 Execute Delete From workers_occupation Where lev0='0' and pesel='1305420057'
  3. 539 Execute Delete From workers_occupation Where lev0='Kierowca' and pesel='1305420057'


Dlaczego w tym przypadku execute wykonuje się dwa razy ?


scanner
Ponieważ tablica $wykaz_uprawnienia_usun, po której się iterujesz ma zdublowane pola - raz jako index INT, dwa jako klucz tekstowy.
Zrób var_dump na niej, przed foreach i sprawdź
barthez
Jak pozbyć się tego dubla ?
Wyrzucić z ukrytego pola wartość ukrytą ?
scanner
OD tego zacznij. Zamiast tego powinieś sprawdzać IMHO isset, is_array i/lub count tablicy
barthez
Już działa poprawnie, dzięki
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.