Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Dlaczego execute() uruchamia się dwa razy ?
barthez
post 17.09.2012, 11:12:21
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 10.04.2006

Ostrzeżenie: (0%)
-----


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 ?


Go to the top of the page
+Quote Post
scanner
post 17.09.2012, 11:20:47
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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ź


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
barthez
post 17.09.2012, 11:51:42
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 10.04.2006

Ostrzeżenie: (0%)
-----


Jak pozbyć się tego dubla ?
Wyrzucić z ukrytego pola wartość ukrytą ?
Go to the top of the page
+Quote Post
scanner
post 17.09.2012, 11:54:20
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




OD tego zacznij. Zamiast tego powinieś sprawdzać IMHO isset, is_array i/lub count tablicy


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
barthez
post 17.09.2012, 13:57:50
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 10.04.2006

Ostrzeżenie: (0%)
-----


Już działa poprawnie, dzięki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 07:05