Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]błąd w skrypcie
jacusek
post
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Witam.
Mam taki skrypcik, który cały czas nie chce mi pokazać na czym polega błąd. sciana.gif
  1. <?php
  2. //sprawdza czy wypełniono wszytkie pola formularza
  3. if((!$_POST['nazwa']) || (!$_POST['haslo'])) {
  4. header("Location: logowanie.html");
  5. }
  6.  
  7. //łączy się serwerem bazy
  8. include("connect2.php");
  9. //tworzy i wysyła zapytanie
  10. $sql = "select imie, nazwisko from uzytkownicy where
  11. nazwa = $_POST['nazwa'] AND
  12. haslo = password($_POST['haslo'])";
  13. $wynik = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
  14.  
  15. if (mysqli_num_rows($wynik) == 1)

TO jest tylko fragment kodu.
czepia mi się linii 12. Już próbowałem różnych rzeczy, ale nie wpadłem na to co potrzeba.
Z góry dziękuję za pomoc
Go to the top of the page
+Quote Post
Vardamir
post
Post #2





Grupa: Zarejestrowani
Postów: 14
Pomógł: 2
Dołączył: 27.10.2009
Skąd: Kalwaria Zebrzydowska / Kraków

Ostrzeżenie: (0%)
-----


Usuń apostrofy. Zostaw samo $_POST[zmienna], ponieważ jest to wewnątrz cudzysłowia.

Ten post edytował Vardamir 18.11.2009, 20:12:28
Go to the top of the page
+Quote Post
potreb
post
Post #3





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(jacusek @ 18.11.2009, 20:10:32 ) *
TO jest tylko fragment kodu.
czepia mi się linii 12. Już próbowałem różnych rzeczy, ale nie wpadłem na to co potrzeba.
Z góry dziękuję za pomoc


To jak się czepia pokaż błąd. Twój warunek z || nie sprawdza dwoch tylko jedna zmienna

Ten post edytował potreb 18.11.2009, 20:16:59


--------------------

Go to the top of the page
+Quote Post
jacusek
post
Post #4





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Rzeczywiście usunięcie apostrofów pomogło, ale pokazał się nowy błąd. Po wpisaniu w formularzu logowania wyszukiwarka pokazuje mi taki błąd:
Unknown column 'nazwa wpisana w pole Nazwa Użytkownika' in 'where clause'
cały kod wygląda następująco:
  1. <?php
  2. //sprawdza czy wypełniono wszytkie pola formularza
  3. if((!$_POST['nazwa']) || (!$_POST['haslo'])) {
  4. header("Location: logowanie.html");
  5. }
  6.  
  7. //łączy się serwerem bazy
  8. include("connect2.php");
  9. //tworzy i wysyła zapytanie
  10. $sql = "select imie, nazwisko from uzytkownicy where
  11. nazwa = $_POST[nazwa] ||
  12. haslo = password($_POST[haslo])";
  13. $wynik = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
  14.  
  15. if (mysqli_num_rows($wynik) == 1) {
  16.  
  17. // jeżeli to uprawniony użytkownik, pobiera wartości pól imie nazwisko
  18. while ($info = mysqli_fetch_array($wynik)) {
  19. $imie = stripshlashes($info['imie']);
  20. $nazwisko = stripshlashes($info['nazwisko']);
  21. }
  22.  
  23. // ustawia cookie autoryzacyjne
  24. setcookie("auth", "1", 0, "/", 0);
  25.  
  26. // tworzy ciąg do wyświetlenia
  27. $wyswietlany_blok = "
  28. <p>".$imie." ".$nazwisko." jest uprawnionym użytkownikiem!</p>
  29. <p>Menu uprawnionych użytkowników:</p>
  30. <ul>
  31. <li><a href=\"tajnastrona.php\">tajna strona</a></li>
  32. </ul>";
  33. } else {
  34. // przekierowuje z powrotem do formularza logowania, jeżeli to nieuprawniony użytkownik
  35. header("Location: logowanie.html");
  36. }
  37. ?>
  38. <html>
  39. <head>
  40. <title>Użytkownik zalogowany</title>
  41. <meta http-equiv=content-type content="text/html; charset=utf-8">
  42. </head>
  43. <body>
  44. <? echo "$wyswietlany_blok"; ?>
  45. </body>
  46. </html>

Na wszelki wypadek podaję jeszcze skrypt do logowania
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  2. <title>Formularz logowania</title>
  3. </head>
  4. <h1>Formularz logowania</h1>
  5. <form method="post" action="logowanie.php">
  6. <p><strong>Nazwa użytkownika:</strong><br/>
  7. <input type="text" name="nazwa"></p>
  8. <p><strong>Hasło:</strong><BR>
  9. <input type="password" name="haslo"></p>
  10. <p><input type="submit" name="submit" value="Logowanie"></p>
  11. </form>
  12. </body>
  13. </html>

i tablę z MYSQL przechowującą użytkowników
  1. CREATE TABLE `uzytkownicy` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `imie` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  4. `nazwisko` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  5. `email` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  6. `nazwa` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  7. `haslo` varchar(75) COLLATE utf8_unicode_ci DEFAULT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Gdzie jest błąd teraz?
Z góry dzięki za odpowiedź
Go to the top of the page
+Quote Post
Meares
post
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 13
Dołączył: 16.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Cytat
Unknown column

