我试图从我拥有的表单中获取隐藏的输入值。表格适当地传递所有元素,除了HIDDEN元素。我知道他们被宣布是因为如果我选择"查看来源"在页面上它显示正确的值(基本上是用户凭据)。
<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')
答案 0 :(得分: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
属性。
要注意的几件事(以及我的一些小小的烦恼):
(1)指定表单属性的method
始终是个好主意。浏览器应该默认为GET
,但只是为了清楚任何可能跟随你的脚步的人,看到清晰度会很高兴。
(2)请不要使用PHP <?
短标签。其中一个不清楚,两个在PHP的所有安装中都不支持,因为它基于PHP .ini
文件设置而且还有三个,你只需添加三个字符。让我们不要懒惰。
希望这有帮助。
答案 1 :(得分:1)
答案 2 :(得分: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
,您应该通过。
答案 3 :(得分:0)
您需要在表单中添加“name”attr
<input type="hidden" name="userID" value="<?=$_SESSION['userID']?>" id="userID" />
<input type="hidden" name="email" value="<?=$_SESSION['email']?>" id="email" />
你有sql-injection,使用:
array_map('mysql_real_escape_string',$_POST);