Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Pętla while zwraca false
Forum PHP.pl > Forum > Przedszkole
MESSIAH :)
Mam problem z pętlą. Gdy próbuję tego kodu:
  1. while ($id = $stmt->fetch(PDO::FETCH_ASSOC));

Wtedy pętla zwraca false a gdy użyję tego samego kodu poza pętlą wszystko działa prawidłowo. Jak zinterpretować prawidłowo pętlę while z PDO?
Comandeer
A po co Ci średnik na końcu?
MESSIAH :)
Bez niego PHPStorm krzyczał że zmienne nie są zdefiniowane. Rozwiązałem częściowo problem poprzez zastosowanie foreach tylko nie wiem czemu ta funkcja przypisała jedną wartość dla 2 elementów?
  1. $id = $stmt->fetch(PDO::FETCH_ASSOC);
  2. foreach($id as $i){
  3. $bdnazwauzytkownika = $i['użytkownik']; //$bdnazwaużytkownika = b (powinno być a)
  4. $bdhaslo = $i['hasło']; //bdhaslo = b
  5. } if ($nazwauzytkownika = $bdnazwauzytkownika && $haslo = $bdhaslo) {
  6. echo "Jesteś w środku <a href='member.php'>Kliknij aby się zalogować</a>";
  7. $_SESSION['nazwauzytkownika'] = $bdnazwauzytkownika;
  8. } else {
  9. echo "Złe hasło";
  10. }


Rozwiązano:
  1. $id = array($stmt->fetch(PDO::FETCH_ASSOC));
Pyton_000
Zacznij formatować poprawnie kod to się dowiesz dla czego.
Mam wrażenie że zabrakło Ci podstaw...
nospor
Cytat
Mam wrażenie że zabrakło Ci podstaw...
Ale jakie wrazenie... przeciez to oczywiste wink.gif

@MESSIAH skoro fetch zwraca ci tablice, to nie jest ci potrzebna zadna petla by dobrac sie do jej elementow od razu.
Rownie dobrze mogles zaraz po fetch zrobic:
$id['użytkownik']
$id['hasło']

Po drugie
= - przypisanie
== - porownanie
Na chwile obecną Twoj IF źle działa

Po trzecie: widze masz w 4 literach nasze uwagi i nadal generujesz polskie znaki w nazwach np. kolumn. Powinnismy zaczac olewac ciebie tak jak ty nas...

Po czwarte: lektury obowiązkowe:
http://php.net/manual/en/language.types.array.php
http://php.net/manual/en/function.var-dump.php
Temat: Jak poprawnie zada pytanie
viking
Coś Ty się tak nospor tych polskich znaków uczepił? Mało kto tak robi, fakt, ale technicznie jest to dozwolone (nawet linkowałem mu wtedy dokumentację w tym zakresie). Jak chłopak chce niech używa. Byle pamiętał poprawnie to quotować.
nospor
Poniewaz jak nagle koles zmieni baze, np wrzuci na serwer, moze dostać zonka i zaraz znowu bedzie trul na forum ze mu nie dziala...
Stosowanie polskich liter tak czy siak predzej czy później spowoduje kolejne nieprzewidziane problemy. Chocby w sytuacji jak jakims cudem nasz podopieczny wyląduje w miedzynarodowej firmie. Lepiej dla niego by sie pozbyl zlego nawyku póki ma czas.
Poza tym on te polskie znaki uzywa by zapobiegac atakom z USA co samo w sobie jest warte wypominania w kazdym poscie wink.gif
I nie pisz jakbym to tylko ja sie uczepil, bo wiele osob w innych tematach dalo mu jasno do zrozumienia ze robi błąd stosujac polskie litery, a on nadal to robi. Lekcewazy nasze rady i jednoczesnie przychodzi po kolejne. Nie uwazasz ze to troche dziwne?

ps: no i najwazniejsze:
jak ktos inny (kolejny swiezak) zobaczy jego posty to pomysli, ze to standard i tez zacznie uzywac polskich znakow. Dlatego wazne jest by taki swiezak zobaczyl, ze to jednak nie do konca takie fajne jest.
Daimos
No to chyba żart jest, że ktoś broni polskich znaków? Specjalnie trolują? W ogóle używanie swojego języka w kodzie?
Ruszcie głową, już pomijając problemy, jakie z tego wynikają, to jak można pisać np.:
  1. <?
  2. if($zielony === true)
  3. {
  4. while($czerwony)
  5. {
  6.  
  7. }
  8. }

Od takiej składni jest żółwik i jest sensowny, polecam, bo wszystko można pisać po polsku.
KsaR
Takze polecam pisac kod po angielsku.