Czyli "Nieznana kolumna" - sprawdź ich nazwy.


--------------------
manual mmocenter
Nie pomagam na PW!
Go to the top of the page
+Quote Post
jacusek
post
Post #6





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


no to akurat sprawdziłem. Zresztą widać do kodach SQL tabeli jaką podałem. smile.gif
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ech, no normalnie kursy MySQL... dry.gif

Ciągi znaków ZAWSZE bierze się w cudzysłowy...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
jacusek
post
Post #8





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


O tym to ja wiem, ale które ciągi znaków??. Bo szczerze mówiąc szukałem różnych rozwiązań i nie wiem gdzie mam to wstawić. Możesz mi pomóc.
kiedy wstawiam takie opcje:
  1. nazwa = $_POST["nazwa"] and
  2. haslo = password($_POST["haslo"])";

lub z apostrofami wyskakuje mi już w Edytorze (eclipse) błąd składni.


Ten post edytował jacusek 18.11.2009, 21:12:59
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie kpij z nas...

Przejrzyj pierwsze lepsze działające zapytania i marsz do kodu.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
jacusek
post
Post #10





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


nie kpię z Was. Siedzę już na tym kilka godzin, błąd jest zapewne z gatunku tych idiotycznych. Nie wiem już gdzie tego błędu szukać. Jak już nie pokazuje mi błędu skrypt to i tak nie działa. Hasło i usera wpisuje dobrze bo po kilka razy próbowałem. Za każdym razem kiedy próbuję po $_POST postawić cudzysłów lub w nawiasie kwadratowym pokazuje mi błąd skryptu. Już nawet nie wiem gdzie mam tego szukać.
Nie pokazuje mi błędu składniowego w takim przypadku:
  1. $sql = "select imie, nazwisko from uzytkownicy where
  2. 'nazwa= $_POST[nazwa] and
  3. haslo= password($_POST[haslo])'";
  4. $wynik = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));

Ale co z tego skoro i tak nie działa.
sciana.gif

Możecie mi pomóc?
Z góry dzięki
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Owszem, kpisz.

Przejrzałeś kilka działających zapytań? Takich na sieci jest sporo, znajdź różnice. Na tacy nie dostaniesz. A jeśli chodzi o błąd cudzysłowów, to są ewidentne podstawy: string.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
jacusek
post
Post #12





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Przejrzałem już kilka działających zapytań, wiem o co w tym chodzi, ale teraz po zmianie skryptu:
  1. <?php
  2. //tworzy i wysyła zapytanie
  3. $sql = "select imie, nazwisko from uzytkownicy where
  4. nazwa=" .$_POST["nazwa"]. "and
  5. haslo=" .$_POST["haslo"]."";

Pokazuje mi błąd w zapytaniu SQL. Teraz już nie wiem zupełnie o co chodzi. Wydaje mi że pytanie odpowiednio przerobiłem pod względem składniowym, choć oczywiście mogę się mylić.
Przeglądarka po wpisaniu (już bez funkcji password) i po odpowiedniej zmianie hasła w bazie częstuje mnie takim komunikatem:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'haslo=test' at line 3
No i teraz już zupełnie zgłupiałem. sciana.gif
Go to the top of the page
+Quote Post
piotr94
post
Post #13





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


o rany...
to PODSTAWOWY BŁĄD...
  1. <?
  2. ...
  3. $sql = 'SELECT imie, nazwisko FROM uzytkownicy WHERE nazwa=\''.$_POST['nazwa'].'\' AND haslo=\''.$_POST['haslo'].'\'';
  4. ...
  5. ?>

Teraz powinno zadziałać haha.gif


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post
tr!ckle
post
Post #14





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 12.05.2009

Ostrzeżenie: (0%)
-----


Po prostu $_POST['nazwa'] i $_POST['haslo'] muszą w zapytaniu być w cudzyslowiach.




Pozdrawiam. 

EDIT: eh wyprzedziłeś mnie tongue.gif

Ten post edytował tr!ckle 19.11.2009, 11:06:27
Go to the top of the page
+Quote Post
erix
post
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Musieliście mu podać na tacy... :/

Spyta się ktoś, jak się otwiera blok PHP, to też polecicie z odpowiedzią? Jakiś poziom trzeba trzymać.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
jacusek
post
Post #16





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Bardzo dziękuję za pomoc. Wygląda to teraz w ten sposób.
  1. $sql = 'SELECT imie, nazwisko FROM uzytkownicy WHERE nazwa=\''.$_POST['nazwa'].'\'
  2. AND haslo=\''.md5($_POST['haslo']).'\'';

Dołożyłem jeszcze szyfrowanie. A do erix masz: rację żeby nie podawać rozwiązań gotowych. Ja się po prostu dopiero uczę tego wszystkiego i nie da się od razu o wszystkim pamiętać. Twoje wskazówki były cenne, ale niestety nie do końca, dla początkującego, wszystko jest oczywiste. Mimo wszystko Ci dziękuję i oczywiście pozostałym osobom.
Go to the top of the page
+Quote Post
piotr94
post
Post #17





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cóż, ja też jestem zwolennikiem tego żeby każdy doszedł do błędu samodzielnie, ale też się kiedyś uczyłem i wiem że raz czy dwa razy siedziałem parę godzin na banalnym błędem typu znak mniejszości w złą stronę, czy np. np jednej stronie ', a pro drugiej "


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:29