Autor Zpráva
perwin
Profil
Ahoj,
mám takovou prosbu. Nevíte někdo prosím, jak opravit tento script, aby fungoval? Slouží pro změnu hesla k účtu na straně přihlášeného uživatele.
Script stránky zmenahesla.php:
<?php
ob_start();  
session_start();             
  if(isset($_POST['sent'])){     
    $heslo=$_POST['heslo'];
    $noveh1=$_POST['noveh1'];
    $noveh2=$_POST['noveh2'];
    
    if($heslo=="$_SESSION[heslo]" or $noveh1=="" or $noveh2==""){ 
      $backlink="index.php?page=registrace&Alert=1";
    }else{   
      require "db.php";    
      $PocetStejnych=mysql_result(mysql_query("SELECT COUNT(*) FROM `uzivatele` WHERE `heslo`='$heslo'), 0);
	  if($PocetStejnych!=0){   
        $backlink="index.php?page=registrace&Alert=2";
      }elseif($noveh1 != $noveh2){    
        $backlink="index.php?page=registrace&Alert=3";
      }else{         
        $noveh=md5($noveh1);  
        if($web=="http://" or $web==""){ 
          $web="";
        }
        $VlozData=mysql_query("INSERT INTO uzivatele (heslo) VALUES ('$noveh1')") or die (mysql_error());
  
		
        $backlink="logout.php?logout=yes";
      }

    }
  }else{
    $backlink="index.php?page=registrace&Alert=5";
  }

 header ("Location: $backlink");
ob_end_flush();

?>

Script stránky s inputem na změnu hesla:
<form action="zmenahesla.php" method="post">
  <input type="hidden" name="sent" value=""/>
    <input type="password" name="heslo" maxlength="30"/> <strong>Předchozí heslo</strong> <br/>
 <input type="password" name="noveh1" maxlength="30"/> <strong>Nové heslo</strong> <br/>
 <input type="password" name="noveh2" maxlength="30"/> <strong>Nové heslo znovu</strong> <br/>
   
<input id="i1" type="submit" name="send" value="Změnit heslo"/>
</form>

Děkuji
Majkl578
Profil
Myslím, že místní zvýrazňovač syntaxe ti odpověděl.
panther
Profil
perwin:
kdyby sis zapnul vypisování chybových hlášek, zjistil bys, že na ř. 13 nemáš uzavřenou závorku.

Na 23. řádku ukládáš nové heslo kamsi, tam by měl být spíše UPDATE toho současného uživatele.
perwin
Profil
A jak by prosím vypadal ten script s UPDATE?
tiso
Profil
perwin: čo za to?
jenikkozak
Profil
Už jsem měl napsanou odpověď, ale tiso mi ukázal, že bych ti tím nepomohl. Ptáš se na základní věci, máš zásadní neznalosti v jazyce, s nímž pracuješ, nemáš zájem si informace dohledávat, pouze tu čekáš na odpověď. Už jednou jsem s tebou tyhle „blbosti“ řešil, zřejmě to byla chyba.
perwin
Profil
jak za to?
Tak dík za odpověď.
Já mám zájem si informace dohledávat, ale i když si je dohledám, tak to neznamená že to hnedka všechno umím, tak mi prosím poraďte jak ten script napsat. Díky
Takže nějak takto?
mysql_query("UPDATE uzivatele SET heslo = '$noveh1'") or die (mysql_error());

Opravte mě prosím. Díky
Moderátor Joker: 4 příspěvky sloučeny do jednoho.
jenikkozak
Profil
perwin:
Takže nějak takto?
Ne, tahle bys změnil hesla všech uživatelů. Musíš přidat podmínku, kterou vybereš toho daného.
UPDATE uživatele SET heslo='$noveh1' WHERE ...

Místo těch tří teček dej něco, co o daném uživateli víš - nick nebo id.
perwin
Profil
Takže takhle?
WHERE jmeno = ahoj

(to jméno ahoj je jenom příklad)

ale jestliže nevím, jaké je jméno toho náhodného uživatele který se rozhodne změnit si heslo, tak to budu muset udělat takhle:
WHERE jmeno = '$_SESSION[login]'

?
perwin
Profil
Dal jsem tam
UPDATE uživatele SET heslo='$noveh1' WHERE '$_SESSION[login]' 

- ale to mi hlásí chybu na stránkách:
Access denied for user 'zakaznik'@'localhost' (using password: NO)

- což sice asi není chyba týkající se toho co tu teď řešíme, ale docela rád bych věděl proč mi to toto hlásí
Díky
Keeehi
Profil
perwin:
Access denied for user 'zakaznik'@'localhost' (using password: NO)
Tento problém nevyvolal update, ale už přihlašování do db. Hledej chybu tam. (nejspíše v db.php)
perwin
Profil
Ne, soubor db.php je společný pro registraci, login, diskuzi,... a to funguje
Takže v souboru db.php chyba nebude
perwin
Profil
Jo už jsem to našel a celý script funguje... díky za rady
davidmyska
Profil
Dobrý den, použil jsem tento kód na svých stránkách, trochu jsem se ho upravil a nechce mi fungovat
zde je můj kód souboru zmenahesla.php
<?php
ob_start();  
session_start();             
  if(isset($_POST['sent'])){     
    $heslo=$_POST['heslo'];
    $noveh1=$_POST['noveh1'];
    $noveh2=$_POST['noveh2'];
    
    if($heslo!="$_SESSION[password]" or $noveh1=="" or $noveh2==""){
    echo "Nebyly vyplněny všechny povinné údaje!";
    }
    else{   
      require "db.php";    
      $PocetStejnych=mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `password`='$heslo'"), 0);
      if($PocetStejnych!=0){
      }
      elseif($noveh1 != $noveh2){
      echo "Zadané hesla se neshodují!!!";
      }
      else{         
        $noveh=sha1($noveh1);  
        $VlozData=mysql_query("UPDATE users SET password='$noveh' WHERE '$_SESSION[username]'") or die (mysql_error());
        if($VlozData){
         echo "Heslo změněno.";
        }
      }
    }
  }
  else{
  echo "Došlo k chybě v odeslání dat.";
  }
ob_end_flush();

?>

píse mi to chybu: "Notice: Undefined index: password in zmenahesla.php on line 9" a mou hlášhu "Nebyly vyplněny všechny povinné údaje!"
i když všechny údaje vyplněny byly
Joker
Profil
davidmyska:
píse mi to chybu: "Notice: Undefined index: password in zmenahesla.php on line 9" a mou hlášhu "Nebyly vyplněny všechny povinné údaje!"
Zřejmě heslo do session neukládáte do $_SESSION["password"].
(a když jsme u toho, na ř. 10 by mělo být: …$heslo!=$_SESSION["password"]…)
Upravte si kód pro své stránky.

Jinak ale tak jak je to napsané to bude ty poznámky vyhazovat vždycky, když nebude něco vyplněné.

Poznámka (notice :-) ), jestli tomu kódu nerozumíte (což naznačuje dotaz), je poměrně riskantní prostě na své stránky převzít kód, se kterým měl někdo problém.
Spectator
Profil
davidmyska:
Podle všeho není v $_SESSION index password a tím pádem v něm ani nic není, takže se při porovnání nemůže rovnat s heslem v postu

Mimochodem co je toto za nářečí a proč se v poslední době na internetu taková slovní spojení množí?
Zadané hesla se neshodují!!!
jenikkozak
Profil
davidmyska:
Další věc, kde asi narazíš:
$VlozData=mysql_query("UPDATE users SET password='$noveh' WHERE username='$_SESSION[username]'") or die (mysql_error());

Pak také se v první v prvním dotazu zřejmě porovnává shoda hesla, zatímco v update se do databáze ukládá hash hesla.
Kromě toho nebude splněna ani ta první podmínka v případě, že v IE někdo formulář odešle Enterem.
Nejlepší asi bude se tohoto skriptu vzdát a zkusit napsat něco vlastního. Třeba to nedopadne hůř. :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: