你如何在PHP中定义索引?

时间:2014-01-27 09:55:56

标签: javascript php post

使用firebug我不断收到'item','rating'和'classes'的'undefined index'通知。以下是我的代码。在PHP代码中,如果我注释掉if / die语句,那就是我从'未定义索引',如果我离开if / die语句,我得到'有一个问题'作为与firebug的响应。我的问题是你如何正确定义索引?我想要做的是使用POST方法将一些值传递给另一个PHP文件。如果我改变Javascript代码以确保这一点是好的,一切看起来都不错,但是当它进入下一阶段,这是下面的PHP代码,那就是我的问题发生的地方。顺便说一句,我不是一个程序员,而且这个东西很新,这只是一个侧面项目。感谢您提前提供任何帮助。

<?php
require_once("classes/include.all.php");

// Check that the data was sent

if (sizeof($_POST) == 0
|| $_POST['item'] == null
|| strlen(trim($_POST['item'])) == 0
|| $_POST['rating'] == null
|| strlen(trim($_POST['rating'])) == 0
|| is_numeric($_POST['rating'])
|| $_POST['classes'] == null
|| strlen(trim($_POST['classes'])) == 0)
 {
    die("There was a problem");
  }


 echo Rating::RateItem($_POST['item'], $_POST['rating'], $_POST['classes']);

?>

Javascript代码

function RateItem(varItemId, varRate)
{

var varorgclass = document.getElementById(varItemId).className;

var request;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  request=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  request=new ActiveXObject("Microsoft.XMLHTTP");
  }
request.open("POST","ajax.rate.item.php",true);
//request.onload= ReloadRating;
request.setRequestHeader('item',varItemId);
request.setRequestHeader('rating',varRate);
request.setRequestHeader('classes',varorgclass);
request.send();

4 个答案:

答案 0 :(得分:4)

$_POST['item'] == null上(在问题中提到的第一个内容中)出现警告,因为$_POST['item']不存在。

您可以通过以下方式阻止:

isset($_POST['item']) 

首先,或

array_key_exists('item', $_POST)

或....您为error_reporint() / E_WARNING停用E_NOTICE

推荐第一个解决方案。

答案 1 :(得分:0)

您的变量未设置,请尝试以下操作:

<?php
require_once("classes/include.all.php");

// Check that the data was sent
if (isset($_POST['item'], $_POST['rating'], $_POST['classes'])) {
if (sizeof($_POST) == 0
|| $_POST['item'] == null
|| strlen(trim($_POST['item'])) == 0
|| $_POST['rating'] == null
|| strlen(trim($_POST['rating'])) == 0
|| is_numeric($_POST['rating'])
|| $_POST['classes'] == null
|| strlen(trim($_POST['classes'])) == 0)
 {
    die("There was a problem");
  }


 echo Rating::RateItem($_POST['item'], $_POST['rating'], $_POST['classes']);
}
?>

答案 2 :(得分:0)

尝试使用!empty($_POST['item'])作为您的三个变量。

答案 3 :(得分:0)

如果未设置这些值,则javascript中存在问题,这可能是由于浏览器不兼容。由于你是新手,我强烈建议使用JQuery - 它易于使用,轻巧,便携。您可以使用Google的JQuery托管副本进行快速访问,这也是大多数人已经缓存​​的。

首先,将其包含在HTML / PHP文档的开头:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

然后,使用以下javascript代替您当前的“请求”设置:

$.ajax({
    url:"ajax.rate.item.php",
    type:"POST",
    data:{item:varItemId,rating:varRate,classes:varorgclass},
    success:function(result){
        alert(result);
    }
});