Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] chyba problem z funkcami warunkowymi
Forum PHP.pl > Forum > Przedszkole
Mr.Niceguy
ok przyznam, że w php jestem noobem, jednak do tygodnia staram się jak
mogę ;]

nich ktoś mi powie dlaczego ten super skrypt nie działa
z bazą danych się łączy

  1. <?php
  2.  
  3. include ('funkcje/db_konekt.php');
  4.  
  5. $pass="haslo";
  6. $user="nazwa@o2.pl";
  7.  
  8. function checkPass(){
  9.  
  10. db_konekt();
  11. $zap1="SELECT * FROM users WHERE email='".$user."'";
  12. $result= mysql_query($zap1);
  13. $row = mysql_fetch_assoc($result);
  14. if(!$row){
  15. echo ("Probem z bazą danych. Odrzucone zapytanie.");
  16.  
  17. }
  18.  
  19. if($row["password"] != $pass){
  20. echo("Podałes nieprawidłowe dane");
  21. return false;
  22. }
  23.  
  24. if($row["password"] === $pass){
  25. echo("Podałes prawidlowe dane");
  26. return true;
  27. }
  28.  
  29. }
  30.  
  31. ?>
PanGuzol
Linie 8 do 17 to definicja funkcji checkPass której nigdzie nie wywołujesz. Czyli kod między 8 a 17 nigdy się nie wykonał.
Jeśli hasło będzie różne to zastosuj else a nie stosuj drugiego ifa dla przypadku jak będzie prawidłowe.
darko
Domyślam się, że jednak wywołujesz funkcję checkPass() gdzieś dalej. Błąd może tkwić w tym, że zmienna $pass jest niewidoczna wewnątrz funkcji checkPass(). Poczytaj o zasięgu zmiennych, to są podstawy. Inne możliwości, to:
- jednak nie ma połączenia z bazą
- błędne użycie funkcji mysql_fetch_assoc (zastosuj pętlę while lub skorzystaj z funkcji mysql_fetch_row)
Mr.Niceguy
ok, więc zastosowałem pętle while i zastąpiłem drugiego ifa funkcją else
no i dalej jest problem. Skrypt działa jeśli zmienna $user jest taka jak w bazie czyli nazwa@o2.pl , jeśli ja zmienię (w skrypcie nie w bazie) to zamiast komunikatu "Dane NIEprawidłowe" mam błąd połączenia

  1. <?php
  2. include ('funkcje/db_konekt.php');
  3.  
  4. $user="nazwa@o2.pl"; //jak tu zmieniam wartość zmiennej tak żeby była inna niż w bazie to wyświetla błąd
  5.  
  6. db_konekt();
  7. $result = mysql_query("SELECT * FROM users WHERE email='".$user."'");
  8. while (!$row = mysql_fetch_assoc($result)) {
  9. echo ("Problem!!");
  10. }
  11.  
  12. // echo $row["name"];
  13. //echo '<br>';
  14. //echo $row["password"];
  15. //echo '<br>';
  16.  
  17. if ($row["email"]!=$user){
  18. echo ("Dane NIEprawidłowe") ;
  19. //mysql_close();
  20. }
  21. else{
  22. echo ("Dane prawidłowe");
  23. //mysql_close();
  24. }
  25.  
  26. ?>
darko
Trochę namieszałeś spróbuj tak:
  1. $result = mysql_query("SELECT email FROM users WHERE email='" . $user . "'") or die(mysql_error());
  2. $row = mysql_fetch_row($result);
  3.  
  4. if ($row[0] != $user)
  5. {
  6. echo 'dane nieprawidłowe';
  7. }
  8. else
  9. {
  10. echo 'ok';
  11. }

Jeśli dalej będziesz miał błąd połączenia, to przekaż do funkcji mysql_query zasób połączenia (zwrócony przez funkcją mysql_connect). Teraz przynajmniej będziesz miał komunikat błędu.
Mr.Niceguy
dzięki... jednak zostanę przy funkcji mysql_fetch_assoc, jest dla mnie bardziej czytelna


witam, ten skrypt ma mi sprawdzać po emailu, czy ktoś może się dodać do bazy
powinien zwracać "Użytkownik o takim emailu juz istnije w naszje bazie"
zamiast tego mam Duplicate entry 'ja@com.pl' for key 'PRIMARY'

  1. <?php
  2. include ('funkcje/db_konekt.php');
  3.  
  4. db_konekt();
  5.  
  6. //w bazie istnieje taki wiersz
  7. $pass="lala";
  8. $email="ja@com.pl";
  9. $name="stefan";
  10.  
  11. $zap0= sprintf("SELECT 'email' FROM users WHERE email='$email'");
  12. $res=mysql_query($zap0) or die (mysql_error());
  13.  
  14. $row2 = mysql_fetch_assoc($res);
  15.  
  16. if ($row2['email'] == $email)
  17. {
  18. echo ("Użytkownik o takim emailu juz istnije w naszje bazie<br>") ;
  19. die;
  20. }
  21. else{
  22. $zap1 = sprintf("INSERT INTO users (`email` , `password` , `name`) VALUES ('$email' , '$pass' , '$name') ");
  23.  
  24. $result = mysql_query($zap1) or die (mysql_error());
  25. }
  26.  
  27. ?>
