Gepost door: Floris Bos
Gepost op: 23-01-2005 19:04
--------------------------------------------------------------------------------
Kan iemand even kijken naar het onderstaande? Het betreft een aantal berichten afkomstig uit een thread van mij op een ander forum. Onderaan geef ik aan het nog niet te begrijpen en stel ik een aantal vragen. Helaas heb ik geen reactie meer gehad, maar ik heb zelf het idee dat iemand met de nodige PHP-ervaring me redelijk makkelijk moet kunnen vertellen hoe het zit. Iemand die een poging wil wagen??
In mijn laatste bericht staan dus de vragen die ik nog heb, de rest heb ik voor de volledigheid ook maar toegevoegd.
Alvast bedankt!!!
Ik ben bezig met een aanmeldformulier. Voordat een nieuwe gebruiker aangemeld wordt controleer ik of de naam al bestaat (of er dus al een gebruiker is geregistreerd met dezelfde naam). Indien de naam al bestaat dan mag er niet geregistreerd worden.
De controle die lukt prima, hoe daarna verder is echter een probleem. Momenteel doe ik het zo (gedeelte code):
if (mysqli_num_rows($result) >= 1)
{die("De opgegeven naam bestaat al, kies een andere naam");}
Probleem hiermee is dat de ingevoerde gegeven niet meer zichtbaar zijn. Ik kan natuurlijk een linkje maken onder de die-opdracht, zodat de gebruiker in ieder geval terug kan naar het formulier waar zijn ingevulde gegevens dan nog staan (ik ga er tenminste vanuit dat dit kan), maar dit vind ik niet erg netjes.
Is het niet mogelijk om een melding met javascript te geven (met alert) binnen mijn php script waarna het uitvoeren van het script wordt onderbroken, maar de gebruiker dus wel op de pagina met de reeds ingevoerde gegeven blijft?
Het probleem is eigenlijk dat ik al in de php-code zit die uitgevoerd wordt als de method post is:
if ($_SERVER["REQUEST_METHOD"] == "POST")
Is het mogelijk om deze als het ware te cancelen, zodat de huidige pagina blijft staan? Ik krijg het gevoel dat dit niet kan met de standaard PHP-functies maar wellicht is er een workaround?
Ik hoop dat ik duidelijk genoeg ben in mijn uitleg.
--------------------------------------------------------------------------------
Re: Melding als naam al bestaat
Gepost door: Gerald Hoekstra
Gepost op: 15-01-2005 12:43
Laatste wijziging: 15-01-2005 12:48
--------------------------------------------------------------------------------
Zet alle gegevens tijdens de foutmelding in hidden fields. Zodat er, zodra weer terug wordt gegaan naar de invul-pagina, je de reeds (goed) ingevulde gegevens met de POST methode weer mee kan sturen en als value gebruiken in de invulvelden.
--------------------------------------------------------------------------------
Re: Melding als naam al bestaat
Gepost door: Michiel van den Boogaard
Gepost op: 15-01-2005 13:11
Laatste wijziging: 15-01-2005 13:12
--------------------------------------------------------------------------------
of je maakt en hidden frame en via java vraag je in dat frame een php pagina op die aangeeft of de naam al bestaat (voordat er gepost wordt)
http://www.phpfreakz.nl/artikelen.php?aid=83
--------------------------------------------------------------------------------
Re: Melding als naam al bestaat
Gepost door: Floris Bos
Gepost op: 15-01-2005 13:34
--------------------------------------------------------------------------------
Bedankt voor de snelle reacties!
Als ik even uitga van de als eerst voorgestelde oplossing:
Hoe zet ik binnen PHP de gegevens in hidden fields? En hoe kopieer ik vervolgens de waardes van mijn hidden fields naar de zichtbare velden?
Moet ik hier javascript voor gebruiken of kan dit ook gewoon met PHP zelf.
Zal wel een domme vraag zijn, maar ook na enig zoekwerk kom ik hier niet uit.
--------------------------------------------------------------------------------
Re: Melding als naam al bestaat
Gepost door: Jelrik van Hal
Gepost op: 15-01-2005 14:05
--------------------------------------------------------------------------------
Of je zet het in een sessie, veel makkelijker dan van die hiddenfields in html...
--------------------------------------------------------------------------------
Re: Melding als naam al bestaat
Gepost door: Gerald Hoekstra
Gepost op: 15-01-2005 14:11
Laatste wijziging: 15-01-2005 14:12
--------------------------------------------------------------------------------
Zou zal ongeveer dan je 'foutmelding' script eruit zien:
<?
$aantalFout = 0;
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_POST['naam'] == '') {
echo "Je naam is fout";
$aantalFout++;
}
if ($_POST['emailadres'] != "correct") {
echo "Foutief emailadres!";
$aantalFout++;
}
echo '<form action="jescript.php">';
echo "<input type=\"hidden\" name\"Emailadres\" value=\"".$_POST['emailadres']."\">";
//enz
echo '<input type="submit" value="Ga terug en verbeter">';
echo '</form>';
if ($aantalFout == 0) {
// doe je mail-opdracht en succesvol verstuurd bericht
}
} else {
echo "Je bent niet correct op deze pagina gekomen";
?>
Zo kun je allemaal hidden fields maken met de gegevens erin die net zijn ingvuld door de bezoeker. Als dan op de knop "Ga terug en verbeter" wordt gedrukt, wordt de bezoeker weer teruggestuurd naar het oorspronkelijke invulscherm. En omdat je alle gegevens zijn meegestuurd in $_POST, kun je ze allemaal weer laten invullen in de velden, door de value van het veld de juiste $_POST[] waarde tegeven.
PS. Dit een snel opgezet voorbeeldje. Pin me er aub niet op vast.
[EDIT] In een sessie kan inderdaad ook. Het is maar wat je handig vind en wat je kunt... [/EDIT]
--------------------------------------------------------------------------------
Re: Melding als naam al bestaat
Gepost door: Floris Bos
Gepost op: 15-01-2005 20:24
--------------------------------------------------------------------------------
Bedankt! Ik begrijp dat er meerdere mogelijkheden zijn. Mijn aanmeldformulier heeft als actie een nieuwe pagina te openen:
<form name="Aanmelden" method="Post" action="/WijzigGegevens.php" onSubmit="return ControleerInvoer()">
Op het moment dat het formulier gepost wordt, wordt WijzigGegevens.php dus geopend (onder de voorwaarde dat ControleerInvoer() geen fouten vindt). Maar ik kan pas in de procedure die uitgevoerd wordt als ik het formulier heb gepost
if ($_SERVER["REQUEST_METHOD"] == "POST")
checken of de opgegeven naam al bestaat.
if (mysqli_num_rows($result) >= 1)
{die("De opgegeven naam bestaat al, kies een andere naam");}
Op dat moment wordt /WijzigGegevens.php echter al geopend en kan ik dit niet meer terugdraaien. Of ontgaat me hier nu iets?
Ik snap dus eigenlijk niet helemaal precies wat er gebeurt als ik zowel een
if ($_SERVER["REQUEST_METHOD"] == "POST") procedure heb in de huidige php-pagina (dit handelt ook het opslaan van de aanmelding in de database af) en tegelijkertijd met mijn formulier naar een nieuwe pagina
(WijzigGegevens.php) verwijs. Wordt de code onder
if ($_SERVER["REQUEST_METHOD"] == "POST")
dan nog wel gewoon uitgevoerd alvorens de nieuwe pagina wordt geopend?
Het zal vast allemaal mogelijk zijn wat ik wil, maar ik vat hem dus nog niet helemaal. Verder kan ik overigens best met een sessie werken als dat nodig is.
Ik wil dus niet met een knop 'ga terug' of zoiets werken, ik zou graag voorkomen dat ik op een andere pagina uitkom als de naam al bestaat danwel automatisch terugkeren naar het invulscherm zonder dat de gebruiker er iets van merkt.
Kunnen jullie me nog iets verder helpen?
Alvast bedankt!
888 views