【问题标题】:Post variables not being sent未发送发布变量
【发布时间】:2011-12-11 11:43:59
【问题描述】:

这真的让我很烦,我想不通。我有一个通过 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";
 }
 }

【问题讨论】:

  • &lt;form&gt; 方法属性中,post 必须小写。
  • 尝试使用var_dump($_POST); 获取其中内容的完整输出。
  • @TomvanderWoerdt 我试过小写,同样的问题。
  • @DCo 用你的 HTML 对我来说效果很好。j-li.net/test/test3.html
  • 是的-同意@jli-工作正常-也许您想检查functions.phpConnect()做了什么,谁知道某处有$_POST = array()之类的东西;)

标签: php variables post


【解决方案1】:

我刚刚在我的开发服务器上接管了你的代码,试图测试运行它。因为我不知道你的 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;

?>

【讨论】:

  • function Sanitize($String) { //Sanitizes data from MySQL injections $output = mysql_real_escape_string(stripslashes($String)); return $output; } 编辑:删除 sanitize 并不能解决问题。
  • 好的,尝试从 scripts/submit.php 中删除所有内容,以便在您的 submit.php 中显示的唯一内容如下:&lt;? var_dump($_POST); ?&gt; Is it ging anythign ?
  • 如果这就是全部,那么是的,它会传递变量。
  • 然后尝试从顶部每次插入一行,看看var_dump($_POST)何时为空。确保var_dump($_POST)始终放在最后一行
  • 让我向您展示脚本的其余部分 - 添加后,事情似乎变南了:$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&gt; 1 || $points&lt; -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 { } }
【解决方案2】:

根据您的评论,您有此代码:

$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');

也许您正在测试的东西以某种方式使$points 大于 1 或小于 -1,$count 为 1,并且$id_to$id_from 不同,然后使 else块执行和(尤其是行)header() 执行,用户立即重定向。

要检查这是否属实,请尝试var_dump($_GET) 看看你是否得到类似的东西:

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

如果您这样做了,并且数据库可能没有更新,那么您需要检查的是位于标题之前的 mysql_query。

希望这会有所帮助。

【讨论】:

  • 我遇到了类似的问题,并且重定向到同一页面是罪魁祸首。我正在重定向到 ?success=1 因此重定向后 _POST 为空。
猜你喜欢
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2017-07-27
  • 2021-03-20
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多