Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Co zwraca takie zapytanie
Forum PHP.pl > Forum > Przedszkole
maneo
Czolem

Mam takie pytanie. Jaka wartosc zwraca takie zapytanie
  1. <?php
  2.  
  3. $a = "SELECT id,nazwisko,imie FROM ludzie WHERE imie=Mariusz";
  4.  
  5. ?>

kiedy nie ma w tabeli czlowieka z imieniem Mariusz.
maverickkk
nic nie zwraca jak go niema.

a zmienna $a chyba pozostanie pusta
kowalcook
nie zwraca nic poprostu,

pomijając fakt iż nie jest to pełne zapytanie do sql, zmienna nie będzie miała żadnej przypisanej wartości

edit: @maverickkk sory że cię dubluje ale pisaliśmy w tym samym czasie tego posta smile.gif
maneo
Zgadza sie ze nie jest to pelne zapytanie sql
Chodzi mi o to zeby po wykonaniu takiego zapytania w zaleznosci od tego czy w tabeli jest ktos o imieniu Mariusz wykonana byla albo jedna albo druga instrukcja.
Czyli na przyklad cos takiego, niestety ta instrukcja jest bledna
  1. <?php
  2.  
  3. $a = "SELECT id,nazwisko,imie FROM ludzie WHERE imie = Mariusz";
  4. $wynik = mysql_query($a);
  5. while($as = mysql_fetch_array($wynik))
  6. {
  7. if($as[0] > 1)
  8. {
  9. echo "Wszystko ok";
  10. }
  11. else
  12. {
  13. echo "W bazie nie ma takiego imienia";
  14. }
  15. }
  16.  
  17. ?>

Gdy iminia Mariusz nie ma w tabeli pojawia sie pusta strona zamiast zadanego napisu ze w bazie nie ma takiego imienia
maverickkk
Może zamiast ($as[0] > 1) trzeba dać ($as[0]!="")
maneo
Niestety efekt ten sam. Pusta strona
acztery
ale z tym ze zmienn $a jest pusta nie mogę sie zgodzić ..
mike
1. Proszę poprawić temat wątku. Brak w nim obowiązkowego tagu.
2. Proszę korzystać z bbCode'u. Kody źródłowe php umieszczamy w [ php ][/ php ] Proszę to poprawić.
3. Do sprawdzenia czy zostały zwrócone jakieś wyniki zamiast "if($as[0] > 1)" należy skorzystać z mysql_num_rows()

---updated---
Tak:
  1. SELECT id,nazwisko,imie
  2. FROM ludzie
  3. WHERE imie='Mariusz'

a nie tak:
  1. SELECT id,nazwisko,imie
  2. FROM ludzie
  3. WHERE imie=Mariusz
maverickkk
No więc tak jeśli niema takiego imiena to ani razu ci nie wejdzie do pętli While dlatego ci nie działa warunek w niej sprawdz taki kod.

  1. <?
  2. $a = "SELECT id,nazwisko,imie FROM ludzie WHERE imie = Mariusz";
  3. $wynik = mysql_query($a);
  4. $zmienna=mysql_num_rows($wynik);
  5. if($zmienna>0)
  6.  echo "ok jest";
  7. else
  8.  echo "W bazie nie ma takiego imienia";
  9. ?>
mike
~maverickkk:
1. [ php ] a nie [ code ]
2. Widzę że nie wiesz do czego jest funkcja count(), popatrz na moją podpowiedź u góry i nie wprowadzaj ludzi w błąd tongue.gif
maneo
mysql_num_rows() tego bylo mi trzeba smile.gif Dzieki Mechu
Jabol
Tak swoją drogą to wg specyfikacji sql'a to takie zapytanie zwraca błąd. Mariusz powinno być w apostrofach.
kowalcook
a nie lepiej zrobić tak:

  1. <?php
  2.  
  3. $a = "SELECT id,nazwisko,imie FROM ludzie WHERE imie = 'Mariusz'";
  4. $wynik = mysql_query($a);
  5. while($as = mysql_fetch_array($wynik))
  6. {
  7. if($as[imie] != "")
  8. {
  9. echo "$as[id], $as[imie], $as[nazwisko]<br>";
  10. }
  11. else
  12. {
  13. echo "W bazie nie ma takiego imienia";
  14. }
  15. }
  16.  
  17. ?>



wtedy jeżeli są w bazie rekordy zawierające słowo mariusz to wygeneruje wszystkie po kolei, a jeżeli nie ma to poinformuje że nie ma takiego imienia smile.gif

tylko taka mała sugestia smile.gif
mike
Cytat(kowalcook @ 2006-04-20 01:06:00)
a nie lepiej zrobić tak:

Oczywiście, że nie.
Ten kod jest na nic.

Poprawnie powinno być tak:
  1. <?php
  2.  
  3. $strQuery = "SELECT id,nazwisko,imie FROM ludzie WHERE imie = 'Mariusz'";
  4. $resResultSet = mysql_query( $strQuery );
  5.  
  6. if( mysql_num_rows( $resResultSet ) > 0 )
  7. {
  8. while( $arrRow = mysql_fetch_array( $resResultSet ) )
  9. {
  10. echo $arrRow[ 'id' ] . ',' . $arrRow[ 'imie' ] . ',' . $arrRow[ 'nazwisko' ] . "<br />\n";
  11. }
  12. }
  13. else
  14. {
  15. echo 'W bazie nie ma takiego imienia';
  16. }
  17.  
  18. ?>


