簡體   English   中英

javascript無法從HTML輸入標簽分配隱藏的輸入元素

[英]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需要添加三個字符。 我們不要成為懶惰的人。

希望這可以幫助。

  1. 不要自己構建該sql-string,請使用准備好的語句,這對於您的安全性會更好;)
  2. 對於兼容性原因,最好將庫用於ajax(例如jquery)
 <?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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM