2010-10-29 52 views
0

注意:未定义的索引:第12行的/var/www/mailer.php中的主题注意:未定义的索引:第13行的/var/www/mailer.php中的消息注意:未定义的索引:从第14行的/var/www/mailer.php注意:注意:未定义的索引:第15行中的/var/www/mailer.php中的verifier。注意:未定义的索引:tntcon在/var/www/mailer.php上线23没有收到任何变量,当前页不能被直接访问PHP - “Notice:Undefined index”error

下面是代码

<?php 

ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

// ----------------------------------------- 
// The Web Help .com 
// ----------------------------------------- 
// remember to replace [email protected] with your own email address lower in this code. 

// load the variables form address bar 
$subject = $_POST["subject"]; 
$message = $_POST["message"]; 
$from = $_POST["from"]; 
$verif_box = $_POST["verif_box"]; 

// remove the backslashes that normally appears when entering " or ' 
$message = stripslashes($message); 
$subject = stripslashes($subject); 
$from = stripslashes($from); 

// check to see if verificaton code was correct 
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){ 
    // if verification code was correct send the message and show this page 
    mail("[email protected]", 'TheWebHelp.com Form: '.$subject, $_SERVER['REMOTE_ADDR']."\n\n".$message, "From: $from"); 
    // delete the cookie so it cannot sent again by refreshing this page 
    setcookie('tntcon',''); 
} else if(isset($message) and $message!=""){ 
    // if verification code was incorrect then return to contact page and show error 
    header("Location:".$_SERVER['HTTP_REFERER']."?subject=$subject&from=$from&message=$message&wrong_code=true"); 
    exit; 
} else { 
    echo "no variables received, this page cannot be accessed directly"; 
    exit; 
    } 
?> 
+0

*(tipp)*使用'error_reporting(-1);'会显示每个可能的错误,即使在未来的PHP版本中添加了新的级别和常量时也是如此。 – Gordon 2010-10-29 15:13:42

+0

有没有听说过?:D第二,这些是通知的 - 没有错误,你可能试图访问部分$ _POST,这不存在 – Hannes 2010-10-29 15:15:00

回答

0

错误很简单,因为该消息$ _POST阵列不具有键称为“消息”。这可能来自表单尚未提交的事实。该错误只是一个通知,并不会阻止程序运行。

0

在处理某些特定领域之前,您应该检查一下$_POST包含的内容,看看isset函数。或者干脆关掉display_errors

+0

“或者干脆关闭display_errors;)”=>我会建议只做一个旧的/蹩脚的PHP应用程序在最近的服务器上工作... – 2010-10-29 15:18:23

+0

@Frosty,我会建议在任何生产服务器上;)你不想向你的访问者显示PHP错误:)旧PHP代码上的代码,是的,吨已弃用的通知。但我有时讨厌通过isset检查,并在'$ _POST'之前附加一个'@'来避免这些通知。 – kovshenin 2010-10-29 15:21:54

+0

我当时在谈论dev服务器,因为隐藏通知在那里通常不是很好的做法。但我同意有时使用'isset()'检查真的很无聊:-) – 2010-10-29 15:33:06

0

检查用户提交的数据

$subject = (isset($_POST["subject"]) ? $_POST["subject"] : ''); 
$message = (isset($_POST["message"]) ? $_POST["message"] : ''); 
$from = (isset($_POST["from"]) ? $_POST["from"] : ''); 
$verif_box = (isset($_POST["verif_box"]) ? $_POST["verif_box"] : ''); 

你甚至可以让自己的函数来做到这一点

function checkPost($fieldname) 
{ 
    return (isset($_POST[$fieldname]) ? $_POST[$fieldname] : ''); 
} 

然后做

$subject = checkPost("subject"); 

我也推荐你检查所需的POST字段

if (!isset($_POST["xxx"]) || trim($_POST["xxx"]) == '') 
{ 
    // throw exception, display error... 
} 

仅供参考,而不是使用stripslashes()函数,以避免“magic_quotes的”,你可以用一个简单的功能,比如这个http://snippets.dzone.com/posts/show/5256这将为各个领域做的工作。

0

看起来你不用通过POST方法提交表单就调用这个PHP文件。请确保您的邮件表格有正确的方法设置:

<form method="POST" action="yourfile.php"> 
etc. 
</form> 

你也应该调用邮件前消毒用户输入()(。即除去换行和标签),否则你都在呼吁麻烦。

+0

可以...任何一个更改上面的代码,这将对我有用...并让我知道相同...请 – AON 2010-10-29 15:23:37

0

您的$ _POST和$ _COOKIE数组不包含这些索引。

务必:

print_r($_POST); 
print_r($_COOKIE); 

,看看什么是包含在这些阵列

0
foreach(array('subject', 'message', 'from', 'verif_box') as $val) 
{ 
    if (isset($_POST[$val])) 
    { 
     $$val = trim($_POST[$val]); 
     continue; 
    } 

    // some sort of error checking, like telling the end user that 
    // not all fields were correctly given 
} 
0
//checking if array elements are set and changing variables values if so 
$subject = isset($_POST["subject"])?$_POST["subject"]:null; 
$message = isset($_POST["message"])?$_POST["message"]:null; 
$from = isset($_POST["from"])?$_POST["from"]:null; 
$verif_box = isset($_POST["verif_box"])?$_POST["verif_box"]:null; 

// check to see if verificaton code was correct and if cookie value on 'tntcon' is set 
if(isset($_COOKIE['tntcon']) && md5($verif_box).'a4xn' == $_COOKIE['tntcon']){ 

变化是在12-15行,并在23

+0

什么关于只发布已更改的行,可能前后有1-2行的上下文? – 2011-11-14 16:52:28

+0

你是对的,谢谢。 – Constantine 2011-11-15 07:33:33

1

你试图访问不存在的变量的部分。如果它们存在,您可能需要在使用它们之前进行检查。