Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zwrócenie wartości z pętli foreach do zmiennej
PYJTER
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 23.01.2014

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


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 (IMG:style_emoticons/default/wink.gif) [sql][/sql]

Ten post edytował PYJTER 2.02.2014, 08:20:11
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Co robi return?
http://pl1.php.net/manual/en/function.return.php
Go to the top of the page
+Quote Post
PYJTER
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 23.01.2014

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


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ę(IMG:style_emoticons/default/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. }


Ten post edytował PYJTER 2.02.2014, 09:54:46
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


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.

Ten post edytował viking 2.02.2014, 09:53:09
Go to the top of the page
+Quote Post
PYJTER
post
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 23.01.2014

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


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 (IMG:style_emoticons/default/wink.gif)
Drugi punkt raczej na dzień dzisiejszy nie bardzo wiem o co chodzi (IMG:style_emoticons/default/wink.gif) ale to dopiero 3 tydzień nauki php/mysql (IMG:style_emoticons/default/wink.gif) znaczy domyślam sie że przekazuję dane od użytkownika bezpośrednio do bazy (IMG:style_emoticons/default/questionmark.gif) tylko jak to inaczej zrobić bezpiecznie zgodnie ze sztuką... (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif) Pytań mam tak wiele że masakra (IMG:style_emoticons/default/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... (IMG:style_emoticons/default/wink.gif)
Może całokowicie źle podchodze do zagadnienia to mnie naprostujcie (IMG:style_emoticons/default/wink.gif)

Ten post edytował PYJTER 2.02.2014, 15:17:29
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: 19.09.2025 - 11:00