php - javascript无法从HTML输入标签分配隐藏的输入元素

标签 php javascript mysql ajax

我正在尝试从我拥有的表单中获取隐藏的输入值。除了 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') 

最佳答案

从一开始我就可以看出一些错误。

(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文件设置和三个它只是你必须添加的三个字符。我们不要偷懒。

希望这对您有所帮助。

关于php - javascript无法从HTML输入标签分配隐藏的输入元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690957/

相关文章:

php - MySql 如果记录存在于选择查询中

php - 是否应该在 MySQL 查询中引用用户输入的数字以帮助避免 SQL 注入(inject)攻击?

php - mySQL 升级后的问题

php - 插入一行,然后在一个查询中从该行中选择

php - .BAT 文件错误(语法)

php - $_POST 数组未由表单提交填充

php - 如何通过在 php mysql 中发布列名来搜索常量值?

javascript - 如何从 Promise 链转移到 async/await 多个 Promise?

javascript - ReactJS - ReactiveSearch - 建议选择的自定义事件

javascript - 从 .load() 加载时,.getScript() 不起作用