Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zawieranie danych z tablicy w różnych zmiennych
castagir
post 21.12.2014, 16:58:35
Post #1





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Witam

Potrzebuję pomocy tym razem w zrozumieniu pętl.
Chodzi o to, że chciałbym aby z jednej tablicy, a dokładnie wyniku zapytania MySQL, przypisać wszystkie dane do różnych zmiennych.

Napisałem pewien fragment skryptu, który ma być za to odpowiedzialny. Modyfikowałem już go pod różnymi kątami, ale wciąż nic.
  1. $pytanie = $polaczenie->prepare("SELECT * FROM ".$przedrostek_bd."uzytkownicy");
  2. $pytanie->bindValue(':nazwa', $nazwa, PDO::PARAM_STR);
  3. $pytanie->bindValue(':haslo', sha1($haslo), PDO::PARAM_STR);
  4. if ($pytanie->execute()) {
  5. $wynik = true;
  6. $tablica = $pytanie->fetch(PDO::FETCH_ASSOC))
  7. for ($w = 0; $w < 3; $w++) {
  8. echo $dane_id[$w] = $tablica['id'];
  9. echo $dane_nazwa[$w] = $tablica['nazwa'];
  10. echo $dane_stopien[$w] = $tablica['stopien']; }
  11. } else {
  12. $wynik = false; }


Chciałbym aby wszystkie dane były zapisane do odzielnej zmiennej, z której mógłbym pobierać interesującą mnie wartość.
Np $dane_nazwa[2] === 'zdzich'
Go to the top of the page
+Quote Post
fastlone
post 21.12.2014, 17:39:40
Post #2





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Proponuję cały ten kod zapisać w postaci:
  1. $pytanie = $polaczenie->prepare("SELECT * FROM ".$przedrostek_bd."uzytkownicy");
  2. $pytanie->bindValue(':nazwa', $nazwa, PDO::PARAM_STR);
  3. $pytanie->bindValue(':haslo', sha1($haslo), PDO::PARAM_STR);
  4. if ($pytanie->execute()) {
  5. $wynik = true;
  6. $w = 0;
  7. while ($tablica = $pytanie->fetch(PDO::FETCH_ASSOC)) {
  8. $dane_id[$w] = $tablica['id'];
  9. $dane_nazwa[$w] = $tablica['nazwa'];
  10. $dane_stopien[$w] = $tablica['stopien'];
  11. $w++; }
  12. } else {
  13. $wynik = false; }


Ten post edytował fastlone 21.12.2014, 17:56:41


--------------------
Nie bój się kliknąć
Go to the top of the page
+Quote Post
castagir
post 22.12.2014, 09:12:36
Post #3





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Niestety nic to nie pomaga.

Muszę chyba coś zrobić z pętlą for.
Go to the top of the page
+Quote Post
Turson
post 22.12.2014, 09:15:13
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


@castagir
  1. $pytanie = $polaczenie->prepare("SELECT * FROM ".$przedrostek_bd."uzytkownicy");
  2. $pytanie->bindValue(':nazwa', $nazwa, PDO::PARAM_STR);
  3. $pytanie->bindValue(':haslo', sha1($haslo), PDO::PARAM_STR);

binujesz 2 wartości ktorych nie masz w zapytaniu

  1. $tablica = $pytanie->fetch(PDO::FETCH_ASSOC))

brakuje tutaj średnika na końcu. Fetch() pobiera tylko 1 rekord, użyj fetchAll()

  1. for ($w = 0; $w < 3; $w++)

Pętla powinna iterować tyle razy ile masz elementów w tablicy $tablica czyli tyle ile pobrało. Od $w=0 do $w<=count($tablica)

Tablica którą próbujesz stworzyć jest nieporęczna. Lepiej stworzyć dwuwymiarową typu
0=>array(id=>1,nazwa=>'coś tam', stopień=>'jakiś')
1=>array(id=>2,nazwa=>'coś tam', stopień=>'jakiś')
itd.
Go to the top of the page
+Quote Post
viking
post 22.12.2014, 09:18:07
Post #5





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

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


A nie wystarczy Ci fetchAll()? Przecież będziesz miał wtedy np $tablica[2]['nazwa'], po co to przepisywać? W ostateczności można się pobawić np PDO::FETCH_GROUP


--------------------
Go to the top of the page
+Quote Post
castagir
post 22.12.2014, 09:28:46
Post #6





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Też nic nie pomaga.

Napisałem taki fragment skryptu:
  1. $pytanie = $polaczenie->prepare("SELECT * FROM `sesjeuzytkownikow` ORDER BY kod_sesji DESC LIMIT 5");
  2. $pytanie->execute();
  3.  
  4. echo $i = 1;
  5. while ($w = $pytanie->fetchAll(PDO::FETCH_ASSOC)) {
  6. $kod_sesji[$i] = $w['kod_sesji'];
  7. $data_sesji[$i] = $w['data'];
  8. $start_sesji[$i] = $w['start'];
  9. $i++; }
  10.  
  11. echo 'Kod sesji: '.$kod_sesji[1].'<br />';
  12. echo 'Data sesji: '.$data_sesji[1].'<br />';
  13. echo 'Start sesji: '.$start_sesji[1].'<br />';
:
Go to the top of the page
+Quote Post
Turson
post 22.12.2014, 09:31:43
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jak puszczasz to w pętli to już nie fetchAll() a fetch()
Go to the top of the page
+Quote Post
castagir
post 22.12.2014, 09:46:55
Post #8





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Samo fetch(); także nie działa

