Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Problem z logowanie
Forum PHP.pl > Forum > Przedszkole
Magik125
Witam..
Mam zainstalowany serwer i php5.Zrobiłem proste logowanie i nie wiem dlaczego cały czas wychodzi mi wiadomość "Użytkownik o podanej
nazwie nie istnieje". Proszę o pomoc.
  1. <?php
  2. function logowanie ($login, $pass){
  3.  
  4. include('../connect.php');
  5.  
  6. $sprawdz = "SELECT FROM users WHERE user = '$login'";
  7. $wykonaj = mysql_query($sprawdz);
  8. $ile = mysql_num_rows($wykonaj);
  9.  
  10. if($ile != 0) {
  11. $pole = mysql_fetch_row($wykonaj);
  12.  
  13. if($pass == $pole[1])
  14. {
  15. $_SESSION['logowanie'] = $login;
  16. header("Location: panel.php");
  17.  }
  18.  else {
  19. print 'Podałes złe hasła';
  20.  }
  21. }
  22. else {
  23. print 'Użytkownik o podanej nazwie nie istnieje.';
  24. }
  25. }
  26. ?>
Hazel
Poprawna forma to:
  1. <?php
  2. $sprawdz = "SELECT * FROM users WHERE user = '$login'";
  3. ?>


Jeśli mimo tego wyskakuje błąd, daj schemat bazy, bo możesz mieć problem też w innym miejscu.
Magik125
Dalej to samo sad.gif
Crade
A tak poza tym, zamiast print() wrzucaj echo, będzie o setne setnych sekund szybciej działać smile.gif

$pole = mysql_fetch_row($wykonaj);

zamień na

$pole = mysql_fetch_array($wykonaj);

Rzadko, bo rzadko pomaga - ale może zawsze. Chociaż mało prawdopodobne.
Magik125
Dzięki za rade ale co to ma do tego.
Hazel
Cytat(Hazel @ 3.09.2007, 20:06:21 ) *
Jeśli mimo tego wyskakuje błąd, daj schemat bazy, bo możesz mieć problem też w innym miejscu.


ehh...
Magik125
Ale jak mam dać schemat bo nie kapuje.
Hazel
Jakie pola masz w tabeli users?
Dawaj po kolei.
I dobrze Ci napisał Kolega, żebyś stosował mysql_fetch_array()" title="Zobacz w manualu PHP" target="_manual.
I odwołuj się do zmiennych pobieranych z bazy indeksami ciągowymi, a nie numerycznymi (mysql_fetch_row()" title="Zobacz w manualu PHP" target="_manual, jak pewnie wiesz, zwraca tablicę numeryczną, ale mysql_fetch_array() - również asocjacyjną). Wtedy trudniej o błąd, bo mysli się bardziej logicznie, odwołując się do $wiersz['haslo'] zamiast do $wiersz['23']... Możliwe, że o to chodzi.

Napisz te pola w tabeli users.
markotny
Cytat(Hazel @ 3.09.2007, 20:06:21 ) *
Poprawna forma to:
  1. <?php
  2. $sprawdz = "SELECT * FROM users WHERE user = '$login'";
  3. ?>


Jeśli mimo tego wyskakuje błąd, daj schemat bazy, bo możesz mieć problem też w innym miejscu.
A nie powinno być 'SELECT * FROM users WHERE user = "'.$login.''';';

Ja używam takiej formy zapytania do mysql.Mnie się wydaje że błąd leży również w sprawdzeniu warunku if($pass == $pole[1]).
Sprawdz czy w tabeli users kolumna z hasłem jest druga. W razie czego możeż też zastosować if($pass == $pole['pass']) jeśli tak nazwałeś kolumnę w bazie.
Zwróciłem uwagę na błąd w składni zapytania select do bazy mysql. Zastosuj skłądnie zaproponowaną przeze mnie i spróbuj wyświetlić na stronie liczbę otrzymanych w zapytaniu wierszy. Jeśli zapytanie jest prawidłowe i login jest w bazie powinno ci wyświetlić wartość 1. Jeśli zapytanie jest błędne otrzymasz 0. Miłego testowania. U mnie 50% problemów przy tworzeniu strony wynika z błędnego wpisania polecenia zapytania do bazy mysql. Zawsze zgubię cudzysłów, apostrof albo zapomnę o średniku smile.gif
drPayton
Sprawdzanie hasła to sprawa na później, teraz nie ma to nic do rzeczy. Zmiana sposobu wstawienia zmiennej też nic do rzeczy nie ma.
Zaraz na początku funkcji daj
  1. <?php
  2. function logowanie ($login, $pass){
  3. var_dump($login);
  4. (...)
  5. }
  6. ?>
.
Zobacz czy nie ma np zbędnych spacji czy coś w tym stylu i czy taki user faktycznie istnieje w bazie.
Magik125
Daje ten schemat:
  1. CREATE TABLE users (user char(30), pass char(30), email char(30), PRIMARY KEY(user));
crunch
proponuję wrzucić
  1. <?php
  2. print_r ($pole);
  3. ?>

po mysql_fetch_... (zobaczysz czy dane zgadzają się w bazie)

lub dla pewności (czy błąd nie tkwi w sql)
  1. <?php
  2. ?>
qqrq
markotny => Miałem podobny problem jeśli chodzi o byki w SQL-u. Proponuję ściągnąć sobie SQLyog-a, czy coś podobnego i tam wklejać i testować "podejrzane" zapytania. Dużo szybciej...
Magik125
Wyskakuje taki błąd
  1. Access denied FOR user 'ODBC'@'localhost' (USING password: NO)
Kostek.88
Spróbuj tak:

  1. <?php
  2.  function logowanie ($login, $pass){
  3.  
  4.  include('../connect.php');
  5.  
  6.  $wykonaj = mysql_query('SELECT FROM users WHERE user="'.$login.'"');
  7.  $ile = mysql_num_rows($wykonaj);
  8.  
  9.  if($ile != 0) {
  10. $pole = mysql_fetch_array($wykonaj);
  11.  
  12. if($pass == $pole[1]) {
  13. $_SESSION['logowanie'] = $login;
  14. header("Location: panel.php");
  15. } else {
  16.  echo 'Podałes złe hasła';
  17. }
  18.  } else {
  19. echo 'Użytkownik o podanej nazwie nie istnieje.';
  20.  }
  21. }
  22. ?>



Jeśli nie pomoże, to zaraz po $wykonaj daj tę zmienną $pole=mysql_fetch_array(blablala), a po niej daj var_dump($pole), jak będzie pokazywało wartość NULL, to masz błąd w zapytaniu.

PS. A może masz błąd w pliku connect.php, albo zła ścieżka do niego w include ?
Magik125
Teraz jak to dodałem to nic nie wyskoczyło tzn. ani nie ma takiego użytkownika ani podałeś zle haslo
Kostek.88
To daj kod formularza, którym się logujesz
Magik125
<form action="index.php?log=player" method="post">
<input type="text" name="user" class="form" />
<input type="password" name="pass" class="form1" />
<input type="submit" class="zaloguj" value="" />
</form>
Kostek.88
index.php

  1. <?php
  2.  $login=$_POST['login'];
  3.  $pass=$_POST['pass'];
  4.  
  5.  mysql_connect("localhost", "root", "krasnal");  //  tu daj ten connect.php
  6.  mysql_select_db("test"); //
  7.  
  8.  $wykonaj = mysql_query('SELECT * FROM users WHERE user="'.$login.'"');
  9.  
  10.  $ile = mysql_num_rows($wykonaj);
  11.  
  12.  if($ile != 0) {
  13. $pole = mysql_fetch_array($wykonaj);
  14.  
  15. if($pass == $pole[1]) {
  16. $_SESSION['logowanie'] = $login;
  17. header("Location: panel.php");
  18. } else {
  19.  echo 'Podałes złe hasła';
  20. }
  21.  } else {
  22. echo 'Użytkownik o podanej nazwie nie istnieje.';
  23.  }
  24. ?>


a tu loguj.html

  1. <form action="index.php" method="post">
  2. <input type="text" name="login" class="form" /><br />
  3. <input type="password" name="pass" class="form1" /><br />
  4. <input type="submit" class="zaloguj" value="zaloguj" />
  5. </form>



PS.

1) Czemu zrobiłeś funkcję z logowania?
2) Dlaczego w formularzu wysyłanego metodą POST wstawiłeś w action zapytania charakterystyczne dla GET?
Magik125
Wielki dzięki działa nareszcie
Kostek.88
A na moje pytania kto odpowie tongue.gif ? Nie ma za co, służę pomocą smile.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.