Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] warunek if() ciągle wyświetla else(), weryfikacja hasła podanego w formularza z tym z bazy
Manfred
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 21.03.2005
Skąd: Olsztyn

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


Witam,

Skrypt działa tak: wpisujemy hasło w formularz.php nastepnie hasło jest weryfikowane w edit.php.

Problem polega na tym, że nie zależnie od tego czy wpisze hasło poprawne czy nie, zawsze wyświetla mi się: "Warunek if nie został spełniony" (else)

Za pomocą echo sprawdzalem czy zapytanie pobiera właściwe haslo, wszystko jest ok.

Kodowanie w bazie jest utf8_unicode_ci w pliku utf8

formularz.php
  1. echo "<form method=\"post\" action=\"http://$site_adress/edit.php\">";
  2. echo " <p>Wpisz hasło aby edytowac/usunąć ogloszenie: <input type=\"text\" name=\"pass\"></p>";
  3. echo " <p>";
  4. echo " <input type=\"submit\" name=\"Submit\" value=\"Edytuj\">";
  5. echo " </p>";
  6. echo " <p>";
  7. echo "</form>";



edit.php
  1. mysql_query("SET NAMES utf8");
  2.  
  3. $id = $_SESSION['id'];
  4.  
  5. $pass = $_POST['pass'];
  6.  
  7. $query = 'SELECT adv_name, adv_text, adv_city, adv_profession, adv_earnings, adv_date, adv_tel, adv_email, adv_pass ' . 'FROM adverts ' . 'WHERE adv_id = "' . $_SESSION['id'] . '"';
  8.  
  9. $result = mysql_query($query)
  10. while ($row = mysql_fetch_array($result)) {
  11. extract($row);
  12. }
  13.  
  14. echo "Dobre hasło: " . $adv_pass;
  15. echo "<br />";
  16. echo "Hasło z formularza: " . $pass;
  17. echo "<br />";
  18.  
  19.  
  20. if ($_POST['pass'] == $adv_pass) {
  21. echo "Warunek if został spełniony";
  22. } else {
  23. echo "Warunek if nie został spełniony";
  24. }


Z góry dziękuje za pomoc.
Go to the top of the page
+Quote Post
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Może hasło zawiera polskie znaki, ma spacje gdzieś, wielkość liter jest inna?
Go to the top of the page
+Quote Post
Manfred
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 21.03.2005
Skąd: Olsztyn

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


Nie. Wszystkie hasła składaja sie z małych i wielkich liter oraz cyfr. Bez polskich znaków, spacji, czy innych bajerów.
np. yu8772, Mds999, 23231, mmsiJK itp.itd

hasło podane w formularzu teoretycznie zgadza się z tym z bazy, ale php musi je jakoś inaczej jeszcze rozpatrzyc.

Bardziej doświadczony programista sugerował, że to coś z kodowaniem, ale jak podałem w pierwszym poście, sa takie same wszędzie,
MySQL - utf8_unicode_ci
plik.php - utf8
w meta - utf8

