0

私が持っているフォームから非表示の入力値を取得しようとしています。フォームは、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') 
4

4 に答える 4

3

最初から間違っていることがいくつかあります。

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

私はこれがあるべきだと思います<input type="text" name="endDate" id="endDate" />

name(2) 入力には属性がありません。id属性は、スタイリングと値の収集に適しています。ただし、name送信を実行するフォームによって認識されるのは属性のみです。

method(3)フォームに属性がありません。デフォルトでは、ブラウザはGET. ただし、期待していPOSTます。を代わりにPHP使用するように変更するか、(より適切なオプション) フォームに属性を指定します。$_GET$_POSTmethod

気をつけなければならないことがいくつかあります(そして私のいくつかのペットのおしっこ):

method(1) form 属性のを指定することは常に良い考えです。ブラウザはデフォルトで に設定されているはずですGETが、あなたの足跡をたどっている可能性のある人にわかりやすくするために、わかりやすくすることをお勧めします。

<?(2) PHP の短いタグは使用しないでください。1 つは明確ではありません。2 つは PHP ファイルの設定に基づいているため、PHP のすべてのインストールでサポートされているわけではありません.ini。3 つは追加する必要がある 3 つの文字だけです。怠け者にならないようにしましょう。

お役に立てれば。

于 2013-02-04T16:44:01.947 に答える
1
  1. そのSQL文字列を自分で作成しないでください。準備されたステートメントを使用してください。セキュリティのためには良いでしょう;)
  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-injection がある場合は、次を使用します。

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