Login Retreive lost passwordRegister
Search

Forum Index / General / password change

[ This topic is unsolved! ]

  Simon Born 03 February 08 / 19:54  
so.
i have this script.

reads data from a db, then has a fh form :


$form->passField("oud wachtwoord", "oud_wachtwoord", FH_PASSWORD, 20,32);
$form->passField("nieuw wachtwoord", "nieuw_wachtwoord_1", FH_PASSWORD, 20,32);
$form->passField("herhaal nieuw wachtwoord", "nieuw_wachtwoord_2", FH_PASSWORD, 20,32);

$form->checkPassword("nieuw_wachtwoord_1", "nieuw_wachtwoord_2");
$form->submitButton("opslaan");

$form->onCorrect("myHandler");

$form->flush();

function myHandler($data) {
echo $r['wachtwoord'].'<br>'; *****this gives no output*********
var_export($data);


----------------------------------------------------------------
the $r array contains user data, in this case, i want to compare "oud_wachtwoord" with $r['wachtwoord']. if this is true, i want to store the new password in the database. however, in the myhandler function, i cannot access the $r data. how can i write this script? how can i make it a 2-way function that either stores the data or gives the user an error message when the wrong old password is entered? the nicest would be if i could send all the $data data to a new php page and then do all the necessary things, but i still don't get how that is possible. anybody knows help? thanks.

simon born

  Teye Heimans (Founder) 03 February 08 / 20:11  
Changed at 03 February 08 / 20:12
Better you use a custom validation function to check if the old password was correct:

<?php

$form 
= new dbFormHandler();

// ...


$form->passField("oud wachtwoord""oud_wachtwoord""validateOldPassword"20,32);

$form->passField("nieuw wachtwoord""wachtwoord"FH_PASSWORD20,32);
$form->passField("herhaal nieuw wachtwoord""wachtwoord_2"FH_PASSWORD20,32);

$form->checkPassword("wachtwoord""wachtwoord_2");
$form->submitButton("opslaan");

$form->onSaved("mySaveHandler");

$form->flush();


/**
 * Check here if the old password is correct
 * NOTE: THIS IS JUST A PSEUDO EXAMPLE!!
 *
 * @param string $oldPassword
 * @return boolean/string
 */
function validateOldPassword$oldPassword 
{
    
// query to check if this user's password is correct
    
$query 
      
"SELECT COUNT(1) 
       FROM gebruikers
       WHERE 
         wachtwoord = MD5('"
mysql_escape_string$oldPassword ) .") AND
         id       = '"
mysql_escape_string$_SESSION['user']['id'] ) ."'";
      
    
// execute the query  
    
$sql mysql_query$query );

    
// query succeeded?
    
if( $sql )
    {
        
// check if the old passsword was correct
        
return intvalmysql_result$sql) ) == true "Wachtwoord is incorrect";        
    }
    
// query failed
    
else 
    {
        
// return a user message
        
return "Er is een fout opgetreden tijdens het controleren van je oude wachtwoord";
        
        
// log the error
        
error_log(
            
"Fout tijdens het controleren van oud wachtwoord! \n".
            
"Error: "mysql_error() ."\n".
            
"Query: "$query
        
);
    }
}


