Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi
Prym
post
Post #2





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

Posty w temacie


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: 5.10.2025 - 14:07