我正在做一个时事通讯系统,用户在我的输入文本中输入他的邮件,然后点击提交订阅时事通讯。
点击提交后,他会收到一封电子邮件,说要确认他的订阅,他需要点击我在此电子邮件中提供的链接。
这是链接:
<p>To confirm your subscription click on link below:</p>
<a href="http://localhost/website/newsletter/confirm?email='.$email.'&code='.$code.'">Confirm Subscription</a>
此链接将重定向到我的新闻通讯确认页面,我将收到电子邮件和代码,然后我将对订阅者表进行更新。
$email = $_GET['email'];
$code= $_GET['code'];
$pdo = start();
$updSub = $pdo->prepare("UPDATE subscribers set status= ? WHERE code = ?");
$updSub->bindParam(2,$code);
$updSub->execute();
但我有这两个注意事项:
注意:未定义的索引:F:\ Xampp \ htdocs \ website \ newsletter \ confirm.php中的电子邮件
注意:未定义的索引:F:\ Xampp \ htdocs \ website \ newsletter \ confirm.php中的代码
你知道为什么会发生这种情况吗?我使用.htaccess文件,不知道是否因为这个原因,在url中传递变量代码和电子邮件有些问题。
这是我的htaccess文件:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1
我的查询字符串:
@$url = $_GET['url'];
$url = explode('/', $url);
$url[0] = ($url[0] == NULL ? 'index' : $url[0]);
if(file_exists('template/'.$url[0].'.php')){
require_once('template/'.$url[0].'.php');
}elseif(@file_exists('template/'.$url[0].'/'.$url[1].'.php')){
require_once('template/'.$url[0].'/'.$url[1].'.php');
}
else{
require_once('template/404.php');
}
答案 0 :(得分:0)
首先,当您处理用户的输入并直接放入URL时,请确保对其进行URL编码。即使电子邮件地址不能有空格等
如果您使用JavaScript来处理,请使用:
encodeURIComponent("");
encodeURIComponent(document.getElementById('email').value);
encodeURIComponent($("#email").val()); // jQuery Library Required
如果您使用表单来处理用户输入而无需javascript干预,请不要担心会自动发生的网址编码。
如果使用PHP来处理输入 - &gt;网址,利用:
rawurlencode($email);
之后,当您在未事先声明变量的情况下调用变量时,会发生undefined index
。这就像说:
echo $apples; // where $apples has not been previously declared
现在,检查所有include
或require
文件,确保您没有在某处调用相同的变量名称。
使用isset
和empty
等功能可以让您更好地进行验证。
if(!empty($_GET['email'])){
mysqli->real_escape_string($email = $_GET['email']);
}else{
die("No E-Mail");
}
并将停止未定义的索引错误,提示您正确检查以确保变量存在。
简单明了,您的问题是因为您要求变量在被推迟之前。如果它们的值为NULL,则不会发生此问题。