Tak programisci moga sie lepiej uczyc angielskiego jesli nie umieja za dobrze lub odswiezac pamiec tongue.gif.

Wszystko jedno w jakim by nie bylo napisane tak jak pisal @Comandeer chwila w tłumaczu i i tak masz na ojczysty.

@MESSIAH smile.gif
W polsce tez sa hakerzy wbrew pozorą.
Jeśli ktoś by atakował twoje projekty to zakładam że pierw polacy chyba że masz miedzy narodowa strone.

Na poczatku pisalem zmienne/funkcje po polsku (bez polskich znakow bo wtedy jeszcze nie wiedzialem ze mozna)
Robilem tak bo latwiej bylo zrozumiec mi kod.
Teraz jednak kod rozumiem i grzechem dla mnie jest pisanie po polsku tongue.gif.
Tylko opoznialbym sie bardziej itp z angielskiego biggrin.gif.
MESSIAH :)
Cytat(nospor @ 14.07.2015, 09:03:50 ) *
Ale jakie wrazenie... przeciez to oczywiste wink.gif

@MESSIAH skoro fetch zwraca ci tablice, to nie jest ci potrzebna zadna petla by dobrac sie do jej elementow od razu.
Rownie dobrze mogles zaraz po fetch zrobic:
$id['użytkownik']
$id['hasło']

Po drugie
= - przypisanie
== - porownanie
Na chwile obecną Twoj IF źle działa

Po trzecie: widze masz w 4 literach nasze uwagi i nadal generujesz polskie znaki w nazwach np. kolumn. Powinnismy zaczac olewac ciebie tak jak ty nas...

Po czwarte: lektury obowiązkowe:
http://php.net/manual/en/language.types.array.php
http://php.net/manual/en/function.var-dump.php
Temat: Jak poprawnie zada pytanie

Przepraszam za moje zachowanie smile.gif zachowałem się jak gówniarz smile.gif A tak na poważnie ja się uczę dopiero co więc szału nie ma i nie ukończyłem źadnych szkół to jest moje hobby. Chcę zobaczyć na własnej skórze jak to jest z PL vs EN

Cytat(viking @ 14.07.2015, 09:24:28 ) *
Coś Ty się tak nospor tych polskich znaków uczepił? Mało kto tak robi, fakt, ale technicznie jest to dozwolone (nawet linkowałem mu wtedy dokumentację w tym zakresie). Jak chłopak chce niech używa. Byle pamiętał poprawnie to quotować.

Niestety podczas blindowania PDO nie mogłem użyć polskich nazw bo wywala błąd
Cytat
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined


Cytat(nospor @ 14.07.2015, 09:32:34 ) *
Poniewaz jak nagle koles zmieni baze, np wrzuci na serwer, moze dostać zonka i zaraz znowu bedzie trul na forum ze mu nie dziala...
Stosowanie polskich liter tak czy siak predzej czy później spowoduje kolejne nieprzewidziane problemy. Chocby w sytuacji jak jakims cudem nasz podopieczny wyląduje w miedzynarodowej firmie. Lepiej dla niego by sie pozbyl zlego nawyku póki ma czas.
Poza tym on te polskie znaki uzywa by zapobiegac atakom z USA co samo w sobie jest warte wypominania w kazdym poscie wink.gif
I nie pisz jakbym to tylko ja sie uczepil, bo wiele osob w innych tematach dalo mu jasno do zrozumienia ze robi błąd stosujac polskie litery, a on nadal to robi. Lekcewazy nasze rady i jednoczesnie przychodzi po kolejne. Nie uwazasz ze to troche dziwne?

ps: no i najwazniejsze:
jak ktos inny (kolejny swiezak) zobaczy jego posty to pomysli, ze to standard i tez zacznie uzywac polskich znakow. Dlatego wazne jest by taki swiezak zobaczyl, ze to jednak nie do konca takie fajne jest.

Niestety praca w jakiej kolwiek firmie nie jest realna gdyż na rozmowie o podstawach bym poległ. Przed napisaniem tutaj tematu dokładnie googluje problem i szukam na SOF tam są eksperci którzy wyjaśnią co i jak.


Cytat(Daimos @ 14.07.2015, 10:36:57 ) *
No to chyba żart jest, że ktoś broni polskich znaków? Specjalnie trolują? W ogóle używanie swojego języka w kodzie?
Ruszcie głową, już pomijając problemy, jakie z tego wynikają, to jak można pisać np.:
  1. <?
  2. if($zielony === true)
  3. {
  4. while($czerwony)
  5. {
  6.  
  7. }
  8. }

Od takiej składni jest żółwik i jest sensowny, polecam, bo wszystko można pisać po polsku.

Daimos
Cytat(MESSIAH :) @ 14.07.2015, 20:45:19 ) *
Niestety praca w jakiej kolwiek firmie nie jest realna gdyż na rozmowie o podstawach bym poległ. Przed napisaniem tutaj tematu dokładnie googluje problem i szukam na SOF tam są eksperci którzy wyjaśnią co i jak.


MESSIAH, tutaj chodzi tylko o to, że właśnie się uczysz i jesteś na etapie, w którym kształtują się nawyki. Będziesz używał polskich znaków, to zobaczysz jak ciężko będzie Ci z tego wyjść. Większość programistów ma jakieś nawyki (lepsze gorsze), których nie może się oduczyć, bo nie mieli na początku takiego nospora, co pod każdym postem przypomina, żeby się ogarnąć ;)

Także teraz odpadasz na rozmowach o pracę ze względu na brak podstaw, za 2 lata odpadniesz, za złe nawyki i problem z napisaniem sensownego kodu
viking
Ale chodzi też żeby się nauczył na przykładzie. Jeśli zrobi polskie znaki, później pojawi się jakiś błąd i będzie musiał przepisać pół systemu dobrze mu zapadnie w pamięć tongue.gif

Problemem jest że nie przeczytałeś zapewne dokumentacji i zapisujesz ąśżźć zamiast `ąśżźć`

A wracając do tematu:
  1. CREATE TABLE `ąśżźćł` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `ąśżź` INT(11) NOT NULL DEFAULT '0',
  4. PRIMARY KEY (`id`)
  5. )
  6. ENGINE=InnoDB
  7. ;
  8. INSERT INTO `ąśżźćł` (`id`, `ąśżź`) VALUES (1, 123);


  1. $dsn = 'mysql:host=localhost;dbname=test;';
  2. $user = 'root';
  3. $pass = 'pass';
  4.  
  5.  
  6. try {
  7. $dbh = new PDO($dsn, $user, $pass);
  8. $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  9. $dbh->exec("SET NAMES 'UTF8';");
  10. $sql = "SELECT * FROM `ąśżźćł` WHERE `ąśżź` LIKE :key";
  11. $sth = $dbh->prepare($sql);
  12. $sth->execute(array('key' => "1%"));
  13. print_r($sth);
  14. $result = $sth->fetchAll();
  15. print_r($result);
  16. } catch(PDOException $e) {
  17. echo 'Klasa PDO zwróciła wyjątek: '.$e->getMessage();
  18. }
nospor
Cytat
Ale chodzi też żeby się nauczył na przykładzie. Jeśli zrobi polskie znaki, później pojawi się jakiś błąd i będzie musiał przepisać pół systemu dobrze mu zapadnie w pamięć
Widzę Twoją ideą życiową jest "Mądry Polak po szkodzie"...
Na szczescie zycie tak nie musi wyglądać, niektorzy potrafią się uczyc na cudzych błędach tongue.gif
viking
Nie jest, ale są sytuacje w których dobrze jest się przekonać o czymś na własnej skórze. A akurat w tym wypadku nie piętnowałem używania polskich znaków bo ich stosowanie na początek wydawało się dobrą nauką poprawnego wybierania danych (i tak, w życiu mi nie przyszło do głowy żeby samemu polskie znaki w nazwach używać wink.gif ). Jeżeli zrozumie jak to działa jest szansa że nie wróci za tydzień z kolejnym pytaniem typu "wkładam stringa w kolumnę integer i nie działa".

Choć może MySQL nie jest dobrym systemem do nauki. "Błędy łyka jak pelikan".
MESSIAH :)
Dokładnie tak. Teraz już wiem że np: nie da się użyć polskich LitSów (Liter Specjalnych) w nazwach blindowania zapytań do baz danych no chyba że edytujemy interpreter po swojemu ale na innych serwerach nasz skrypt już nie ruszy. Jednak PHP I MYSQl stworzone jest dla ENG i resztę języków maja w d...pie smile.gif nie interesują się jakimiś PL utf8. Może zmienią to w wersji PHP 10
nospor
Cytat
Jednak PHP I MYSQl stworzone jest dla ENG i resztę języków maja w d...pie
I prawidlowo... Chcialbys kiedys poprawiac kod po jakimś chinczyku? Tak samo jak chinczyk nie chcialby poprawiać po Tobie tongue.gif
MESSIAH :)
Ładny nam się tutaj OffTop robi smile.gif BTW jest jakiś program, funkcja skrypt który przepuści zawartość naszego pliku i pousuwa LitSy i zastąpi je zwykłymi bez ogonków?
Comandeer
Napisz se taki w PHP z regexami 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.