Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zwrócenie wartości z pętli foreach do zmiennej
Forum PHP.pl > Forum > Przedszkole
PYJTER
Witam serdecznie zmagam się z takim problemem mianowicie mam tabelę do której dołożyłem w każdym wierszu pola <checkbox>. I teraz wybieram załóżmy 3 pola które chcę edytować. Poprzez $_POST wysyłam wynik do drugiego formularza php gdzie go odbieram go pętlą foreach. Chcę do przekazać do zmiennej $a i podstawić do zapytania mysql jednak nie działa... na ekranie prócz nagłówków tabeli jest pusto. jak dam print_r($a) to zwraca mi załóżmy 1,2,7 ale wynik w tabeli mi sumuje dwa pierwsze wyniki czyli podaje 3 oraz 7 jak nazwa <Podejrzewam że chodzi o to że $a jest tablicą danych a nie posiada jednej wartości.... ale nie wiem czy dobrze rozumuję... I nie wiem jak to przekazać dalej... by zapytanie SQL się wykonało...
Mój kod:

  1. foreach($_POST['zain'] as $index=>$a)
  2. return $a;
  3.  
  4.  
  5. require "connection_mysql_2.php";
  6.  
  7. // wywołujemy funkcję connection()
  8.  
  9. connection();
  10. mysql_query("SET CHARSET utf8");
  11. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
  12.  
  13.  
  14. $zapytanie = 'SELECT * FROM `dane` WHERE nazwa="'.$a.'"';
  15.  
  16. $wynik = mysql_query($zapytanie);
  17.  
  18. while ($edit = mysql_fetch_assoc($wynik))
  19.  
  20.  
  21. {
  22. echo (
  23. '<tr><td><input type="text" id="nazwa2" name="id" value="'.$edit['nazwa'].'" disabled="disabled" />'.$edit['nazwa'].'</td></tr>'
  24. );
  25. }


Proszę o wyrozumiałość bo to moje początki wink.gif[sql][/sql]
viking
Co robi return?
http://pl1.php.net/manual/en/function.return.php
PYJTER
Cytat(viking @ 2.02.2014, 08:42:43 ) *


Zwraca argument jako wartość wywołąnia funkcji a ja funkcji nie mam także bez sensu ten return był... więc kod wygląda tak jak niżej ale teraz zwraca mi ostatnią wartość teraz tak sprawdzałem i $_POST['zain'] przyjmuje np takie wartosci jak wcześniej wybiorę odpowiednie pola w formularzu np. 6 przypadkowych które chcę edytować: 12782230 podaje to bez przecinków bo faktyczne wartości to: 1,2,7,8,22,30 ale to nie problem wystarczy dodać .',' do zmiennej i będzie oddzielało przecinkami. Także zwraca mi wartość ostatnią czyli 30.
Czyli te dane o ile dobrze rozumuje są tablicą tak?? czyli z tej tablicy teraz muszę każdą wartość podstawić do zapytania SQL?? czyli znowu robię pętlęquestionmark.gif bo kurde nie czaje jeszcze wszystkiego dobrze i za bardzo tego nie ogarniam jaka ma być kolej rzeczy jaki jest poprawny schemat wyciągania i podstawiania danych z pętli foreach....

  1. foreach($_POST['zain'] as $index=>$a);
  2.  
  3.  
  4. require "connection_mysql_2.php";
  5.  
  6. // wywołujemy funkcję connection()
  7.  
  8. connection();
  9. mysql_query("SET CHARSET utf8");
  10. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
  11.  
  12.  
  13. $zapytanie = 'SELECT * FROM `dane` WHERE nazwa="'.$a.'"';
  14.  
  15. $wynik = mysql_query($zapytanie);
  16.  
  17. while ($edit = mysql_fetch_assoc($wynik))
  18.  
  19.  
  20. {
  21. echo (
  22. '<tr><td><input type="text" id="nazwa2" name="id" value="'.$edit['nazwa'].'" />'.$edit['nazwa'].'</td></tr>'
  23. );
  24. }
viking
Doczytaj też ciąg dalszy opisu. Co się dzieje w zależności od kontekstu (include, globalny).

Przede wszystkim bez sensu jest odpytanie w foreach (a jeszcze można podejrzewać że wszystko tworzy nowe połączenie z bazą). Wywołaj coś takiego:

  1. $test = array(1,2,3);
  2. echo 'SELECT * FROM `dane` WHERE nazwa IN('. implode($test, ',').')';

Z tego zapytania przeleć po wynikach.

Po drugie SQL injection. Puszczasz do zapytania dane bezpośrednio od użytkownika.
Po 3 rozszerzenie mysql_ jest przestarzałe i już go nie używamy. W zamian PDO albo mysqli.
PYJTER
Cytat(viking @ 2.02.2014, 09:49:29 ) *
Doczytaj też ciąg dalszy opisu. Co się dzieje w zależności od kontekstu (include, globalny).