Cytat(kowalcook @ 2006-04-20 01:06:00)
tylko taka mała sugestia smile.gif

To jak już sugerujesz to sugeruj coś popranego, lub czytaj to co piszą inni.
Już przecież wspominałem o mysql_num_rows()
kowalcook
wporządku @mike_mech pokój smile.gif

nie będę sie sprzeczał z moderatorem, niemniej jednak ten kod co podałem również zadziałałby prawidłowo, (bo stosowałem już takie rozwiązania) ew można dać zamiast mysql_fetch_array() to: mysql_fetch_row()


wiesz przecież że w php można robić wiele rzeczy na wiele sposobów

ps. mam nadziej że nikt mnie tu nie skarci za nadgorliwość, jak będą takie przesłanki to przepraszam smile.gif
nospor
Cytat
niemniej jednak ten kod co podałem również zadziałałby prawidłowo, (bo stosowałem już takie rozwiązania)
blink.gif
w przypadku, gdy nie zostanie znaleziony zaden rekord, to mysql_fetch_array() zwraca od razu false, w wyniku czego petla while nie wykona sie ani razu, ani co za tym idzie, nie wykona sie zaden kod/if w tej petli. Wiec to zastosowanie jest bledne, gdyz gdy nic nie znajdzie, to nic sie nie wyswietli.
Nie wiem wiec jak ci to moglo kiedys dzialac smile.gif Moze miales inny kod, moze myslales ze ci dziala. nie wiem, nie wnikam, tylko wyjasniam
NuLL
Przepraszam za szczerosc
Cytat
(bo stosowałem już takie rozwiązania)

Strasznie glupie i nielogiczne jest twoje rozwiazanie.
kowalcook
rzeczywiście popełniłem błąd dopiero teraz przyjżałem się bliżej skryptowi @mike_mech ma on całkowitą rację że warunek if, else dał poza pętlą i to jest prawda

to co napisał @nospor też sie zgadza
warunek muszę dac poza pętlą bo inaczej w przypadku braku rekordu zawierającego imie mariusz nie wykona wogóle pętli


czyli idąc moim skryptem poprawnie będzie:
  1. <?php
  2.  
  3.  
  4. $a = "SELECT id,nazwisko,imie FROM ludzie WHERE imie = 'Mariusz'";
  5. $wynik = mysql_query($a);
  6. $ass = mysql_fetch_row($wynik);
  7. if($ass[imie] != "")
  8. {
  9. while($as = mysql_fetch_array($wynik))
  10. {
  11. echo "$as[id], $as[imie], $as[nazwisko]<br>";
  12. }
  13. }
  14. else
  15. {
  16. echo "W bazie nie ma takiego imienia";
  17. }
  18.  
  19.  
  20. ?>


co oczywiście nie znaczy ze mike_mech sie mylił bo on ma też poprawnie


wiem panowie co powiedzie następnym razem dwa razy pomyśl niż coś napiszesz rolleyes.gif ,
zgadzam się z tym całkowicie i przepraszam za zamieszanie

na drugi raz dwa razy się zastanowie niż coś napisze
mam nadzieje że nie zraziłem sobą nikogo smile.gif

pozdrawiam
nospor
@kowalcook aleś ześ sie uparl by postawic na swoim winksmiley.jpg
Cytat
wiem panowie co powiedzie następnym razem dwa razy pomyśl niż coś napiszesz
Ja ci nie powiem tego następnym razem. Ja ci to powiem już teraz...
Ten kod to pomylka. Zastanow się.
  1. <?php
  2.  
  3. $ass = mysql_fetch_row($wynik);
  4. if($ass[imie] != "")
  5.  
  6. ?>

robisz to przed pętlą. W przypadku gdy nie bedzie rekordów, w $ass bedziesz mial false. Nie mozesze wiec porownywac $ass[imie], bo $ass to nie tablica.
Zalozmy ze jednak otrzymales rekordy. Twoj warunek sie sprawdza, w chodzimy do bloku z petlą, gdzie wypisujesz imiona. Ale petla zwroci ci oto jedno imie mniej, ktore juz pobrales przed pętlą. A na dodatek jesli bedzie tylko jedno imie (jeden rekord), to juz nic ci nie zwroci.

Przyjmij wkoncu do swiadomosci to co napisali wczesniej i nie kombinuj, bo ci to strasznie nie wychodzi winksmiley.jpg
mike
Przede wszytkim, nie podoba mi się to tongue.gif
Cytat(kowalcook @ 2006-04-20 16:50:06)
co oczywiście nie znaczy ze mike_mech sie mylił bo on ma też poprawnie

Bo ~mike_mech nie ma racji też, tylko przede wszystkim tongue.gif

A już pomijając to co napisał ~nospor.
Porównujesz imię, no pal licho niech Ci będzie (choć to jest źle - nie mylić z "też dobrze" winksmiley.jpg ), a co jeśli w pierwszym rekordzie ze zbioru wyników nie ma imienia?
Jak ktoś podał tylko nazwisko? Wszystkie pola bedziesz sprawdzał?
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.