I need to set cookies in an assignment. When I set them using a string, ie setcookie('Name', 'John', time() + 86400)
it works, but when using a PHP variable, ie setcookie('Name', $name, time() + 86400)
the cookie is not set.
I'm not sure what I am doing wrong. I have echoed out the $name variable on my page and it shows up so I know that is being set. When I display the cookie using $_COOKIE['Name']
, it works when it received a string, but doesn't when it's a PHP variable
.
<form action="order02.php" class="formLayout">
<div class="formGroup">
<label>First name:</label>
<input type="text" name="fname" class="textbox" autofocus
required placeholder="First name" title="first name"
maxlength="20" pattern="[A-Za-z'-]{2,20}">
</div>
<div class="formGroup">
<label> Car model:</label>
<div class="formElements">
<input type="radio" name="model" required value="Mustang">Ford Mustang<br>
<input type="radio" name="model" required value="Subaru">Subaru WRX
STI<br>
<input type="radio" name="model" required value="Corvette">Corvette<br>
</div>
</div>
<?php
$name = $_GET['fname'];
$model = $_GET['model'];
//write cookies for name and model for 1 day
setcookie('Name', $name, time() + 86400);
setcookie('Model', $model, time() + 86400);
?>
if(isset($_COOKIE['Name'])){
echo "Cookie ".$_COOKIE['Name']." is set";
}
else{
echo "<div class='pageContainer'>";
echo "<h2 class='containerText, centerText'>Failed to validate inputs";
echo "<br><br>";
echo "<a href='order01.php'><button>Go Back</button></a>";
echo "</div>";
exit();
}
There are few issues in your code, first, there is no closing </form>
tag and second you have to submit your form on order01.php
where you are saving your cookie
so try this and it will work
Order01.php
<form action="order01.php" class="formLayout">
<div class="formGroup">
<label>First name:</label>
<input type="text" name="fname" class="textbox" autofocus
required placeholder="First name" title="first name"
maxlength="20" pattern="[A-Za-z'-]{2,20}">
</div>
<div class="formGroup">
<label> Car model:</label>
<div class="formElements">
<input type="radio" name="model" required value="Mustang">Ford Mustang<br>
<input type="radio" name="model" required value="Subaru">Subaru WRX STI<br>
<input type="radio" name="model" required value="Corvette">Corvette<br>
</div>
<input type="submit" value="submit">
</div>
</form>
Order02.php
<?php
$name = $_GET['fname'];
$model = $_GET['model'];
//write cookies for name and model for 1 day
setcookie('Name', $name, time() + 86400);
setcookie('Model', $model, time() + 86400);
if(isset($_COOKIE['Name'])){
echo "Cookie ".$_COOKIE['Name']." is set";
}
else{
echo "<div class='pageContainer'>";
echo "<h2 class='containerText, centerText'>Failed to validate inputs";
echo "<br><br>";
echo "<a href='order01.php'><button>Go Back</button></a>";
echo "</div>";
exit();
}
?>
Must not be output before cookies line like (echo, print_r() and HTML tags)
You can write the cookies code before any output
<?php
$name = $_GET['fname'];
$model = $_GET['model'];
//write cookies for name and model for 1 day
setcookie('Name', $name, time() + 86400);
setcookie('Model', $model, time() + 86400);
?>
<form action="order01.php" class="formLayout">
<div class="formGroup">
<label>First name:</label>
<input type="text" name="fname" class="textbox" autofocus required placeholder="First name" title="first name" maxlength="20" pattern="[A-Za-z'-]{2,20}">
</div>
<div class="formGroup">
<label> Car model:</label>
<div class="formElements">
<input type="radio" name="model" required value="Mustang">Ford Mustang<br>
<input type="radio" name="model" required value="Subaru">Subaru WRX STI<br>
<input type="radio" name="model" required value="Corvette">Corvette<br>
</div>
<input type="submit" value="submit">
</div>
</form>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.