2011-12-10 119 views
1

这实在是在烦扰我,我无法弄清楚。我有几个选项的形式通过POST发送:帖子变量未被发送

<form method="POST" action="scripts/submit.php"><strong> 
    To User: <input type="text" name="ID" size="21" /><br /> 
    Short Description: <input type="text" name="Item" size="21" /><br /> 
    Link: <input type="text" name="Link" size="21" /><br /> 
    Points: <select name="Points"> 
    <option value="1" selected="selected">1</option> 
    <option value="0">0</option><option value="-1">-1</option> 
    </select> (1 = Positive, 0 = Neutral, -1 = Negative)<br /> 
    Text: <br /><textarea name="Text" rows="5" cols="50"/></textarea></strong><br /> 
    <input type="submit" value="Send" /> 
</form> 

这里是submit.php是给我找麻烦的部分:

<?php 
include('functions.php'); 
Connect(); 

if(!isset($_SESSION)) 
{ 
session_start(); 
} 
$id_from = $_SESSION['SESS_MEMBER_ID']; 
$id_to = Sanitize($_POST['ID']); 
$item = Sanitize($_POST['Item']); 
$link = Sanitize($_POST['Link']); 
$points= Sanitize($_POST['points']); 
$text = Sanitize($_POST['Text']); 

有谁看到这里的问题吗?我从除了会话之外的所有变量中获取未定义的索引。

在此先感谢。

编辑:如果我只有这个:

<?php 
include('functions.php'); 
Connect(); 
if(!isset($_SESSION)) 
{ 
session_start(); 
} 

$id_from = $_SESSION['SESS_MEMBER_ID']; 
$id_to = Sanitize($_POST['ID']); 
$item = Sanitize($_POST['Item']); 
$link = Sanitize($_POST['Link']); 
$points = Sanitize($_POST['points']); 
$text = Sanitize($_POST['Text']); 

?> 

变量填充就好了。如果我添加:

$id_query=mysql_query("SELECT ID FROM tbl_users WHERE Username = '$id_to'"); 

$count=mysql_num_rows($id_query); 

$id_row=mysql_fetch_array($id_query); 
$id_to=$id_row['ID']; 

if ($points> 1 || $points< -1) { 
    echo "Nice try"; 
    exit(); 
} else { 

if(!($id_to == $id_from)) 
{ 
if($count==1) 
{ 
mysql_query("INSERT INTO tbl_data (Item, Link, Points, Text, ID_To, ID_From) VALUES ('$item', '$link', '$points', '$text', '$id_to','$id_from')"); 
header('Location:?id=submit'); 
} 
else 
{ 
echo "Nice try1"; 
} 
} 
else 
{ 
echo "Nice try2"; 
} 
} 
+0

在'

'方法属性中,'post'必须小写。 –

+1

尝试执行'var_dump($ _ POST);'以获取其中的内容的完整输出。 – jli

+0

@TomvanderWoerdt我试过它小写,同样的问题。 – DCo

回答

0

我只是把你的代码放在我的开发服务器上,试图测试运行它。由于我不知道你的Sanitize()做了什么,我不能确定这个函数里面发生了什么。

如果您尝试删除Sanitize(),我很确定它会工作,您将不得不在里面找到这个错误。

我猜你可能会缺少像($ var,str)的东西来清理字符串。你能否介绍一下这个功能?

编辑:一些小的拼写错误。

编辑:做了一些更多的测试,并使错误发生,两个代码显示它。第一件作品,第二件作品给我一个空的var_dump。

这一个给了我一个完整的var_dump();

<? 
function Sanitize($String) { 
$output = mysql_real_escape_string(stripslashes($String)); 
return $output; 
} 
if(!isset($_SESSION)) 
{ 
session_start(); 
} 
?> 
<form method="post" action=""><strong> 
To User: <input type="text" name="ID" size="21" /><br /> 
Short Description: <input type="text" name="Item" size="21" /><br /> 
Link: <input type="text" name="Link" size="21" /><br /> 
Points: <select name="Points"><option value="1" selected="selected">1</option><option value="0">0</option><option value="-1">-1</option></select> (1 = Positive, 0 = Neutral, -1 = Negative)<br /> 
Text: <br /><textarea name="Text" rows="5" cols="50"/></textarea></strong><br /> 
<input type="submit" value="Send" /> 
</form> 

<? 

$id_from = $_SESSION['SESS_MEMBER_ID']; 
$id_to = Sanitize($_POST['ID']); 
$item = Sanitize($_POST['Item']); 
$link = Sanitize($_POST['Link']); 
$points= Sanitize($_POST['points']); 
$text = Sanitize($_POST['Text']); 


var_dump($_POST); 

echo $text; 

?> 

这一次给我一个空的var_dump

<? 
if(!isset($_SESSION)) 
{ 
session_start(); 
} 
?> 
<form method="post" action=""><strong> 
To User: <input type="text" name="ID" size="21" /><br /> 
Short Description: <input type="text" name="Item" size="21" /><br /> 
Link: <input type="text" name="Link" size="21" /><br /> 
Points: <select name="Points"><option value="1" selected="selected">1</option><option value="0">0</option><option value="-1">-1</option></select> (1 = Positive, 0 = Neutral, -1 = Negative)<br /> 
Text: <br /><textarea name="Text" rows="5" cols="50"/></textarea></strong><br /> 
<input type="submit" value="Send" /> 
</form> 

<? 

$id_from = $_SESSION['SESS_MEMBER_ID']; 
$id_to = Sanitize($_POST['ID']); 
$item = Sanitize($_POST['Item']); 
$link = Sanitize($_POST['Link']); 
$points= Sanitize($_POST['points']); 
$text = Sanitize($_POST['Text']); 


var_dump($_POST); 

echo $text; 

?> 
+0

'功能Sanitize($字符串){//净化数据从MySQL注射 \t $ output = mysql_real_escape_string(stripslashes($ String)); \t return $ output; }' 编辑:删除清理不能解决问题。 – DCo

+0

好吧,请尝试从scripts/submit.php中删除eveything,以便在submit.php中显示的唯一内容如下: '<?后续代码var_dump($ _ POST); ?>' 它是否是任意的? –

+0

如果那是全部,那么是的,它会传递变量。 – DCo

0

根据您的评论,你有这样的代码:

$id_query = mysql_query("SELECT ID FROM tbl_users WHERE Username = '$id_to'"); 
$count = mysql_num_rows($id_query); 
$id_row = mysql_fetch_array($id_query); 
$id_to = $id_row['ID']; 
if ($points > 1 || $points < -1) { 

} else { 
    if (! ($id_to == $id_from)) { 
     if ($count == 1) { 
      mysql_query("INSERT INTO tbl_data (Item, Link) VALUES ('$item', '$link')"); 
      header('Location:?id=submit'); 
     } else {} 
    } else {} 
} 

我认为这个问题是在这行:

header('Location:?id=submit'); 

Perhap你正在测试的东西,不知何故使$points大于1或小于-1,$count是1,$id_to是不同于$id_from,然后使else块执行和(特别是行)header()执行,并且用户立即得到重定向。

要检查,如果这是真的,尽量var_dump($_GET)看,如果你有这样的:

array (size=1) 
    'id' => string 'submit' (length=6) 

如果你这样做,也许是数据库没有更新,那么它的,之前坐在右边的mysql_query标题是你需要检查的标题。

希望这会有所帮助。