Mijn script om een wachtwoord te resetten werkt het laatste stukje niet van.
Gaat waarschijnlijk om de functie function Reset_Password.
Hij ziet het 'process' niet waardoor er geen reset plaatsvindt.
Het sturen van de email gaat prima.
De code wordt netjes opgeslagen.
Komt ook overeen met de code die per email werd opgenomen.
Er wordt netjes overgeschakeld om het nieuwe wachtwoord in te vullen.
En dan houdt het op.
Want komt if(isset($process)) niet door.
Heb al van alles geprobeerd. Maar ik vind geen vreemde zaken.
Zelfde gebeurt ook bij 'Gebruikersnaam vergeten'.

Iemand advies?
Hier belangrijkste stukken uit de scripts:

PAGINA FORGOT_PASSWORD:

<?php
include_once 'processes.php';
$Login_Process = new Login_Process;
$Check = $Login_Process->Forgot_Password($_GET, $_POST);
$Request = $Login_Process->Request_Password($_POST, $_POST['Request']);
$Reset = $Login_Process->Reset_Password($_POST, $_POST['Reset']);
?>
<body>
<?php 
switch($Check) {
	case "<!-- !-->":
?>
<form action= <?php echo $_SERVER['PHP_SELF']; ?> method="post">
<input name="code" type="hidden" id="code" value="<?php $_GET['code']; ?>" >
<input name="Reset" type="submit" value="Reset wachtwoord" id="Reset">
</form>
<?php 
		break;
	default:
?>
<form action= <?php echo $_SERVER['PHP_SELF']; ?> method="post">
<input name="Request" type="submit" value="Verzoek email reset wachtwoord" id="Request"/>
</form>
<?php 
}
?>

VERWERKING IN PROCESSES:

function Forgot_Password($get, $post) {
	
	$code = $_POST['code'];
	if(!$code) { 
	$code = $_GET['code']; } 

$code2 = $i->get(CODE);
if ($code === $code2)
{
return "<!-- !-->";
break;
}
}

function Request_Password($post, $process) {
		
	if(isset($process)) {

echo $i->set(CODE,$code); 

Mail_Reset_Password($name, $code, $email);
				return "Er is een email verstuurd. Hiermee kun je het wachtwoord resetten.";
}
}

function Reset_Password($post, $process) {

		if(isset($process)) {	
$code = "";
$password_hash = $pass1;
echo $i->set(CODE,$code); 
echo $i->set(PASSWORD_HASH,$password_hash); 

Mail_Reset_Password_Confirmation($name, $email);
return "Wachtwoord is gewijzigd. Je kunt nu inloggen.";
}
}


[size=xsmall]Toevoeging op 05/12/2017 15:11:47:[/size]

Eindelijk gevonden na het doorlezen van mijn topic...
Was de echo vergeten bij $_GET.....
>> Die volg ik even niet? $_POST en $_GET worden automatische ge-urldecode(). Het enige wat je ooit zou moeten encoden zijn (keys en values) van de querystring in een URL voor de action, maar voor de rest toch niet?
Op output toch echt niet. PHP kent geen automatisme in deze gevallen. Als je iets naar je form wil duwen, of zelfs naar een URL zul je moeten encoden. Een tijd terug is hier nog een topic voor aangemaakt, ik heb nu even geen zin om deze op te zoeken.

>> Maakte iemand hier latst geen opmerking over, dat je veel beter SCRIPT_NAME kon gebruiken
Correct. Een verwerking van SCRIPT_NAME is veilig, omdat dit een bestandsnaam geeft die aan de hand van de gegeven URL bepaald is in plaats van een directe afleiding van deze URL. SCRIPT_NAME is het uitgevoerde bestand, zonder verdere toevoegingen, waar PHP_SELF iets kan zijn als bestand.php/blabla1/blabla2/jepadhier. Hier zijn allerlei varianten denkbaar als input, bijvoorbeeld externe urls die je met encoding trucs als volledige url kunt doorgeven. Toegegeven, tegenwoordig staat allow_url_include bij praktisch iedereen hard uit, maar better safe than sorry.
Ben van Velzen op 08/12/2017 03:31:24
Op output toch echt niet. PHP kent geen automatisme in deze gevallen. Als je iets naar je form wil duwen, of zelfs naar een URL zul je moeten encoden.

Uiteraard, ik denk dat we beiden hetzelfde zeggen of iig bedoelen.
Ik loop alle pagina's nog eens na.
Nu gebruik ik ook een tabel die opgebouwd wordt
met de opgeslagen data.
Deze kan weer gewijzigd worden en wordt dan doorgestuurd via $_POST.
Waar en hoe kan ik hier het beste htmlspecialchars toepassen?


echo '<tr><td><input type="text" class ="field" id = "'.$j.'" name="lijst[]" value="'.$b[$i].'" onclick = "proberen(this.value,this.id)"></td><td></tr>';
in de waarde van je value. Want dat is inhoud die zich kan aanpassen.
Als je er nu een " zou invullen, zou je HTML niet meet valid zijn. Dus htmlspecialchars is zeker aan te raden.
Bedankt Ariën

op deze manier dan?

value="'.htmlspecialchars($b[$i]).'"
correct
is het ook nog verstandig om bij action = "" nog htmlchars toe te passen?
of htmlentities ?

Bepalen je gebruikers dan zelf de waarde van je action?

Vuistregel is: Kunnen gebruikers de getoonde waarde in het elemenet van te voren aanpassen? Zo ja: converteer de belangrijke tekens naar enties met de genoemde functies.
aan de action kunnen ze niks doen.
bedankt voor de info Ariën.
Zo kan ik wel even vooruit.
Het is gewoon veel handiger -en daarnaast veel makkelijker- om alle dynamische content, of deze nu afkomstig is van gebruikers of niet, die niet als HTML geïnterpreteerd / weergegeven dient te worden te escapen.

Dit omdat je dan niet elke keer hoeft te bedenken of output ge-escaped dient te worden en als dit niet is gebeurd hoef je ook niet elke keer na te gaan of dit bewust zo is gedaan of per ongeluk is vergeten.

Oftewel, escape (gewoon alle) output.

Als je dit in een uitzonderlijk geval om wat voor reden dan ook niet wilt doen dan dien je direct op die plaats in commentaar uit te leggen waarom dat daar expliciet niet de bedoeling is (en nog belangrijker, waarom het niet nodig zou zijn!).

Deze simpele regels maken escaping een stuk eenduidiger en je code daarmee veiliger.

NB Dit is ook waar escaping voor bedoeld is: het wegnemen van enige speciale betekenis van content in een bepaalde context. Dit heeft in principe niets te maken met de bron(nen) waar deze informatie vandaan komt. Daarnaast is "user data" die de database in gaat niet ineens veilig (en het escapen hiervan als het de database ingaat is geen goede oplossing). Ook wil je al deze verschillende typen content niet allemaal een aparte behandeling geven. Houd het gewoon simpel en escape altijd voor gebruik, wat meestal neerkomt op escapen voor/tijdens weergave op een webpagina.

EDIT: en echo ajb geen statische plakken HTML, maar enkel de dynamische delen. Daar maak je dan des te duidelijker het onderscheid tussen statisch en dynamisch.

Reageren