darko
pokaż:
  1. print_r($row2['email']);

Dlaczego nie po prostu:
  1. $res=mysql_query("SELECT email FROM users WHERE email='" . $email . "'") or die (mysql_error());

?
Mr.Niceguy
Cytat(darko @ 21.12.2010, 02:49:06 ) *
Dlaczego nie po prostu:
  1. $res=mysql_query("SELECT email FROM users WHERE email='" . $email . "'") or die (mysql_error());

?

bo nie lubię długich wierszy w kodzie biggrin.gif

następny tyci problemik
chodzi o to co ma się dziać jeśli nie wypełni się pola tekstowego w formie, a powinno się wypełnić

  1. <?php
  2.  
  3. $z= $_POST['email'];
  4.  
  5. if ($z = false ){ <=== to 'false' to ściema. po prostu kombinowałem ;]
  6. echo ("podaj email");
  7. }
  8. else{
  9. print ("$z");
  10. }
  11. ?>
darko
  1. if(isset($_POST['email']))
  2. {
  3. //...

// edit
poczytaj chociaż jakiś poradnik do php a najlepiej jakąś polskojęzyczną książkę, bo zapis:
if($z = false)
nie oznacza sprawdzenia, sprawdzamy tak:
if($z == false)
to są kompletne podstawy
modern-web
= to przyporządkowanie, natomiast == to 'równa się'
Zapamiętaj to sobie. Najczęściej popelniany błąd wsród początkujących programistów winksmiley.jpg

Podobnie poczytaj o instrukcjach warunkowych - wykorzystuje się je praktycznie wszędzie, a co za tym idzie jest to podstawa...
Polecam Ci lekturke na noc: manual winksmiley.jpg

Pozdrawiam i dobrej nocy życzę haha.gif
Mr.Niceguy
Witam!
czuję się zobowiązany przed Panem darko pozkazać jak mi idzie nauka php
tyle udało mi się zrobić do tej pory hello world, hello php ;]
oraz dziękuję darko oraz modern-web za konstruktywny ochrzan ;]

ps. czasami mam wrażenie, ze css jest trudniejszy od php

ps2. pewnie zahakujecie to w 5sec :], 100% mój kod
darko
Miło mi, proszę bardzo, ale... ekhm...
popraw:
Cytat
TO JEST STRONA ZABESPIECZONA

Z
Jeszcze gdzieś był jakiś byk, ale nie pamiętam już gdzie. Po za tym sprawdzaj czy faktycznie udało się zarejestrować użytkownika, bo podejrzewam, że tego nie sprawdzasz - zarejestrowałem jakiegoś fikcyjnego koleżkę, a nie mogę się na niego zalogować, czyli o co chodzi? Został zarejestrowany czy nie ?

// edit
Whooa! Nie zauważyłem wcześniej. Spójrz w kod strony. Dołączasz dwukrotnie doctype, rozpoczynasz dwukrotnie <html> i sekcję <head> Popracuj nad tym, bo coś źle inkludujesz. Nie mam czasu sprawdzać zabezpieczeń jeżeli jakieś są w ogóle.
Mr.Niceguy
Cytat(darko @ 4.01.2011, 13:08:04 ) *
Miło mi, proszę bardzo, ale... ekhm...
popraw:

Z
Jeszcze gdzieś był jakiś byk, ale nie pamiętam już gdzie. Po za tym sprawdzaj czy faktycznie udało się zarejestrować użytkownika, bo podejrzewam, że tego nie sprawdzasz - zarejestrowałem jakiegoś fikcyjnego koleżkę, a nie mogę się na niego zalogować, czyli o co chodzi? Został zarejestrowany czy nie ?

// edit
Whooa! Nie zauważyłem wcześniej. Spójrz w kod strony. Dołączasz dwukrotnie doctype, rozpoczynasz dwukrotnie <html> i sekcję <head> Popracuj nad tym, bo coś źle inkludujesz. Nie mam czasu sprawdzać zabezpieczeń jeżeli jakieś są w ogóle.


Sorry za byka;}
został zarejestrowany, po prostu konta były nieaktywne,
konta są już aktywne

poprawiłem wyświetlającą się informacyjne na
Niewłaściwy email lub hasło <br>Lub<br>
Twoje konto nie jest aktywowane!

Cytat(PanGuzol @ 19.12.2010, 04:05:29 ) *
Linie 8 do 17 to definicja funkcji checkPass której nigdzie nie wywołujesz. Czyli kod między 8 a 17 nigdy się nie wykonał.
Jeśli hasło będzie różne to zastosuj else a nie stosuj drugiego ifa dla przypadku jak będzie prawidłowe.


Mówisz o kodzie, który wklejałem na forum? Ten kod uległ radykalnym modyfikacjom ;]
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.