link in verstuurde email naar pagina met usergegevens
Ik ben bezig een inlogpagina te maken, waarbij, om te registreren autorisatie van de webeigenaar nodig is. Dus ik heb een formulier waarbij de bezoeker naam, email en een unieke usernaam invult. Die gegevens worden opgeslagen in MySQL én naar de webeigenaar gemaild.
Nu wil ik dat de usernaam gelijk een link is naar een formulier dat de gegevens van de betreffende user uit de database haalt, zodat de webeigenaar de rest kan aanvullen en gebruikersrechten kan toekennen.
Maar ik krijg het niet voor elkaar om met de link in de email de usergegevens op te halen.
Deze link stuur ik naar de mail:
$body .= '<br>User: <a href="http://../nieuwe-aanmelding.php?user='.$_POST['user'].'">'.$_POST['user'];
En hiermee probeer ik de gegevens terug te halen, maar ik krijg de melding: User niet gevonden, dus kennelijk een leeg $result.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
try {
require_once ('../sql_link.php');
$sql_select = "SELECT firstname, lastname, email FROM members WHERE user = :user";
$userStmt = $db->prepare($sql_select);
$userStmt->execute(array(
':user' => $_GET['user']
));
$result = $userStmt->fetchAll();
if (count($result) == 1) {
echo $result['firstname'];
}
else {
echo 'User niet gevonden.';
}
}
?>
try {
require_once ('../sql_link.php');
$sql_select = "SELECT firstname, lastname, email FROM members WHERE user = :user";
$userStmt = $db->prepare($sql_select);
$userStmt->execute(array(
':user' => $_GET['user']
));
$result = $userStmt->fetchAll();
if (count($result) == 1) {
echo $result['firstname'];
}
else {
echo 'User niet gevonden.';
}
}
?>
Hoe kan ik dit oplossen?
Probeer de query/het script eens apart aan te roepen om te zien of dat werkt voor een bestaande user(name), oftewel, probeer het probleem te isoleren. Als daar niets mis is worden de gegevens misschien verkeerd doorgegeven aan het e-mailbericht? Ik zou trouwens het auto_increment id gebruiken, in plaats van de username. Ik hoop/neem aan dat jouw members tabel zo'n veld heeft?
Ik stuur de gegevens naar de mail gelijktijdig met dat ik ze in de dbase invoer. Daarom gebruik ik de 'user' en niet de id (die ik inderdaad ook heb), zodat ik niet eerst hoef in te voeren, uit te lezen en dan pas te versturen.
In de email komt de juiste $_POST['user'] aan, dat is makkelijk te controlen.
Waar ik over twijfel of het wel correct is, is de wijze van terug oproepen, dus de $_GET['user']. Ik heb eerder een soortgelijke constructie gemaakt, maar toen de gegevens via een sessie doorgestuurd, en niet via mail.
Ik zag trouwens dat ik in de link de afsluitende </a> vergeten was, maar dat maakt geen verschil.
Gewijzigd op 08/11/2015 20:07:55 door Aad B
Daarbij lijkt het mij dat alleen de gebruiker die zich zojuist heeft geregistreerd deze gegevens mag wijzigen, dus je zult daarvoor eerst in moeten loggen? Je zou een apart veld in je database bij kunnen houden (bijvoorbeeld "profiel_compleet" ofzo) die je direct doorstuurt naar je profielpagina zolang je deze niet volledig invult.
@Thomas: Het is een verzoek tot inlogrechten. Dus de administrator moet eerst een authorisatie geven, voordat iemand in kan loggen. Hier gaat het om.
De basisgegevens worden in de database opgeslagen én de email wordt verstuurd. De email heeft de link naar de webpagina waar die specifieke gebruikersgegevens uit de database opgeroepen worden. Dan kan de administrator daar een authorisatie aan geven, wat ook in de database techtkomt, waarna er een email gaat naar de gebruiker met een link waarbij die een password kan aanmaken om in te loggen.
Dus blijft staan mijn vraag van hierboven.
Ik zou dus (nog steeds) geen username gebruiken, en daarnaast zou ik eerst controleren of het ding waarop je wilt controleren wel bestaat (isset()) en mogelijk ook of deze voldoet aan een zeker patroon (ingeval van een hash) nog voordat je daar een query aan verkwist :).
Gewijzigd op 08/11/2015 23:01:42 door Thomas van den Heuvel
Ik snap niet goed wat je probleem is bij wat ik wil.