0

我正在尝试从我拥有的表单中获取隐藏的输入值。表单正确传递所有元素,除了隐藏元素。我知道它们已被声明,因为如果我在页面上选择“查看源代码”,它会向我显示正确的值(基本上是用户凭据)。

<form name="addExperienceForm" id="addExperienceForm" style="display:none;">
                Title:<input type="text" name="title" id="title" />
                From:<input type="text" name="startDate" id="startDate" />
                To:<input type="text" name="endDate" id="endDate" />
                Description:<textarea type="message" name="description" id="description"></textarea>
                <input type="button" value="Submit" onclick="addUserExp()"/>
                <input type="hidden" value="<?=$_SESSION['userID']?>" id="userID" />
                <input type="hidden" value="<?=$_SESSION['email']?>" id="email" />

function addUserExp(){

    //get info
    var title = document.getElementById('title').value;
    var startDate = document.getElementById('startDate').value;
    var endDate = document.getElementById('endDate').value;
    var userID = document.getElementById('userID').value;
    var email = document.getElementById('email').value;
    var description = document.getElementById('description').value;

    //construct POST string with name value pair
    var str = "title="+title+"start="+startDate+"end="+endDate+"userID="+userID+"email="+email+"desc="+description;

    //establish XMLHTTP object
    var req = getXMLHTTP();

    if(req){

        req.onreadystatechange = function(){
            if (req.readyState == 4) {
                // only if "OK"
                if (req.status == 200) {                        
                    document.getElementById('addNewExp').innerHTML=req.responseText;    


                } else {
                    alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                }
            }
        }
    }
    req.open("post", "addExperience.php", true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send(str);
}

PHP

   <?php


$title = $_POST['title'];
$startDate = $_POST['start'];
$endDate = $_POST['end'];
$userID = $_POST['userID'];
$email = $_POST['email'];
$description = $_POST['desc'];

$sql = "INSERT INTO `user_experience`(`user_id`, `email`, `experience_title`, `experience_desc`, `start_date`, `end_date`) 
            VALUES ('$userID', '$email', '$title', '$startDate', '$endDate', '$description')";

echo $sql;

?>

我正在回显 MYSQL 语句,因此您可以看到这些字段没有被填充。当数据输入到表单中时,上面的输出会产生以下结果:

INSERT INTO `user_experience`(`user_id`, `email`, `experience_title`, `experience_desc`, `start_date`, `end_date`) VALUES ('', '', 'test', 'Feb-2013', 'May-2013', 'test') 
4

4 回答 4

3

从一开始我就可以看出一些事情是错误的。

(1)<type="text" name="endDate" id="endDate" />

我猜这应该是<input type="text" name="endDate" id="endDate" />

(2) 您的输入没有name属性。id属性非常适合样式化和收集值。但是,name进行提交的表单只能识别属性。

(3) 您的表单上没有method属性。默认情况下,浏览器将使用GET. 但是,您正在期待POST. 要么更改PHP使用$_GET$_POST要么(更好的选择)为表单提供method属性。

需要注意的几件事(以及我的一些烦恼):

method(1) 指定form 属性总是一个好主意。浏览器应该默认设置,GET但只是为了让任何可能跟随您脚步的人清楚,很高兴看到清晰。

(2) 请,请,请不要使用 PHP<?短标签。一是不清楚,二不是所有的 PHP 安装都支持它,因为它基于 PHP.ini文件设置,三是您必须添加另外三个字符。我们不要成为懒惰的人。

希望这可以帮助。

于 2013-02-04T16:44:01.947 回答
1
  1. 不要自己构建那个 sql-string,请使用准备好的语句,这对您的安全性会更好;)
  2. 出于兼容性原因,最好使用 ajax 库(如 jquery)
于 2013-02-04T16:30:59.773 回答
0
 <?php


$title = $_POST['title'];
$startDate = $_POST['start'];
$endDate = $_POST['end'];
$userID = $_POST['userID'];
$email = $_POST['email'];
$description = $_POST['desc'];

$sql = "INSERT INTO `user_experience`(`user_id`, `email`, `experience_title`, `experience_desc`, `start_date`, `end_date`) 
            VALUES ('$userID', '$email', '$title', '$startDate', '$endDate', '$description')";

echo $sql;

?>

全部更改$_POST$_GET,您应该通过。

于 2013-02-04T16:28:05.433 回答
0

您需要在表单中添加“名称”属性

<input type="hidden" name="userID" value="<?=$_SESSION['userID']?>" id="userID" />
<input type="hidden" name="email" value="<?=$_SESSION['email']?>" id="email" />

你有sql注入,使用:

array_map('mysql_real_escape_string',$_POST);
于 2013-02-04T16:29:39.630 回答