Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][Mysql]update w pętli for
reversend
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.07.2007

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


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. ?>
Go to the top of the page
+Quote Post
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


mozna tak robic, zrob wywalanie bledu przy wykonywaniu kazdego zapytania to zobaczysz co jest zle
Go to the top of the page
+Quote Post
Prym
post
Post #3





Grupa: Zarejestrowani
Postów: 100
Pomógł: 11
Dołączył: 20.05.2007
Skąd: z fotela :)

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował Prym 27.10.2007, 15:19:01
Go to the top of the page
+Quote Post
reversend
post
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.07.2007

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Prym
post
Post #5





Grupa: Zarejestrowani
Postów: 100
Pomógł: 11
Dołączył: 20.05.2007
Skąd: z fotela :)

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) moge zapewnic ze twoj serwer mysql odsapnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
pzdr i jakby co to postaram sie poprawic w miare czasu
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 17:00