nie mam zielonego pojęcie gdzie leży problem
Go to the top of the page
+Quote Post
Wicepsik
post
Post #4





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Zobacz źródło strony.
Go to the top of the page
+Quote Post
blooregard
post
Post #5


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




  1. if ($_POST['pass'] == $adv_pass) {

Może źle widzę ,ale w którym miejscu zmienna $adv_pass otrzymuje jakąś wartość?

Bo jak dla mnie , ma ona cały czas wartość FALSE i dlatego warunek wykonuje się, jak wykonuje.
Go to the top of the page
+Quote Post
Manfred
post
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 21.03.2005
Skąd: Olsztyn

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


Cytat
Może źle widzę ,ale w którym miejscu zmienna $adv_pass otrzymuje jakąś wartość?

A jak jej nadać wartość? Myślałem, że sam fakt, iż została pobrana z bazy i w echo sie wyswietla, znaczy ze ma jakąś wartość.
Go to the top of the page
+Quote Post
blooregard
post
Post #7


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




~Manfred:
Zamień mysql_fetch_array na mysql_fetch_assoc, lub dodaj drugi argument do mysql_fetch_array (MYSQL_ASSOC).
Go to the top of the page
+Quote Post
Manfred
post
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 21.03.2005
Skąd: Olsztyn

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


Cytat
Zamień mysql_fetch_array na mysql_fetch_assoc

Nadal nie działa

Cytat
dodaj drugi argument do mysql_fetch_array (MYSQL_ASSOC).

Jak to zrobić?
Go to the top of the page
+Quote Post
mortus
post
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


W linii 12:
  1. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
zaraz pod tym dodaj jeszcze print_r($row);, a wyniki wklej tutaj. Zobaczymy, co jest w $row.
Go to the top of the page
+Quote Post
Manfred
post
Post #10





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 21.03.2005
Skąd: Olsztyn

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


Wyskoczyło:

Array ( [adv_id] => 2 [adv_name] => łśćąę [adv_text] => [adv_city] => [adv_profession] => np. kelner, zmywak [adv_earnings] => do negocjacji [adv_date] => 03.27.2010 [adv_tel] => [adv_email] => [adv_pass] => dJo8g )

Najważniejsze pogrubilem. Zdaje się że hasło jest, ale nie zależnie od tego czy wpisze to hasło czy jakikolwiek inny ciąg znaków, zawsze wyskakuje else.
Go to the top of the page
+Quote Post
blooregard
post
Post #11


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Bo to jest tablica.

Musisz zmienić w warunku $adv_pass na $row['adv_pass'], nie zauw

@down:
Fakt, nie zwróciłem uwagi.
Powód edycji: [blooregard]:
Go to the top of the page
+Quote Post
mortus
post
Post #12





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(blooregard @ 27.03.2010, 20:19:11 ) *
Bo to jest tablica.

Musisz zmienić w warunku $adv_pass na $row['adv_pass']
Nie musi, bo ma extract($row);


Teoretycznie zapytanie powinno zwrócić jeden rekord, dlatego zastąpiłbym
  1. while ($row = mysql_fetch_array($result)) {
  2. extract($row);
  3. }
tym
  1. $row = mysql_fetch_array($result, MYSQL_ASSOC);
  2. extract($row);


Tak z ciekawości wydrukuj w linii 21 (przed warunkiem sprawdzającym) tablicę $_POST i $adv_pass - print_r($_POST); echo '<br>' . $adv_pass;, wypróbuj i daj znać, co wypluło.

Albo jeszcze lepiej var_dump($_POST['pass']); var_dump($adv_pass);.

Ten post edytował mortus 27.03.2010, 20:25:44
Go to the top of the page
+Quote Post
Manfred
post
Post #13





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 21.03.2005
Skąd: Olsztyn

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


@mortus, zwróciło:

Array ( [pass] => dJo8g [Submit] => Edytuj )
dJo8g

zrobiłem tę podmianę kodu, ale nadal nie działa ;/

Go to the top of the page
+Quote Post
mortus
post
Post #14





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Wypróbuj jeszcze var_dump-y, zobaczymy co to za typy danych i jakiej są długości, bo zdaje się, że wartość jest taka sama, ale to może być iluzja.

Ten post edytował mortus 27.03.2010, 20:47:48
Go to the top of the page
+Quote Post
Manfred
post
Post #15





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 21.03.2005
Skąd: Olsztyn

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


@mortus, DZIĘKI (IMG:style_emoticons/default/biggrin.gif)

przy użyciu var_dumpa dokopałem się do problemu,

var_dump($row);

array(10) { ["adv_id"]=> string(1) "2" ["adv_name"]=> string(10) "łśćąę" ["adv_text"]=> string(0) "" ["adv_city"]=> string(0) "" ["adv_profession"]=> string(18) "np. kelner, zmywak" ["adv_earnings"]=> string(13) "do negocjacji" ["adv_date"]=> string(10) "03.27.2010" ["adv_tel"]=> string(0) "" ["adv_email"]=> string(0) "" ["adv_pass"]=> string(6) " dJo8g" }


var_dump($_POST['pass']);
string(5) "CY48X"

no 5 nie pasuje do 6, więc trzeba było wziąć na celownik funkcje, która tworzy hasło, a wygląda ona tak:
  1. // generowanie losowego hasla
  2. function createkey($dlugosc) {
  3.  
  4. $dlugosc = 5;
  5.  
  6. $key=' ';
  7.  
  8. for($i=0; $i<$dlugosc; $i++) {
  9.  
  10. switch(rand(1,3)) {
  11.  
  12. case 1: $key.=chr(rand(48,57));break;
  13.  
  14. case 2: $key.=chr(rand(65,90));break;
  15.  
  16. case 3: $key.=chr(rand(97,122));break;
  17.  
  18. }
  19.  
  20. } return $key;
  21.  
  22. }
  23.  
  24. $pass = createkey($dlugosc);

wystarczyło usnąc spacje w $key (6 linijka)

i teraz śmiga jak marzenie (IMG:style_emoticons/default/winksmiley.jpg) Jeszcze raz wielkie dzięki mortus za szybką pomoc!
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 05:30