Inloggen met cookie geeft foutmelding, maar werkt wel.

Status
Niet open voor verdere reacties.

SKILL

Gebruiker
Lid geworden
9 apr 2009
Berichten
41
Hallo,

ik wil het volgende programmeren:

Het script vraagt om een naam.
Als de naam getypt wordt moet deze 30 dagen in een cookie bewaard worden.
Als het script in het vervolg wordt aangeroepen dan moet er niet meer om de naam gevraagd worden, maar mag de naam direct op het scherm weergegeven worden.

Ik heb de volgende code geprogrammeerd:
PHP:
<html>
<head>
	<title>Logincookie</title>
</head>
<body>

<?php
$naam = $_POST["Naam"] ? $_POST["Naam"] : $_COOKIE["Naam"];
if (isset($_POST["Naam"])) {
	setcookie("Naam", $naam, time()+60*60*24*30); 
	echo "Welkom ".$naam;
} else {
?>

<!--form start-->
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>" />
<input type="text" name="Naam" size="30" maxlength="30" />
<input type="submit" name="Verzendbutton" value="Verzenden" />
</form>
<!--form end-->

<?php
}
?>

</body>
</html>

Als ik dit script uitvoer krijg ik de volgende twee meldingen:

Notice: Undefined index: Naam in Q:\UsbWebserver\UsbWebserver\Root\logincookie.php on line 8

Notice: Undefined index: Naam in Q:\UsbWebserver\UsbWebserver\Root\logincookie.php on line 8

Hoe komt het dat ik deze foutmelding krijg?
En hoe kan ik dit oplossen?
 
PHP:
$naam = $_POST["Naam"] ? $_POST["Naam"] : $_COOKIE["Naam"];

Dat is waar het misgaat.

Je kijkt of de waarde van $_POST['Naam'] gelijk is aan true. Is dat zo, dan moet die waarde aan $naam worden toegekend, anders de waarde uit de cookie.

Maar wat als het formulier niet verstuurd is? Dan bestaat $_POST['Naam'] helemaal niet. En $_COOKIE['Naam'] hoeft ook nog niet te bestaan. Je kunt het zo oplossen:

PHP:
$naam = ($_SERVER['REQUEST_METHOD'] == 'POST') ? $_POST['Naam'] : (isset($_COOKIE['Naam'])) ? $_COOKIE['Naam'] : '';

Je kunt het ook helemaal uitgebreid opschrijven (misschien overzichtelijker):

PHP:
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
  $naam = $_POST['Naam'];
} else {
  if ( isset ( $_COOKIE['Naam'] ) ) {
    $naam = $_COOKIE['Naam'];
  } else {
    $naam = ''; // wat je dan ook als standaard wilt invullen.
  }
}
 
Laatst bewerkt:
Heejz Erikbooy007... je red me weer uit de brand.

Idd, wat als het formulier niet verstuurd is. Daar zat ik ook mee, maar ik wist niet hoe ik dit moest oplossen. Jou code doet de trick, maar ik moet hem nog ff begrijpen.

PHP:
$naam = ($_SERVER['REQUEST_METHOD'] == 'POST') ? $_POST['Naam'] : (isset($_COOKIE['Naam'])) ? $_COOKIE['Naam'] : '';

Hier staat dus eigenlijk het volgende:
///////////////////////////////////////////////////////////////////////////////////
PHP:
$naam = ($_SERVER['REQUEST_METHOD'] == 'POST')
De "Naam" wordt doorgegeven met de methode POST..
PHP:
? $_POST['Naam']
Als de naam niet is doorgegeven met de methode post...
PHP:
: (isset($_COOKIE['Naam']))
Dan is het de waarde die $_COOKIE["Naam"] heeft...
PHP:
? $_COOKIE['Naam']
Als $_COOKIE ook geen waarde heeft...
PHP:
: '';
Dan is de invoer niets.
///////////////////////////////////////////////////////////////////

Lees ik de code zo goed?
 
Sweet,

als ik op verzenden klik krijg ik alleen wel de volgende melding:

Notice: Undefined index: Naam in Q:\UsbWebserver\UsbWebserver\Root\logincookie.php on line 8
Welkom

Steeds als ik iets probeer vernieuw ik de pagina en delete ik de cookie natuurlijk.
 
Ik zie zo even niet waarom dit fout gaat...

Iemand anders misschien?
 
Hm.

Schrijf het eens uit over een paar regels, kijk welke 'naam' hij niet kan vinden, en var_dump vervolgens die array eens? Dan zou je er wel achter moeten komen :)
 
Het gaat om de laatste naam in de regel:

PHP:
$naam = ($_SERVER["REQUEST_METHOD"] == "POST") ? $_POST["Naam"] : isset($_COOKIE["Naam"]) ? $_COOKIE["Naam"]: " ";

Dus die laatste ? $_COOKIE["Naam"]: " ";
 
Dat is dus vreemd, want je kijkt eerst of de waarde bestaat en als dat zo is, ken je de waarde toe... anders niet.

Of zit ik nu met m'n gedachten helemaal verkeerd?
 
Nee, ik vat jou helemaal. Die redenatie heb ik dus ook.
Kan iemand het script draaien en bekijken wat er gebeurt.

(overigens wordt er ook geen cookie meer aangemaakt op dit moment als ik het script draai, dat was eerst wel ondanks de foutmeldingen)
 
Het enige andere wat ik me kan bedenken is dat ie niet fout gaat op $_COOKIE['Naam'] maar op $_POST['Naam']...

Weet je zeker dat die bestaat en een waarde heeft, als het formulier wordt ingestuurd? var_dump die eens voordat je de vergelijking doet?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan