有两个未定义的索引(电子邮件和代码,可能是因为我的htaccess文件)

时间:2014-08-08 15:00:13

标签: php .htaccess email

我正在做一个时事通讯系统,用户在我的输入文本中输入他的邮件,然后点击提交订阅时事通讯。

点击提交后,他会收到一封电子邮件,说要确认他的订阅,他需要点击我在此电子邮件中提供的链接。

这是链接:

<p>To confirm your subscription click on link below:</p>
    <a href="http://localhost/website/newsletter/confirm?email='.$email.'&amp;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');
}

1 个答案:

答案 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

现在,检查所有includerequire文件,确保您没有在某处调用相同的变量名称。

使用issetempty等功能可以让您更好地进行验证。

if(!empty($_GET['email'])){
     mysqli->real_escape_string($email = $_GET['email']);
}else{
     die("No E-Mail");
}

并将停止未定义的索引错误,提示您正确检查以确保变量存在。

简单明了,您的问题是因为您要求变量在被推迟之前。如果它们的值为NULL,则不会发生此问题。