хранение данных в cookie с использованием переполнения стека

В настоящее время я изучаю php, и мне нужно сохранить идентификатор продукта (с автоматическим увеличением) в файле cookie, затем извлечь файл cookie и отобразить его пользователю на странице обновления. Я знаю, что файлы cookie не годятся для хранения данных форм, но они предназначены для образовательных целей. Я предоставил копию формы и проверочный код, затем он вызывает файл с именем storefile2 для отправки подробностей в базу данных и отображения на странице обновления для пользователя. Я застрял на этой проблеме и был бы признателен за любую помощь. Спасибо

        $prodID = 0;

if (isset($_COOKIE['$prodID'])) {
$prodID = ++$_COOKIE['$prodID'];
}
else {
$productID = 1;
}
setcookie("'$prodID'", $prodID, time()+ (86400 * 365));

?>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Assessment 4</title>
<link rel="stylesheet" type="text/css" href="css/lever.css">
</head>

<style>
.error { color: #FF0000; }
.container {width:700px;margin:0 auto;}
.center {text-align:center;}

</style>
<body>

<?php
$errMessageName ="required field";
$errMessageFinish="required field";
$errMessageUsage = "required field";
$errMessageCost="required field";
$errMessageImage="required field";
$prodName="";
$prodFinish="";
$prodUsage="";
$prodCost="";
$prodID="";
$invalidData = false;

if ($_SERVER["REQUEST_METHOD"] == "POST") {

if(isset($_POST["reset"])){
header("Refresh:0");
exit();
}

//validate fields
$prodName = checkinput($_POST["Name"]);
$prodFinish = checkinput($_POST["Finish"]);
$prodUsage = checkinput($_POST["Usage"]);
$prodCost = checkinput($_POST["Cost"]);

$fileupload = $_FILES['userfile']['name'];
$filetype = $_FILES['userfile']['type'];
$filesize = $_FILES['userfile']['size'];
$tempname = $_FILES['userfile']['tmp_name'];

$filelocation = "images/$fileupload";

if($prodName == "") {
$errMessageName = "Product name must not be blank";
$invalidData = true;
}
elseif ($prodFinish == "") {
$errMessageFinish = "Product finish must not be blank";
$invalidData = true;
}
elseif ($prodUsage == ""){
$errMessageUsage = "Product Usage must not be blank";
$invalidData = true;
}
elseif (!filter_var($prodCost, FILTER_VALIDATE_FLOAT)) {
$errMessageCost = "Please enter a number only in decimal format eg: 1.00";
$invalidData = true;
}
//make sure a file has been entered
elseif($fileupload == "") {
$errMessageImage = "Please enter an image";
$invalidData = true;
}
//check file type
elseif (($_FILES['userfile']['type'] != "image/jpg") && ($_FILES['userfile']['type'] != "image/png")
&& ($_FILES['userfile']['type'] != "image/jpeg"))
{
$errMessageImage = "Only JPG & PNG files are allowed.";
$invalidData = true;
}
elseif (!move_uploaded_file($tempname,$filelocation)) {
switch ($_FILES['userfile']['error'])
{
case UPLOAD_ERR_INI_SIZE:
echo "<p>Error: File exceeds the maximum size limit set by the server</p>" ;
break;

case UPLOAD_ERR_FORM_SIZE:
echo "<p>Error: File exceeds the maximum size limit set by the browser</p>" ;
break;

case UPLOAD_ERR_NO_FILE:
echo "<p>Error: No file uploaded</p>" ;
break;

default:
echo "<p>File could not be uploaded </p>" ;
}
}
else
{

$conn = mysqli_connect("localhost:3306","root","");
// Check connection
if (mysqli_connect_errno())
{
echo "<p>Failed to connect to MySQL: " . mysqli_connect_error() . "</p>";
}

}

if ($invalidData == false) {
include('storefile2.php');
//Show thank you page
//header('Location: update.php');
exit();
}
}


function checkInput($inputData) {
$inputData = trim($inputData);
$inputData = stripslashes($inputData);
$inputData = htmlspecialchars($inputData);
return $inputData;
}

?>

<div class="container">
<h1>Acme Hardware</h1>
<h2>Door Levers - Product Entry Form</h2>
<h3>Enter the Door Lever Product Details into the form and and click the Submit button</h3>

<p>NOTE: * denotes required entry</p></br>

<form id="Form1" name="Form" method="post" enctype='multipart/form-data' action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>>

<label for="Name">Product Name: </label><input type="text" name="Name" id="Name" size="20" value="<?php echo
$prodName;?>"><span class="error">* <?php echo $errMessageName;?></span><br /><br />

<label for="Finish">Product Finish: </label> <input type="text" name="Finish" id="Finish" size="20" value="<?php echo
$prodFinish;?>"><span class="error">* <?php echo $errMessageFinish;?></span><br /><br />

<label for="Usage">Product Usage: </label><input type="text" name="Usage" id="Usage" size="20" value="<?php echo
$prodUsage;?>"><span class="error">* <?php echo $errMessageUsage;?></span><br /><br />

<label for="Cost">Product Cost: </label><input type="text" name="Cost" id="Cost" size="20" value="<?php echo
$prodCost;?>"><span class="error">* <?php echo $errMessageCost;?></span><br /><br />

<a href="ProductCost.php">Update product cost</a> <br/><br/>
<a href="deleteProduct.php">Delete product</a> <br/><br/>

<input type='hidden' name='MAX_FILE_SIZE' value='4000000'/>
<label for="userfile">Product image: </label><input type='file' id='userfile' name='userfile'><span class="error">* <?php echo $errMessageImage;?></span></br>

<input type="submit" name="submit" value="Submit"/>
<input type ="reset" name="reset" value ="Reset" title="Reset Form"/>

</form>
</div>

0

Решение

Если вы хотите, чтобы имя файла cookie было буквальным $ символ в нем, вам нужно использовать только одинарные кавычки вокруг имени при вызове setcookie(),

setcookie('$prodID', $prodID, time()+ (86400 * 365));

Обводя его двойными кавычками, вы позволяете раскрыть переменную, поскольку одинарные кавычки внутри двойных кавычек не имеют особого значения, они просто рассматриваются как буквенные символы.

Увидеть В чем разница между одинарными и двойными кавычками в PHP?

1

Другие решения

Мне жаль, что у меня действительно нет времени, чтобы попытаться отладить ваш исходный код, но, пожалуйста, начните с использования функции отладки браузера вашего браузера наблюдать реальное взаимодействие между вашим PHP-кодом (каким бы он ни был …) и реальным браузером.

Когда вы «устанавливаете cookie», происходит следующее: заголовок HTTP добавляется к следующему пакету данных, который будет отправлен клиенту, с указанием имени файла cookie и значения, которое он должен принимать. Как только клиент получит и обработает этот заголовок, он будет включать cookie и его значение в Заголовки HTTP что он после этого отправляет на хост … то есть «следующий время.»

Так что — используйте ваш браузер, чтобы проверить эти заголовки. Сделал хост фактически отправляет запрос set-cookie? Сделал клиент после этого отправит? (И, если это произошло, почему ваш код на стороне сервера не увидел его?)

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector