Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Problem ze skryptem logowania
Forum PHP.pl > Forum > Przedszkole
chico2
Witam,
Zacząłem naukę PHP i MySQL'a. Znalazłem pewien skrypt, który chciał bym przepisać na nowo ale mam już problem na starcie. Skrypt wygląda tak:

  1. <?php
  2. require ('db.php');
  3.  
  4. if (isset($_POST['imie']) and isset($_POST['nazwisko']) and
  5. isset($_POST['konto']) and isset($_POST['password']) and
  6. isset($_POST['password2']))
  7. {
  8. if($_POST['password']==$_POST['password2'])
  9. {
  10. $konto = mysql_real_escape_string (trim($_POST['konto']));
  11. $password = sha1(md5(mysql_real_escape_string(trim($_POST['password']))));
  12. $ile = mysql_query("SELECT * FROM `uzytkownicy` WHERE login = '$konto'");
  13. $ile = mysql_num_rows($ile);
  14. if($ile==0) {
  15.  
  16. $request = "INSERT INTO uzytkownicy (login,password) VALUES('$konto','$password')";
  17. mysql_query($request) or die("Wystąpił błąd");
  18. echo('Konto '.$konto.' zostalo utworzone');
  19. }
  20. else
  21. {echo("Użytkownik istnieje");}
  22. }
  23. else echo("hasło niezgadza się");
  24. }
  25.  
  26. ?>

Wszystko idzie ładnie aż wysypuje się na:
  1. $request = "INSERT INTO uzytkownicy (login,password) VALUES('$konto','$password')";
  2. mysql_query($request) or die("Wystąpił błąd")


Mam właśnie ten błąd z funkcji die. W bazie jest baza biblioteka z tabelą uzytkownicy. Z bazą się łączy bo nie ma błędów. Gdzie leży problem? Platforma testowa to EasyPHP3.0 + laptop z Win7.

Proszę o wskazówki i przy okazji czy ten skrypt będzie w miarę bezpieczny?

P.S.
Formularz jest taki:
  1. <form action="rejestracja2.php" method="POST">
  2. <div id="forma">
  3.  
  4. Imię<br><input type="text" name="imie" maxlenght="25" size="25"><br>
  5. Nazwisko<br> <input type="text" name="nazwisko" maxlenght="25" size="25"><br>
  6. Nazwa użytkownika<br><input type="text" name="konto" maxlenght="25" size="25"><br>
  7. Hasło<br><input type="password" name="password" maxlenght="25" size="25"><br>
  8. Powtórz hasło<br> <input type="password" name="password2" maxlenght="25" size="25"><br>
  9. <input type="submit" value="dodaj" name="send"><br>
  10.  
  11. </div>
  12. </form>

thomson89
To tak:

1. daj treść błędu
2. po linijce
  1. $request = "INSERT INTO uzytkownicy (login,password) VALUES('$konto','$password')";

daj
  1. echo $request;

i wrzuć to zapytanie do php myadmina, lub podaj tutaj.

chico2
#1364 - Field 'imie' doesn't have a default value <- to się pojawiło w phpmyadmin.

INSERT INTO uzytkownicy (login,password) VALUES('aa','c99e178d83cdfea3c167bc1d15f9b47ff8f80145')Wystšpił błšd <- to się pojawiło na stronie gdy dodałem linijkę o której pisałeś wyżej.

Default value? Jakąś trzeba ustawić? Są to varchar'y NOT NULL.
Blame
Cytat(chico2 @ 21.11.2009, 14:24:58 ) *
Default value? Jakąś trzeba ustawić? Są to varchar'y NOT NULL.

No właśnie a ty chcesz je pozostawić puste. NOT NULL znaczy niepusty.
thomson89
Cytat(chico2 @ 21.11.2009, 14:06:27 ) *
Gdzie leży problem?

Cytat(chico2)
#1364 - Field 'imie' doesn't have a default value <- to się pojawiło w phpmyadmin.


Sam sobie odpowiedziałeś, błąd leży po stronie mysql. Nie umiem tobie zbytnio pomóc, ale...

1
2
chico2
thomson89, Bardzo dziękuję za linki. Drugi z nich wiele mi rozjaśnił. Błąd powstawał przez źle skonfigurowaną bazę. Teraz działa wszystko ładnie.

To teraz zabieram się za skrypt logowania.. w razie czego będę tutaj kontynuował.

Zrobiłem system rejestracji i logowania. Oczywiście nie obyło się bez problemów(kodowanie utf i header) ale jak na razie działa wszystko tak jak chcę. No może nie do końca ponieważ chciał bym aby konto admina było rozróżnialne z kontami użytkownika. Czy jakiś prosty kod w stylu:

  1. if konto==administrator ładować index_admin.php else ładować index2.php


nada się?

Chodzi o to żeby admin miał dodatkowe możliwości jak dodawanie rekordów do bazy itp.
Skrypt logowania wygląda ostatecznie tak:
  1. <?php
  2.  
  3. if (isset($_POST['konto']) and isset($_POST['password']))
  4. {
  5. require ('db.php');
  6.  
  7. $konto = mysql_real_escape_string(trim($_POST['konto']));
  8. $password = mysql_real_escape_string(trim($_POST['password']));
  9.  
  10. if ($konto!="" and $password!="")
  11. {
  12. $password = sha1(md5($password));
  13. $request = "SELECT id FROM uzytkownicy WHERE login='$konto' and password='$password'";
  14. $temp = mysql_query($request) or die("WystڰiӠbӹd");
  15. $ile = mysql_num_rows($temp);
  16. $temp = mysql_fetch_array($temp);
  17. $id = $temp['id'];
  18.  
  19. if($ile==1)
  20. {
  21. $_SESSION['user_id']=$id;
  22. $_SESSION['login']=$konto;
  23.  
  24. {
  25. echo('zalogowany<br>za 3 sekundy zostaniesz przekierowany');
  26.  
  27.  
  28. echo '<meta http-equiv="Refresh" content="3 url=index2.php" >';
  29.  
  30. }
  31. }
  32. else echo('podales zle dane');
  33. }
  34. }
  35. ?>
MateuszS
W tabeli z userami zrob pole uprawnienia i np. 1 to bedzie admin, 0 to user. Potem sprawdzasz w php if($wynik==1) { //admin } else { //user } ale nie wczytuj osobnych plikow tylko zrob inne menu, dodaj sesje admina i git, tak z grubsza
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.