Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] IF + md5
Forum PHP.pl > Forum > Przedszkole
Turson
Próbuję napisać skrypt, który sprawdzi czy dwie zmienne są sobie równo. Utrudnieniem jest to, że owe hasło w bazie jest w postaci md5, dlatego zmienna z formularza również musi zostać przeliczona na md5.
  1. $md5pass = md5($_POST["pass"]);
  2. if (isset($_POST["buttonm"])) {
  3. if(!empty($_POST["newmail"]) && !empty($_POST["pass"])){
  4. if($md5pass==md5($wiersz[user_haslo])){
  5. $nowymail = @mysql_query("UPDATE users SET user_mail='$_POST[newmail]' WHERE user_login='$_SESSION[login]'");
  6. echo "udało się.."; }}}

Zapewne błąd w linijce nr 4 - źle zapisana zmienna.
nekomata
zmienna $md5pass jest zbędna , możesz to zrobić tak.
  1. if (isset($_POST["buttonm"])) {
  2. if(!empty($_POST["newmail"]) && !empty($_POST["pass"])){
  3. if(md5($_POST['pass'])==md5($wiersz['user_haslo'])){// błąd to źle zapisane user_haslo , zapomniałeś apostrofów .
  4. $nowymail = @mysql_query("UPDATE users SET user_mail='$_POST[newmail]' WHERE user_login='$_SESSION[login]'");
  5. echo "udało się.."; }}}

Ogólnie następnym razem mógłbyś też napisać nam co jest problemem , pokazałeś kod ale nic więcej , co chcesz z nim zrobić co nie działa itd. happy.gif
Turson
Skrypt ma zmieniać hasło użytkownika, w formularzu $newmail to nowy adres, $buttonm to nazwa przycisku, a $pass to stare haslo, dla potwierdzenia.
Wkleiłem ten kod i nie działa, nic nie ma
Mackos
Nekomata z apostrofami czy bez to nie ma najmniejszej różnicy.
Jednak wydaje mi się że ta funkcja powinna tak wyglądać:
  1. if((md5($_POST['pass']))==(md5($wiersz['user_haslo']))){

Po prostu nawiasy wink.gif
gargamel
skoro hasło jest w bazie w formacie md5 to po co robisz jeszcze raz md5($wiersz['user_haslo']) ?
nekomata
Cytat(Mackos @ 6.04.2011, 23:18:23 ) *
Nekomata z apostrofami czy bez to nie ma najmniejszej różnicy.

O serio? Więc odpal sobie taki kodzik
  1. <?php
  2. $dieta_cud = array('banany' => 'buraki' , 'ziemniaki' => 'żelki');
  3. echo $dieta_cud['banany'].'<br />';
  4. echo $dieta_cud[banany].'<br />';
  5. echo '<br />więc czemu po co podawać bez apostrofow? a po to<br />';
  6. define('banany','ziemniaki');
  7. echo $dieta_cud[banany];
  8. ?>
Jak jesteś leniwy to tutaj za ciebie odpaliłem, wynik jest taki
Kod
buraki

Notice: Use of undefined constant banany - assumed 'banany' in D:\xamp\htdocs\text.php on line 4
buraki

wiec czemu po co podawac bez apostrofow? a po to
zelki
Chyba jednak apostrofy się przydają?(Oczywiście zamiast stałej można wsadzić zmienną )
Gargamel... i tu masz rację , nie wiem jak mogłem to przeoczyć.
kadlub
gargamel ma racje jak w bazie masz w formacie md5 to twój skrypt robi coś takiego
md5($_POST['pass'])== md5(md5($wiersz['user_haslo']))
i ten warunek nie ma prawa być spełniony
powinno być
md5($_POST['pass'])== $wiersz['user_haslo']
Turson
Jeśli dobrze zrozumiałem to całość
  1. if (isset($_POST["buttonm"])) {
  2. if(!empty($_POST["newmail"]) && !empty($_POST["pass"])){
  3. if(md5($_POST['pass'])== $wiersz['user_haslo']){
  4. $nowymail = @mysql_query("UPDATE users SET user_mail='$_POST[newmail]' WHERE user_login='$_SESSION[login]'");
  5. echo "udało się.."; }}}

nie działa
nospor
Czy tak trudno sprawdzić co zawierają rzeczy? Lepiej biegać po forum i płakać?
  1. ini_set('display_errors','1');
  2. print_r($_POST);
  3. if (isset($_POST["buttonm"])) {
  4. echo 'Jestem 1';
  5. if(!empty($_POST["newmail"]) && !empty($_POST["pass"])){
  6. echo 'Jestem 2';
  7. echo 'Pass:'.$_POST['pass'];
  8. echo 'passmd5:'.md5($_POST['pass'];
  9. echo 'wiersz:'.$wiersz['user_haslo'];
  10. if(md5($_POST['pass'])== $wiersz['user_haslo']){
  11. $nowymail = mysql_query("UPDATE users SET user_mail='$_POST[newmail]' WHERE user_login='$_SESSION[login]'") or die(mysql_error());
  12. echo "udało się.."; }}}

I wszystko będzie jasne
Turson
Sprawdzałem miliard razy i zmienna $wiersz2['user_haslo'] nie chce się wyświetlić. Powtarzam, że zgadza się pole z tym z bazy..
nospor
Napisz co zwraca skrypt, który ci podałem

poza tym skoro ci sie ten wiersz nie wyswietla znaczy ze go nie ma ustawionego. Gdzie masz kod za pobieranie tego $wiersz?
Turson
  1. $zapytanie2 = "SELECT user_haslo FROM users WHERE user_login='$_SESSION[login]'";
  2. $idzapytania2 = mysql_query($zapytanie2);
  3. while ($wiersz2 = mysql_fetch_assoc($idzapytania2))
  4. echo "<br>";
  5. if (isset($_POST["buttonm"])) {
  6. ini_set('display_errors','1');
  7. print_r($_POST);
  8. if (isset($_POST["buttonm"])) {
  9. echo 'Jestem 1';
  10. if(!empty($_POST["newmail"]) && !empty($_POST["pass"])){
  11. echo 'Jestem 2<br>';
  12. echo 'Pass:'.$_POST['pass'].'<br>';
  13. echo 'passmd5: '.md5($_POST['pass']).'<br>';
  14. echo 'wiersz:'.$wiersz2['user_haslo'].'';
  15. if(md5($_POST['pass'])== $wiersz2['user_haslo']){
  16. $nowymail = mysql_query("UPDATE users SET user_mail='$_POST[newmail]' WHERE user_login='$_SESSION[login]'") or die(mysql_error());
  17. echo "udało się.."; }}}}

Kod
Array ( [newmail] => mail@konto.pl [pass] => admin [buttonm] => Zmień hasło ) Jestem 1Jestem 2
Pass:admin
passmd5: 21232f297a57a5a743894a0e4a801fc3
wiersz:
darko
Jak już tak korzystacie z tego mysql_query, to przynajmniej dodajcie zawsze na końcu or die(mysql_error()); czyli:

  1. $zapytanie2 = "SELECT user_haslo FROM users WHERE user_login='" . $_SESSION['login'] . "'";
  2. $idzapytania2 = mysql_query($zapytanie2) or die(mysql_error());

Prawda, że proste? Poza tym dlaczego prawie zawsze problemem jest zrobienie czegoś takiego:

  1. while ($wiersz2 = mysql_fetch_assoc($idzapytania2))
  2. {
  3. echo $wiersz2['user_haslo'] . '<br/>';
  4. // albo:
  5. print_r($wiersz2);
  6. echo '<br/>';
  7. }

?

Dodatkowo, jeśli wyciągasz zawsze tylko jeden rekord, to warto użyć mysql_fetch_row zamiast fetch_array.
nospor
jednym z problemów jest to:
while ($wiersz2 = mysql_fetch_assoc($idzapytania2))
echo "<br>";

Ta petla robi tylko echo "br"; i po tej petli $wiersz2 zawsze jest FALSE.
Ta pętla jest w ogóle zbędna
$wiersz2 = mysql_fetch_assoc($idzapytania2);
Mackos
nekomata, proszę Cię bardzo wink.gif
nospor
@Mackos Włącz wyświetlanie wszystkich błędów tongue.gif
nekomata
Cytat(nekomata @ 6.04.2011, 23:42:25 ) *
Notice: Use of undefined constant banany - assumed 'banany' in D:\xamp\htdocs\text.php on line 4

Parser "zakłada" że chodziło o 'banany' (tak z apostrofami) czyli key z array'a.Ale pewny nie jest.Wyłączone raportowanie błędów nie jest zbyt dobrą rzeczą.
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.