2011-01-19 6 views
1

私はPHPスクリプト内にフォームを用意しています。私はjavascriptを使用してバリデーションを行っています。JavaScriptフォームを呼び出すphp

<?php 

$con = mysql_connect("servername","login","passsword"); 
if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("dbadminatms", $con); 

if (isset($_POST['email']) && isset($_POST['name']) && isset($_POST['comments'])) 
{ 
    $sql="INSERT INTO feedback_comments (posted_by, email, comments_text, comment_date) 
     VALUES 
    ('$_POST[name]','$_POST[email]','$_POST[comments]',NOW())"; 
    $emailID = $_POST['email']; 
    $postedBy = $_POST['name']; 
    $message = $_POST['comments']; 

    if (!mysql_query($sql,$con)) 
    { 
     die('Error: ' . mysql_error()); 
    } 
    else 
    { 
     mail("[email protected]", "Subject: Comments", $message, "From: $emailID\r\n $postedBy"); 
    } 
} 
    else 
{ 

echo ' 


<form action="contactus.php" method="POST" id="feedback" onsubmit="javascript:return validate("feedback","name","email","comments");"> 

       <p id="errorMsg">All fields are required</p> 

       <label for="name" class="label" id="nameLabel">Your name: </label><input id="name" type="text" size="30" name="name" class="field"/> 
       <br /><br /> 
       <label for="email" class="label" id="emailLabel">Your Email id: </label><input id="email" type="text" size="30" name="email" class="field"/> 
       <br /><br /> 

        <label for="comments" class="label" id="commentsLabel">Comments:</label> 
        <div id="commentsSection"> 
        <textarea name="comments" id="comments" class="ui-corner-all" cols="9" rows="5" tabindex="140"></textarea> 
        </div> 

      <p><input type="submit" value="Submit" id="submit"/>&nbsp;<input type="reset" /></p> 

     </form>'; 
} 

    mysql_close($con); 
?> 

Everrythingはうまくいきますが、javascriptを使用してフォームを検証できません。

+1

それはjavascriptのフォームのPHPを呼び出すだけで、HTMLからすることは不可能です。あなたはまずそれを理解しなければならない –

答えて

7

関連の抜粋は以下のとおりです。

onsubmit="javascript:return validate("feedback","name","email","comments");" 

2つのこと:

  1. 属性内に二重引用符の使用は無効である、ブラウザだけonsubmit="javascript:return validate("が表示されます(途中でそれを終了しますと、 JavaScriptインタプリタによって投げられる)。属性値内代わりに単一引用符を使用します。

    onsubmit="javascript:return validate('feedback','name','email','comments');" 
    
  2. あなたが実際に直接、または外部のJavaScriptをファイル経由で、どこかのページに含まれているvalidateと呼ばれるJavaScript関数を持っていますか?

は別に、あなたがonsubmitを使用している場合、あなただけの、冒頭でjavascript:を使用していないことに注意してください。

onsubmit="return validate('feedback','name','email','comments');" 

をHTMLが通常含まれますどこjavascript:擬似プロトコルのみが使用されていますアンカーのhref属性のようにonsubmitとそれに類するものはリンクを受け付けません。ただJavaScriptコードなので、使用しないでください。オフトピック


(。。それはあなたがしなければ偶然、それはJavaScriptでラベルのように見え、そのためのコードは大丈夫解析し、実行します。しかし、それは間違っているので、大部分は無害だ)、しかし重要なNEVERはクライアント側の検証に依存します。クライアント側の検証はで、ユーザーエクスペリエンス向上の練習(あなたが受け入れるものを送信するのを手助けする)、はサーバー側の検証の代わりになります。引用されたPHPコードは、SQLインジェクションに対して広く開いています(例えば、'がフィールドの1つにある場合はどうなりますか?  —)。 「SQL Injection PHP」を検索して、提出されたデータを正しく処理する方法をたくさん見つけてください。

+0

ありがとう。しかし、私のechoステートメントは二重引用符で囲んだ一重引用符とonsubmit属性になっています。では、検証関数のパラメータに引用符を使用する方法を説明します。 – rdp

+0

@dilip:バックスラッシュを使用してPHPで単一引用符をエスケープすることができます。http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single –

0

あなたはjavascriptinをonSubmitを指定する必要はありません。

onsubmit="javascript:return validate("feedback","name","email","comments")" 

ではなく、これを実行します。

onsubmit="return validate("feedback","name","email","comments")" 

をし、私はあなたが文字列を適切なエスケープcharatersを入れている願っています。代わりにこれを使用します。

onsubmit="return validate(\"feedback\",\"name\",\"email\",\"comments\")" 
2

プラス、あなたの入力をサニタイズしなければならないことをお勧め状態、JSの検証にのみ依存していないが、また、それをサーバーサイドを行い、そして決してEVER EEEEEEVERあなたに直接[「何」] $ _POSTを使用しませんクエリ、その危険な危険な、入力を処理し、xss、そして主にSQLインジェクションから自分自身を保存しようとする。

0

jqueryを使用する方が優れています。

jQuery plugin: Validation

+2

これをコメントとして投稿してください。質問に対する回答ではありません(評判50点のコメントを残すことができます) – codea

+2

JavaScriptの質問にjQueryの回答を投稿しないでください。 –

+1

ところで、JQueryの検証はそれほど良くはありません.JavaScriptを使用したプラグインです。あなたは、プレーンなJavaScriptを使って、同じことをすることができます。 – codea

関連する問題