Przede wszystkim bez sensu jest odpytanie w foreach (a jeszcze można podejrzewać że wszystko tworzy nowe połączenie z bazą). Wywołaj coś takiego:

  1. $test = array(1,2,3);
  2. echo 'SELECT * FROM `dane` WHERE ID IN('. implode($test, ',').')';

Z tego zapytania przeleć po wynikach.

Po drugie SQL injection. Puszczasz do zapytania dane bezpośrednio od użytkownika.
Po 3 rozszerzenie mysql_ jest przestarzałe i już go nie używamy. W zamian PDO albo mysqli.


Dzięki ogarnąłem new mysqli() także mam juz to poprawione...
  1. $wynik = $db->query($zapytanie);
  2.  
  3. while ($txt = $wynik->fetch_assoc())

I śmiga wink.gif
Drugi punkt raczej na dzień dzisiejszy nie bardzo wiem o co chodzi wink.gif ale to dopiero 3 tydzień nauki php/mysql wink.gif znaczy domyślam sie że przekazuję dane od użytkownika bezpośrednio do bazy questionmark.gif tylko jak to inaczej zrobić bezpiecznie zgodnie ze sztuką... questionmark.gif nie wiem korzystam z kilku darmowych kursów w internecie i ciężko cokolwiek znaleźć jakieś wzmianki o prawidłowym tworzeniu struktury jakiejś aplikacji.
Co do kodu to działa idealnie... tylko jeśli podstawię pod $test dane na sztywno... a ja chcę aby w $test były dane które zaznaczę w formularzu wcześniej gdzie wybieram które wiersze mają być edytowane za pomocą pola checkbox.

czyli mam formularz *.html Załóżmy że 1,2,3,4 to będą kolejne numery ID w tabeli dane.
  1. Próba edycji danych zaznacz pole
  2. <form method="post" action="edycja.php">
  3. <caption>Próba edycji danych</caption>
  4.  
  5. <tr>
  6. <th width=50>Zaznacz pole do edycji</th>
  7. <td><input type="checkbox" name="zain[]" value="1">1</td>
  8. <td><input type="checkbox" name="zain[]" value="2">2</td>
  9. <td><input type="checkbox" name="zain[]" value="3">3</td>
  10. <td><input type="checkbox" name="zain[]" value="4">4</td>
  11.  
  12. <input type="submit" value="EDYTUJ DANE" />


I teraz zaznaczyłem załóżmy 3 i 4 klikam Edytuj Dane

I teraz formularz co odbiera dane
edycja.php
  1.  
  2. #czyli co najpierw muszę odebrać dane z $_POST pól chceckbox więc jedynym rozwiązaniem jakie znalazłem to pętla foreach
  3. foreach($_POST['zain'] as $index=>$a)


Tylko co dalej mam z tymi danym zrobić tutaj tego nie rozumiem albo jak inaczej je odebrać... ze $_POST

Bo to co mi podałeś jak ustawie jak niżej działa świetnie:
  1. #podłączam się do bazy i ustawiam kodowanie
  2. $db = new mysqli('localhost', 'user', 'pass', 'dane');
  3. $db -> query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  4.  
  5. $test = array(3,4);
  6. $zapytanie = 'SELECT * FROM `dane` WHERE ID IN('. implode($test, ',').')';
  7.  
  8. $wynik = $db->query($zapytanie);
  9.  
  10. while ($txt = $wynik->fetch_assoc())
  11. {
  12. echo (
  13. '<tr><td><input type="text" id="nazwa2" name="id" value="'.$edit['nazwa'].'" />'.$edit['nazwa'].'</td></tr>'
  14. );
  15. }


I potem jak zmienie dane w 3 i 4 no to wysyłam do następnego pliku php z instrukcją UPDATE do bazy??... ja to tak rozumuję... no chyba że się mylę i można to inaczej zrobić...
Chodzi mi o samą strukturę że odbieram z chceckbox takim poleceniem wstawiam te dane jako value do pola type=text a następnie wysyłam do bazy...
Tylko co w momencie jeśli tych kolumn w wierszu będę miał 30 jak sprawdzić która komórka została zmieniona wink.gif Pytań mam tak wiele że masakra wink.gif a przykłady w necie to tylko jak odebrać jak dodać a o edycji to zdawkowo wszystko omówione...
Z góry dziękuje za wyrozumiałość jak pisze głupoty ale chcę się czegoś nauczyć więc pytam jak nie wiem... wink.gif
Może całokowicie źle podchodze do zagadnienia to mnie naprostujcie wink.gif
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.