我正在使用PHP购物车,我似乎在各种各样的地方收到此错误“注意:未定义的索引:”。错误指的是不同位置的类似编码位。例如,我有一段编码,用于计算用户决定订阅的月份的套餐价格。我有以下错误引用的变量:
$month = $_POST['month'];
$op = $_POST['op'];
$ month变量是用户在表单中输入的数字,$ op变量是不同的包,其值存储在用户从表单上的单选按钮中选择的可用表中。
我希望这在某种程度上是明确的。
谢谢
编辑:抱歉忘记提及当用户提交数据时它们会消失。但是,当他们第一次来到页面时,它会显示此错误。我怎么能摆脱它所以它不显示它?
-
这是代码:
<?php
$pack_1 = 3;
$pack_2 = 6;
$pack_3 = 9;
$pack_4 = 12;
$month = $_POST['month'];
$op = $_POST['op'];
$action = $_GET['action'];
if ( $op == "Adopter" ) {
$answer = $pack_1 * $month;
}
if ( $op == "Defender" ) {
$answer = $pack_2 * $month;
}
if ( $op == "Protector" ) {
$answer = $pack_3 * $month;
}
if ( $op == "Guardian" ) {
$answer = $pack_4 * $month;
}
switch($action) {
case "adds":
$_SESSION['cart'][$answer][$op];
break;
}
?>
答案 0 :(得分:27)
您正在尝试访问未设置的数组中的标记。这引起了注意。
您现在很可能会注意到它,因为您的代码已移至php.ini已将error_reporting
设置为包含E_NOTICE
的服务器。通过将error_reporting设置为E_ALL & ~E_NOTICE
(不推荐)来抑制通知,或者在尝试访问索引之前验证索引是否存在:
$month = array_key_exists('month', $_POST) ? $_POST['month'] : null;
答案 1 :(得分:13)
您是否将表单处理器放在与表单相同的脚本中?如果是这样,它会在设置post值之前尝试处理(一切都在执行)。
将所有处理代码包装在条件中,以检查表单是否已被发送。
if(isset($_POST) && array_key_exists('name_of_your_submit_input',$_POST)){
//process form!
}else{
//show form, don't process yet! You can break out of php here and render your form
}
脚本在程序编程时从上到下执行。如果表单尚未发送,您需要确保程序知道忽略处理逻辑。同样,在处理之后,您应该重定向到类似
的成功页面header('Location:http://www.yourdomainhere.com/formsuccess.php');
我不会养成抑制通知或错误的习惯。
如果我建议如果您遇到这些问题且尝试构建购物车,请改为使用像Magento或OsCommerce这样的成熟电子商务解决方案,请不要冒犯。购物车是一个需要高度安全性的界面,如果您正在努力解决这些POST问题,我可以保证您以后会感到头疼。有许多非常好的稳定版本,有些像对象模型一样简单,可以下载。
答案 2 :(得分:3)
显然$ _POST ['month']未设置。也许HTML表单定义中存在错误,或者可能是其他原因造成了这种错误。无论原因是什么,在使用之前都应该检查变量是否存在,所以
if(isset($_POST['month'])) {
$month = $_POST['month'];
} else {
//month is not set, do something about it, raise an error, throw an exception, orwahtever
}
答案 3 :(得分:2)
我如何摆脱它以便它不显示它?
这里的人们试图告诉你它不专业(而且是),但在你的情况下你应该只是在应用程序的开头添加以下内容:
error_reporting(E_ERROR|E_WARNING);
这将禁用E_NOTICE报告。正如名称所示,E_NOTICES不是错误,而是通知。您最好检查一下这些东西并证明未定义的变量不会导致错误。但常见的情况是它们只是非正式的,对于使用PHP处理表单输入是完全正常的。
此外,下次Google首先出现错误消息。
答案 4 :(得分:2)
这只是php通知消息,看来php.ini配置不符合vtiger标准,
您可以将错误报告设置为 E_ALL&amp; php.ini 中的~E_NOTICE
例如error_reporting(E_ALL&~E_NOTICE)
然后重新启动apache 以反映更改。
答案 5 :(得分:1)
试试这个:
$month = ( isset($_POST['month']) ) ? $_POST['month'] : '';
$op = ( isset($_POST['op']) ) ? $_POST['op'] : '';
答案 6 :(得分:0)
我认为名称'month'或'op'可能没有表单元素。你可以验证HTML源代码(提交时导致错误的页面)是否确实具有上面名称的html元素
答案 7 :(得分:0)
未定义的索引意味着未设置数组键,在引发错误的行之前执行var_dump($_POST);die();
并看到您正在尝试获取不存在的数组键。
答案 8 :(得分:0)
它只是意味着在这种情况下,数组$ _POST没有一个名为你的错误中未定义的元素。 PHP发出NOTICE而不是FATAL ERROR警告。
您可以通过编辑php.ini来记录较少的事件,或者通过首先使用isset()
检查项目是否确实已经初始化来处理它答案 9 :(得分:0)
确保您使用过方法=&#34; post&#34;在您发送数据的表格中。
答案 10 :(得分:0)
<?php
if ($_POST['parse_var'] == "contactform"){
$emailTitle = 'New Email From KumbhAqua';
$yourEmail = 'xyz@gmail.com';
$emailField = $_POST['email'];
$nameField = $_POST['name'];
$numberField = $_POST['number'];
$messageField = $_POST['message'];
$body = <<<EOD
<br><hr><br>
Email: $emailField <br />
Name: $nameField <br />
Message: $messageField <br />
EOD;
$headers = "from: $emailField\r\n";
$headers .= "Content-type: text/htmml\r\n";
$success = mail("$yourEmail", "$emailTitle", "$body", "$headers");
$sent ="Thank You ! Your Message Has Been sent.";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>:: KumbhAqua ::</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<link rel="stylesheet" href="style1.css" type="text/css">
</head>
<body>
<div class="container">
<div class="mainHeader">
<div class="transbox">
<p><font color="red" face="Matura MT Script Capitals" size="+5">Kumbh</font><font face="Matura MT Script Capitals" size="+5" color= "skyblue">Aqua</font><font color="skyblue"> Solution</font></p>
<p ><font color="skyblue">Your First Destination for Healthier Life.</font></p>
<nav><ul>
<li> <a href="KumbhAqua.html">Home</a></li>
<li> <a href="aboutus.html">KumbhAqua</a></li>
<li> <a href="services.html">Products</a></li>
<li class="active"> <a href="contactus.php">ContactUs</a></li>
</ul></nav>
</div>
</div>
</div>
<div class="main">
<div class="mainContent">
<h1 style="font-size:28px; letter-spacing: 16px; padding-top: 20px; text-align:center; text-transform: uppercase; color: #a7a7a7"><font color="red">Kumbh</font><font color="skyblue">Aqua</font> Symbol of purity</h1>
<div class="contactForm">
<form name="contactform" id="contactform" method="POST" action="contactus.php" >
Name :<br />
<input type="text" id="name" name="name" maxlength="30" size="30" value="<?php echo "nameField"; ?>" /><br />
E-mail :<br />
<input type="text" id="email" name="email" maxlength="50" size="50" value="<?php echo "emailField"; ?>" /><br />
Phone Number :<br />
<input type="text" id="number" name="number" value="<?php echo "numberField"; ?>"/><br />
Message :<br />
<textarea id="message" name="message" rows="10" cols="20" value="<?php echo "messageField"; ?>" >Some Text... </textarea>
<input type="reset" name="reset" id="reset" value="Reset">
<input type="hidden" name="parse_var" id="parse_var" value="contactform" />
<input type="submit" name="submit" id="submit" value="Submit"> <br />
<?php echo "$sent"; ?>
</form>
</div>
<div class="contactFormAdd">
<img src="Images/k1.JPG" width="200" height="200" title="Contactus" />
<h1>KumbhAqua Solution,</h1>
<strong><p>Saraswati Vihar Colony,<br />
New Cantt Allahabad, 211001
</p></strong>
<b>DEEPAK SINGH RISHIRAJ SINGH<br />
8687263459 8115120821 </b>
</div>
</div>
</div>
<footer class="mainFooter">
<nav>
<ul>
<li> <a href="KumbhAqua.html"> Home </a></li>
<li> <a href="aboutus.html"> KumbhAqua </a></li>
<li> <a href="services.html"> Products</a></li>
<li class="active"> <a href="contactus.php"> ContactUs </a></li>
</ul>
<div class="r_footer">
Copyright © 2015 <a href="#" Title="KumbhAqua">KumbhAqua.in</a> Created and Maintained By- <a title="Randheer Pratap Singh "href="#">RandheerSingh</a> </div>
</nav>
</footer>
</body>
</html>
enter code here
答案 11 :(得分:0)
我确实定义了所有变量,这是我检查过的第一件事。我知道在PHP中不需要它,但是老习惯很难。然后我对这些信息进行了包装:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name1"])) {
$name1Err = " First Name is a required field.";
} else {
$name1 = test_input($_POST["name1"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name1)) {
$name1Err = "Only letters and white space allowed";
当然test_input是另一个执行trim,strilashes和htmlspecialchars的函数。我认为输入已经很好地消毒了。不要只是粗暴地展示我的所作所为。当谈到电子邮件时,我还检查了它是否是正确的格式。我认为真正的答案是,一些变量是局部的,一些是全局的。我现在没有错误地工作,所以我现在非常忙,我会接受关闭错误作为我的答案。别担心我会弄清楚它现在不是非常重要!
答案 12 :(得分:-1)
显然,GET和/或POST变量不存在。只测试“是否”。 (伪代码):
if(isset($_GET['action'];)) {$action = $_GET['action'];} else { RECOVER FROM ERROR CODE }
答案 13 :(得分:-1)
要隐藏所有错误,代码为:
<?php
error_reporting(0);
@ini_set(‘display_errors’, 0);
//THE REST OF THE CODE
?>
答案 14 :(得分:-1)
确保标签正确关闭。并且结束标记将不包括在循环内。 (如果它包含在循环结构中)。