为什么我看到这个错误消息“(!)注意:未定义的索引:在第6行的D:\ wamp \ www \ poll \ poll.php中查询”当我尝试轮询时ajax中..我有两个文件
1- index.html包含获取请求
2- poll.php文件选择请求并显示结果
的index.html
<!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" dir="ltr" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>AJAX Poll Using jQuery and PHP</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
<script type="text/javascript" src="js/jquery-1.3.2.js" ></script>
<script type="text/javascript" >
$(function(){
var loader=$('#loader');
var pollcontainer=$('#pollcontainer');
loader.fadeIn();
//Load the poll form
$.get('poll.php', '', function(data, status){
pollcontainer.html(data);
animateResults(pollcontainer);
pollcontainer.find('#viewresult').click(function(){
//if user wants to see result
loader.fadeIn();
$.get('poll.php', 'result=1', function(data,status){
pollcontainer.fadeOut(1000, function(){
$(this).html(data);
animateResults(this);
});
loader.fadeOut();
});
//prevent default behavior
return false;
}).end()
.find('#pollform').submit(function(){
var selected_val=$(this).find('input[name=poll]:checked').val();
if(selected_val!=''){
//post data only if a value is selected
loader.fadeIn();
$.post('poll.php', $(this).serialize(), function(data, status){
$('#formcontainer').fadeOut(100, function(){
$(this).html(data);
animateResults(this);
loader.fadeOut();
});
});
}
//prevent form default behavior
return false;
});
loader.fadeOut();
});
function animateResults(data){
$(data).find('.bar').hide().end().fadeIn('slow', function(){
$(this).find('.bar').each(function(){
var bar_width=$(this).css('width');
$(this).css('width', '0').animate({ width: bar_width }, 1000);
});
});
}
});
</script>
</head>
<body>
<div id="container" >
<h1>User Poll</h1>
<div id="pollcontainer" >
</div>
<p id="loader" >Loading...</p>
</div>
</body>
</html>
poll.php
<?php
//Update database information according to your server settings
$conn=mysql_connect('localhost', 'root', '') or die("Can't connect to mysql host");
//Select the database to use
mysql_select_db('ahmed') or die("Can't connect to DB");
if(!$_POST['poll'] || !$_POST['pollid']){
$query=mysql_query("SELECT id, ques FROM questions ORDER BY id DESC LIMIT 1");
while($row=mysql_fetch_assoc($query)){
//display question
echo "<p class=\"pollques\" >".$row['ques']."</p>";
$poll_id=$row['id'];
}
if($_GET["result"]==1 || $_COOKIE["voted".$poll_id]=='yes'){
//if already voted or asked for result
showresults($poll_id);
exit;
}
else{
//display options with radio buttons
$query=mysql_query("SELECT id, value FROM options WHERE ques_id=$poll_id");
if(mysql_num_rows($query)){
echo '<div id="formcontainer" ><form method="post" id="pollform" action="'.$_SERVER['PHP_SELF'].'" >';
echo '<input type="hidden" name="pollid" value="'.$poll_id.'" />';
while($row=mysql_fetch_assoc($query)){
echo '<p><input type="radio" name="poll" value="'.$row['id'].'" id="option-'.$row['id'].'" />
<label for="option-'.$row['id'].'" >'.$row['value'].'</label></p>';
}
echo '<p><input type="submit" value="Submit" /></p></form>';
echo '<p><a href="'.$_SERVER['PHP_SELF'].'?result=1" id="viewresult">View result</a></p></div>';
}
}
}
else{
if($_COOKIE["voted".$_POST['pollid']]!='yes'){
//Check if selected option value is there in database?
$query=mysql_query("SELECT * FROM options WHERE id='".intval($_POST["poll"])."'");
if(mysql_num_rows($query)){
$query="INSERT INTO votes(option_id, voted_on, ip) VALUES('".$_POST["poll"]."', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."')";
if(mysql_query($query))
{
//Vote added to database
setcookie("voted".$_POST['pollid'], 'yes', time()+86400*300);
}
else
echo "There was some error processing the query: ".mysql_error();
}
}
showresults(intval($_POST['pollid']));
}
function showresults($poll_id){
global $conn;
$query=mysql_query("SELECT COUNT(*) as totalvotes FROM votes WHERE option_id IN(SELECT id FROM options WHERE ques_id='$poll_id')");
while($row=mysql_fetch_assoc($query))
$total=$row['totalvotes'];
$query=mysql_query("SELECT options.id, options.value, COUNT(*) as votes FROM votes, options WHERE votes.option_id=options.id AND votes.option_id IN(SELECT id FROM options WHERE ques_id='$poll_id') GROUP BY votes.option_id");
while($row=mysql_fetch_assoc($query)){
$percent=round(($row['votes']*100)/$total);
echo '<div class="option" ><p>'.$row['value'].' (<em>'.$percent.'%, '.$row['votes'].' votes</em>)</p>';
echo '<div class="bar ';
if($_POST['poll']==$row['id']) echo ' yourvote';
echo '" style="width: '.$percent.'%; " ></div></div>';
}
echo '<p>Total Votes: '.$total.'</p>';
}
答案 0 :(得分:1)
更改poll.php
的第6行:
if(!$_POST['poll'] || !$_POST['pollid']){
为:
if(!isset($_POST['poll']) || !isset($_POST['pollid'])){
如上所述,它假设存在$_POST['poll']
,并且其值为null
,false
或0
。在值根本不存在的情况下,您看到的错误就是结果。解决方案是使用isset()
确认变量已完全设置。
另外,改变第15行:
if($_GET["result"]==1 || $_COOKIE["voted".$poll_id]=='yes'){
到
if((isset($_GET["result"]) && $_GET["result"] == 1) || (isset($_COOKIE["voted" .$poll_id]) && $_COOKIE["voted" . $poll_id] == 'yes')){
同样,正如所写的那样,它假定存在$_GET['result']
,并且其值为1
。在值根本不存在的情况下,您看到的错误就是结果。解决方案是再次首先确认已使用isset()
设置变量,然后检查其值。
答案 1 :(得分:0)
你应该改变:
if(!$_POST['poll'] || !$_POST['pollid']){
到
if(!isset($_POST['poll']) || !isset($_POST['pollid'])){
答案 2 :(得分:0)
当您的页面向poll.php发送没有请求数据的GET请求时,它会点击第6行并尝试评估$ _POST ['poll']。除非此时$ _POST数组中没有'poll'键,因此您会收到该错误。 在尝试评估数组键之前,使用isset()来测试数组键是否存在。如果你想测试一个键的存在,并且它被设置为评估为true
的东西,那么你可以写:
if(isset($_POST['poll']) && $_POST['poll']){
/*...code...*/
}
在&&
之后评估$ _POST ['poll']是可以的,因为它会停止评估isset()是否返回false。
另外,我注意到,至少在一种情况下,您将$ _POST数据直接放入mysql查询中。 Don't do that。
这种处理很常见,我使用支持功能让它无忧无虑;它做了三件事:1)返回null
没有通知/错误,如果键不存在2)转义字符串以防止SQL注入,如果值存在3)做一些可选类型转换,这是很好的布尔等。然后我可以用这种模式写:
$poll_id = $Input->get('poll_id', Input::INT);
if($poll_id) { /* do stuff */ }