[英]javascript unable to assign hidden input elements from HTML input tag
我試圖從我擁有的表單中獲取隱藏的輸入值。 該表單將正確傳遞除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)指定form屬性的method
總是一個好主意。 瀏覽器的默認值應為GET
但是對於任何可能跟隨您的人來說都是清晰的,很高興看到它清晰。
(2)請,請,請不要使用PHP <?
短標簽。 其中一個尚不清楚,第二個因為它基於PHP .ini
文件設置而不受所有PHP安裝的支持,另外三個.ini
需要添加三個字符。 我們不要成為懶惰的人。
希望這可以幫助。
<?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
,您應該會通過。
您需要在表單中添加“名稱”屬性
<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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.