Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][Mysql]update w pętli for
Forum PHP.pl > Forum > Przedszkole
reversend
Czy można zadać takie polecenie, czy muszę jawnie wpisywać nazwy kolumn i wierszy (chodzi mi o polecenie update)
żadne błędy mi się nie pokazują, ale też brak wpisu do bazy
  1. <?php
  2. $polecenie = "select * from access";
  3. $wynik = mysqli_query($db, $polecenie);
  4. $ile = mysqli_num_rows($wynik);
  5. $zm = $_POST['zm'];
  6. for($i=0; $i<$ile; $i++) {
  7. $wiersz = mysqli_fetch_array($wynik);
  8. for($j=2; $j<=7; $j++) {
  9. $polecenie_update = "update access set ".$wiersz[$j]."=".$zm[$i][$j];
  10. $wykonaj_update = mysqli_query($db, $polecenie_update);
  11. }
  12. }
  13. ?>
Daimos
mozna tak robic, zrob wywalanie bledu przy wykonywaniu kazdego zapytania to zobaczysz co jest zle
Prym
Jeśli mnie wzrok nie myli nie dodajesz w zapytaniu update takiego szczegółu jak WHERE czyli jakzdorazowe zapytanie z ptli powoduje zmiany W CAŁEJ TABELI access kolumny $wiersz[$j] - innymi słowy musisz podać where w update bo inaczej nie wie który wiersz polecenie ma obsłużyć:

  1. <?php
  2. $polecenie = "select * from access";
  3. $wynik = mysqli_query($db, $polecenie);
  4. $ile = mysqli_num_rows($wynik);
  5. $zm = $_POST['zm'];
  6. for($i=0; $i<$ile; $i++) {
  7. $wiersz = mysqli_fetch_array($wynik);
  8. for($j=2; $j<=7; $j++) {
  9. $polecenie_update = "update access set ".$wiersz[$j]."=".$zm[$i][$j]." WHERE id=".$wiersz['id'];
  10. $wykonaj_update = mysqli_query($db, $polecenie_update);
  11. }
  12. }
  13. ?>

przyczym nie wiem jak oznaczasz id wiersza wiec podałem jako id winksmiley.jpg

pozatym nieprosciej byłoby zastosować cos takiego:
  1. <?php
  2. $polecenie = "select * from access";
  3. $wynik = mysqli_query($db, $polecenie);
  4. $zm = $_POST['zm'];
  5. if (mysqli_num_rows($wynik)>0) {
  6. while ($wiersz = mysqli_fetch_array($wynik)) {
  7.  for($j=2; $j<=7; $j++) {
  8. $polecenie_update = "update access set ".$wiersz[$j]."=".$zm[$i][$j]." WHERE id=".$wiersz['id'];
  9. $wykonaj_update = mysqli_query($db, $polecenie_update);
  10.  }
  11. }
  12. }
  13. ?>

zamiast 1 for?
dzieki temu jesli zapytanie jest puste nic sie nie dzieje a jak ma kilka pozycjo to whilem wyciągamy wiersz po wierszu
reversend
Zauważ że zmienna $wiersz to tablica, właściwie wiersz, i-ty wiersz mojej tabeli. Natomiast $wiersz[$j] to j-ty element tego wiersza. Pytanie brzmi właśnie, czy mogę w ten sposób odnosić się do komórek, czy muszę z parametrem where.

Co do while to faktycznie lepiej, thx za rade smile.gif
Prym
wiec nie w zapytaniu update musisz sie odniesc do id wiersza przy pomocy where. Dlaczego: poniewaz to ze to jest wiersz x to wie php ale nie mysql do ktorego jest odniesione zapytanie czyli w petli wiesz ze to jest wiersz 5 tabeli ale robiac zapytanie mysql traktuje to jako zapytanie do calej tabeli wiec musisz podac where - uff smile.gif

codo while to oczywiscie jeszcze lepiej by było gdybyś najpierw przygotował sobie zapytanie update przynajmniej dla kazdego wiersza tablei bo inaczej np teraz w przypadku 2 wierszy musisz wykonac 14 zapytań zeby zaktualizowac baze - moze nie jest to mordercze przy kilku wierszach ale jak bedziesz mial ich powiedzmy 1000 to bedzie 7000 zapytan do bazy danych. a poniewaz akurat mam przerwe w kodowaniu swojego projektu wiec:

  1. <?php
  2. $polecenie = "select * from access";
  3. $wynik = mysqli_query($db, $polecenie);
  4. $zm = $_POST['zm'];
  5. if (mysqli_num_rows($wynik)>0) {
  6. while ($wiersz = mysqli_fetch_array($wynik)) {
  7.  for($j=2; $j<=7; $j++) {
  8. $dane[]=$wiersz[$j]."=".$zm[$i][$j];
  9.  }
  10.  if (count($dane)>0) {
  11.  $dane=implode(",",$dane);
  12.  $polecenie_update = "update access set ".$dane." WHERE id=".$wiersz['id'];
  13.  $wykonaj_update = mysqli_query($db, $polecenie_update);
  14.  }
  15. }
  16. }
  17. ?>

i to by było chyba na tyle winksmiley.jpg nie testowane wiec musisz sprobowac czy nie ma literowek bo jako sposob dziala na 100% - tak informacyjnie w petli for tworze tablice dane w ktora dodaje poszczególne kolumny wiersza z danymi po for robie implode (czyli zamieniam tablice na ciag znakow oddzielonych przecinkiem) i tworze zapytanie smile.gif moge zapewnic ze twoj serwer mysql odsapnie smile.gif
pzdr i jakby co to postaram sie poprawic w miare czasu
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.