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.
/**
* 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 intval( mysql_result( $sql, 0 ) ) == 1 ? 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
}
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.
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();
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.
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?
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']);
}
?>
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']);
}
?>
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?