function 
mySaveHandler($id$data
{
    
// new password is stored
}

?>

  Simon Born 04 February 08 / 11:04  
te gek. dank je Teye.

  Simon Born 06 February 08 / 14:30  
Changed at 06 February 08 / 14:40
hoi teye,

het probleem wat ik nu heb is dat ik niet aan de data van het nieuwe wachtwoord kom om hem op te slagen. hoe doe je dit? $data['nieuw_wachtwoord_1'] doet het niet. ik heb nog niet met objects gewerkt dus als je het aan mij zo kan uitleggen dat ook een object-nieuwling het begrijpt zal ik het heel erg warderen.

groet
simon

  Roland van Wanrooy 07 February 08 / 11:21  
Changed at 07 February 08 / 11:23
In het voorbeeld van Teye heb je 3 velden:
- oud_wachtwoord
- wachtwoord
- wachtwoord_2
Ik laat de checkPassword en validatie even achterwege.

Zie de code van Teye:
<?php
// object-instantie initialiseren
$form = new dbFormHandler();

// wachtwoordvelden aan object toevoegen
$form->passField("oud wachtwoord""oud_wachtwoord""validateOldPassword"20,32);
$form->passField("nieuw wachtwoord""wachtwoord"FH_PASSWORD20,32);
$form->passField("herhaal nieuw wachtwoord""wachtwoord_2"FH_PASSWORD20,32);

// submitbutton toevoegen
$form->submitButton("opslaan");

// handler toevoegen
$form->onSaved("mySaveHandler");

// form op het scherm tonen
$form->flush();
?>


De handler-functie toont de invoer van de 3 velden op het scherm.
Je kunt natuurlijk ook allerlei andere dingen doen in deze functie.
<?php
/* *** functies ***************************** */
function mySaveHandler($id$data) {
    echo 
sprintf('Oud wachtwoord: %s<br />'$data['oud_wachtwoord'])
    echo 
sprintf('Nieuw ww: %s<br />'$data['wachtwoord'])
    echo 
sprintf('Controle ww: %s'$data['wachtwoord_2'])

?>


In je tabel moet je dezelfde velden hebben als de veldnamen in dbFormHandler() (dus oud_wachtwoord, wachtwoord en wachtwoord_2).
Deze worden automatisch door dbFormHandler() in de tabel opgeslagen; je hoeft dit dus niet te doen in je handler-functie.

  Simon Born 07 February 08 / 14:19  
Hoi Roland,

vreemd genoeg worden de 3 wachtwoorden in het array $id opgeslagen. $data lijkt een object of een of ander gigantisch array te zijn (als ik hem uit wil geven krijg in een fout vanwege dat hij "te deep interlinked" is of iets dergelijks. $id is een array met de 3 waarden uit het formulier.

Het werkt nu met deze functie:

<?php
function mySaveHandler($id

    
// new password is stored 
    
$mysql_string='UPDATE `sleep_inn_users`.`users` SET `wachtwoord` = "'.$id['nieuw_wachtwoord_1'].'" WHERE `users`.`id` ='.$_GET['id']." LIMIT 1;";
    
mysql_query($mysql_string);
    echo 
'wachtwoord gewijzigd.'.'<br>';
    echo 
'click <a href="/f/toon_gegevens.php?id='.$_GET['id'].'">| hier |</a> om terug te gaan.';

?>


nou, deze kan ik nu natuurlijk gewoon ook $data noemen (edit: getest- kann), binnen de functie maakt het toch geen verschil. waarschijnlijk hangt het ervan af, hoe het eerste veld heet, wat vanuit onCorrect opgeroepen wordt, niet?

groet
simon

  Simon Born 08 February 08 / 19:40  
hoe kom je dan eigenlijk aan de $id data?

en: hoe geef je $data data eigenlijk aan een opgeroepen site door???

simon

  Roland van Wanrooy 11 February 08 / 17:24  
Kijk eens bij http://www.formhandler.net/manual/94/OnSaved.html

Gebruik geen $_GET maar gebruik de parameter-array. Dus:

<?php
/**
 * mySaveHandler()
 *
 * @param     mixed $aData
 * @return     void
 * @desc      form callback functie 
 */
function mySaveHandler($aData) {
    
// gebruik sprintf() voor een betere leesbaarheid van de code
    
    // new password is stored
    
$sQry sprintf('UPDATE `sleep_inn_users`.`users` SET `wachtwoord` = "%s" WHERE `users`.`id` = %d LIMIT 1;',
        
$aData['nieuw_wachtwoord_1'],
        
$aData['id']
        );
    
    
// feedback naar de user
    
mysql_query($sQry);
    echo 
'wachtwoord gewijzigd.<br />';
    echo 
sprintf('click <a href="/f/toon_gegevens.php?id=%d">| hier |</a> om terug te gaan.'$aData['id']);
}
?>

  Roland van Wanrooy 12 February 08 / 16:29  
 Quote: Roland van Wanrooy
 
Kijk eens bij http://www.formhandler.net/manual/94/OnSaved.html

Gebruik geen $_GET maar gebruik de parameter-array. Dus:

<?php
/**
 * mySaveHandler()
 *
 * @param     array $aData
 * @return     void
 * @desc      form callback functie 
 */
function mySaveHandler($aData) {
    
// gebruik sprintf() voor een betere leesbaarheid van de code
    
    // new password is stored
    
$sQry sprintf('UPDATE `sleep_inn_users`.`users` SET `wachtwoord` = "%s" WHERE `users`.`id` = %d LIMIT 1;',
        
$aData['nieuw_wachtwoord_1'],
        
$aData['id']
        );
    
    
// feedback naar de user
    
mysql_query($sQry);
    echo 
'wachtwoord gewijzigd.<br />';
    echo 
sprintf('click <a href="/f/toon_gegevens.php?id=%d">| hier |</a> om terug te gaan.'$aData['id']);
}
?>

  Simon Born 12 February 08 / 20:17  
Hoi Roland,

hoezo geef je de voorkeur aan de $aData['id'] in plaats van de $_GET['id'] waar FH hem toch uit $_GET haalt en dan in $aData zet? - gedachtes erachter?

sprintf gebruik ik nooit. is dit gewoon een kwestie van overzichtelijkheid dat je dit gebruikt of zit er ook nog iets anders achter?

groet en dank voor antwoorden
simon

  Top


powered by PHP-GLOBE   © 2004 - 2008 FormHandler. All rights reserved.   -   Open source license