Go to the top of the page
+Quote Post
Turson
post 22.12.2014, 09:53:17
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Po czym tak stwierdzasz? Jak wygląda tablica po pętli? Jak wygląda $w w pętli? Sprawdzaj takie rzeczy
Fetch masz mieć fetch(PDO::FETCH_ASSOC)
po prostu uyzłem skróconej formy

Ten post edytował Turson 22.12.2014, 09:53:54
Go to the top of the page
+Quote Post
castagir
post 22.12.2014, 09:55:07
Post #10





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Mam tak wpisane:
  1. $pytanie = $polaczenie->prepare("SELECT * FROM `endo_sesjeuzytkownikow` ORDER BY kod_sesji DESC LIMIT 5");
  2. $pytanie->execute();
  3.  
  4. echo $i = 1;
  5. while ($w = $pytanie->fetch(PDO::FETCH_ASSOC)) {
  6. $kod_sesji[$i] = $w['kod_sesji'];
  7. $data_sesji[$i] = $w['data'];
  8. $start_sesji[$i] = $w['start'];
  9. $i++; }
  10.  
  11. echo 'Kod sesji: '.$kod_sesji[1].'<br />';
  12. echo 'Data sesji: '.$data_sesji[1].'<br />';
  13. echo 'Start sesji: '.$start_sesji[1].'<br />';
Go to the top of the page
+Quote Post
Turson
post 22.12.2014, 09:58:05
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Co wyświetla
  1. var_dump($pytanie->fetchAll(PDO::FETCH_ASSOC));
Go to the top of the page
+Quote Post
castagir
post 22.12.2014, 10:06:28
Post #12





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Ok. Udało się jakoś.

Napisałem jeszcze raz w całkowicie nowym pliku.

  1. try
  2. {
  3. $polaczenie = new PDO('mysql:host='.$serwer_bd.';dbname='.$nazwa_bd, $uzyt_bd, $haslo_bd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  4.  
  5. $polaczenie->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  6. 'Połączono z bazą danych!';
  7. } catch (PDOException $e)
  8. {
  9. echo ($e->getMessage());
  10. }
  11.  
  12.  
  13. $pytanie = $polaczenie->prepare("SELECT * FROM `endo_sesjeuzytkownikow` ORDER BY kod_sesji DESC LIMIT 5");
  14. $pytanie->execute();
  15.  
  16. $i = 1;
  17. while ($w = $pytanie->fetch(PDO::FETCH_ASSOC)) {
  18. $kod_sesji[$i] = $w['kod_sesji'];
  19. $data_sesji[$i] = $w['data'];
  20. $start_sesji[$i] = $w['start'];
  21. echo 'Kod sesji: '.$kod_sesji[$i].'<br />';
  22. echo 'Data sesji: '.$data_sesji[$i].'<br />';
  23. echo 'Start sesji: '.$start_sesji[$i].'<br /><br />';
  24. $i++
  25. ; }



Widocznie musiałem mieć jakiś błąd logiczny na tamtej stronie.
Będę musiał sprawdzić, bo jeszcze wczoraj jak kończyłęm pracę na skryptem wszystko działało tak jak trzeba.

Swoją drogą nie wiem dlaczego mi wyświetla var_dump taki ciąg. Na innych stronkach i filmikach było ładnie pokazane w odstępach.
Muszę to zawierać może w HTML?
  1. array(5) { [0]=> array(7) { ["kod_sesji"]=> string(14) "141221-1716:35" ["id_uzytkownika"]=> string(1) "1" ["ip"]=> string(9) "127.0.0.1" ["data"]=> string(10) "21.12.2014" ["start"]=> string(5) "17:16" ["koniec"]=> NULL ["wyswietlonych_stron"]=> NULL } [1]=> array(7) { ["kod_sesji"]=> string(14) "141221-1131:28" ["id_uzytkownika"]=> string(1) "1" ["ip"]=> string(9) "127.0.0.1" ["data"]=> string(10) "21.12.2014" ["start"]=> string(5) "11:31" ["koniec"]=> NULL ["wyswietlonych_stron"]=> NULL } [2]=> array(7) { ["kod_sesji"]=> string(14) "141221-0930:05" ["id_uzytkownika"]=> string(1) "1" ["ip"]=> string(9) "127.0.0.1" ["data"]=> string(10) "21.12.2014" ["start"]=> string(5) "09:30" ["koniec"]=> NULL ["wyswietlonych_stron"]=> NULL } [3]=> array(7) { ["kod_sesji"]=> string(14) "141221-0046:34" ["id_uzytkownika"]=> string(1) "1" ["ip"]=> string(9) "127.0.0.1" ["data"]=> string(10) "21.12.2014" ["start"]=> string(5) "00:46" ["koniec"]=> NULL ["wyswietlonych_stron"]=> NULL } [4]=> array(7) { ["kod_sesji"]=> string(14) "141220-1247:11" ["id_uzytkownika"]=> string(1) "1" ["ip"]=> string(9) "127.0.0.1" ["data"]=> string(10) "20.12.2014" ["start"]=> string(5) "12:47" ["koniec"]=> NULL ["wyswietlonych_stron"]=> NULL } }


Ten post edytował castagir 22.12.2014, 10:03:12
Go to the top of the page
+Quote Post
Turson
post 22.12.2014, 10:09:02
Post #13





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Żeby var_dump był sformatowany musi być w <pre></pre>
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 15:15