我正在一个人们可以根据邮政编码进行搜索的网站上工作。 第一次访问页面时,会打开一个弹出对话框。你必须填写你的邮政编码和x km的radisu。
提交时,将cookie设置为“邮政编码”和“半径”。
我在主页上的搜索栏中打印出这些Cookie。但是当我想提交表单时,它没有获得cookie的价值。它不是空的,但当我手动重新键入它然后单击提交它工作。可能是什么问题?
我正在使用Pro6pp(在线邮政编码数据库),我从中获得特定半径的邮政编码。我把它们保存在会话中。
我的对话框:
<div id="dialog" class="hidden" title="Welkom bij OostWestRegioBest.nl">
<p>Zoeken in uw regio.</p>
<p>Voer een postcode in zonder letters. Voorbeeld: 1234.</p>
<br/>
<form method="post" action="">
<input type="text" name="postcode" size="25" placeholder="Postcode">
<select name="radius">
<option disabled selected>Afstand</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20">20</option>
<option value="25">25</option>
</select>
<br/><br/>
<hr>
<br/>
<p style="float: right"><input type="submit" value="Opslaan"></p>
<input type="hidden" name="submitted" value="true">
<input type="hidden" name="afstand" value="true" />
</form>
<?php
if(isset($_POST['postcode']))
{
setcookie('radius', $_POST['radius'], time() + (20 * 365 * 24 * 60 * 60));
setcookie('postcode', $_POST['postcode'], time() + (20 * 365 * 24 * 60 * 60));
header("location: {$_SERVER['PHP_SELF']}");
};
?>
我的搜索表单:
<form name="input" method="post" action="searchresults" class="pro6pp_range">
<input type="search" onchange="validate()" placeholder="Zoeken..." name="search" size="70">
<select class="range">
<? $radius = $this->input->cookie('radius'); ?>
<? $sesspc = $_SESSION['searched_post_code'] = $_COOKIE['postcode']; ?>
<? $postcode = $sesspc ?>
<option selected="selected" value="<?= $this->input->cookie('radius'); ?>"><?= $this->input->cookie('radius');?> km</option>
<option value="">Kies een afstand</option>
<option value="5">5 km</option>
<option value="10">10 km</option>
<option value="15">15 km</option>
<option value="20">20 km</option>
<option value="25">25 km</option>
<option value="50">50 km</option>
</select>
<input type="search" required="required" name="searchpc" class="postcode" value="<?= $postcode ?>" placeholder="Postcode (1234)" maxlength="4">
<input type="submit" value="Zoeken">
<br/>
<span class="message"></span>
<br/>
</form>
<?php
$searchpc = $this->input->post('searchpc');
if(empty($searchpc)){
unset($_SESSION['postcodes']);
}
?>
在表单和pro6pp数据库之间进行交互的代码:
<!-- <script>
window.location.replace("home/searchresults");
</script>
-->
<?php
session_start();
echo '<pre>';
$new_post_code=$_GET['post_code'];
if($new_post_code!='' && $new_post_code!=0){
if(!isset($_SESSION['searched_post_code']) ||
empty($_SESSION['searched_post_code'])){
$_SESSION['searched_post_code']=$new_post_code;
$_SESSION['searched_post_code'] = $_COOKIE['postcode'];
}elseif($_SESSION['searched_post_code']!=$new_post_code){
$_SESSION['searched_post_code']=$new_post_code;
unset($_SESSION['postcodes']);
}
}
$string = implode($_SESSION['postcodes'], '|');
$output=$_GET['output'];
$_SESSION['postcodes'][]=$output;
echo $output;
print_r($_SESSION);
print_r($_COOKIE);
echo '</pre>';
?>
我不知道为什么它不起作用。
答案 0 :(得分:1)
setcookie()函数接受少数参数其中一个是路径我注意到你没有设置它。将路径设置为&#39; /&#39;将使其在整个领域内可用。它解决了你的问题。
例如
setcookie("TestCookie", $value, time()+3600, '/');
TestCookie将拥有$ value,该值在1小时后到期,并且可用于整个域。
来自手册
可在其上使用cookie的服务器上的路径。如果设置为&#39; /&#39;,则Cookie将在整个域中可用。如果设置为&#39; / foo /&#39;,则cookie只能在/ foo /目录和所有子目录中使用,例如/ foo / bar / of domain。默认值是设置cookie的当前目录。
你需要在setcookie()中为你的cookie设置正确的路径,它会起作用。
手动http://php.net/manual/en/function.setcookie.php
中的更多内容此外:
编辑$ _SESSION和$ _COOKIE的更改键,设置不同于您选中的键。
如果删除$ _SESSION变量,首先检查isset()是否存在此变量
在下次加载可以看到Cookie的网页之前,Cookie才会显示。要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。
它不会影响问题,但会将onchange="validate()"
更改为此onchange="return validate()"
您应该更改的代码
<?php
if(isset($_POST['postcode']))
{
setcookie('radius', $_POST['radius'], time() + (20 * 365 * 24 * 60 * 60), '/');
setcookie('postcode', $_POST['postcode'], time() + (20 * 365 * 24 * 60 * 60), '/');
header("location: {$_SERVER['PHP_SELF']}");
};
&GT;
<form name="input" method="post" action="searchresults" class="pro6pp_range">
<input type="search" onchange="return validate()" placeholder="Zoeken..." name="search" size="70">
<select class="range">
<? $radius = isset($_COOKIE['radius']) ? $_COOKIE['radius'] : -1; ?>
<? if(isset($_COOKIE['postcode'])) {$sesspc = $_COOKIE['postcode']; $_SESSION['postcode']= $_COOKIE['postcode'];} ?>
<? $postcode = $sesspc ?>
<? if(isset($_COOKIE['radius'])
echo '<option selected="selected" value="'.$_COOKIE['radius'].'">'.$_COOKIE['radius'].' km</option>';
?>
<option value="">Kies een afstand</option>
<option value="5">5 km</option>
<option value="10">10 km</option>
<option value="15">15 km</option>
<option value="20">20 km</option>
<option value="25">25 km</option>
<option value="50">50 km</option>
</select>
<input type="search" required="required" name="searchpc" class="postcode" value="<?= $postcode ?>" placeholder="Postcode (1234)" maxlength="4">
<input type="submit" value="Zoeken">
<br/>
<span class="message"></span>
<br/>
</form>
<?php
if(isset($_POST['searchpc']) && isset($_SESSION['postcode']))
{
if(empty($_POST['searchpc']) ) unset($_SESSION['postcode']);
}
?>