1

以下のコードはキャンペーンを作成するためのものです。作成する前に、フォームを検証する必要があります。データベースにすでに存在するキャンペーン名を検証する必要があります。javascript内でPHPコードを使用できるかどうかはわかりません(以下のように)。とにかく、それは機能していません。コードを変更するにはどうすればよいですか?データベース値を使用して値を検証するにはどうすればよいですか?

$ this-> campaignは、データベースからのすべてのキャンペーンの詳細を含む配列です。

<script type="text/JavaScript">
function validate()
{
var name = document.getElementById('name').value;
var shape = document.getElementById('shape').value;
     <?
     foreach($this->campaign as $c)
     {
     $old_cname=$c['name'];
     ?>
        if(name==<?=$old_cname;?>)
        {
            alert("same name exists in database. Try again!");
        }
    <?
    }
    ?>

if(!name)
{
    alert("Please enter a name!");

    return false;
}

if(!shape)
{
    alert("Please select shape!");
    return false;
}
    return true;


}
</script>


<form action="create.php" method="post" onsubmit="return(validate());">
Name:
<input type="text" name="name" id="name"/>
Shape:
<select name="shape" id="shape">
<option value="long">Long</option>
<option value="tall">Tall</option>
</select>
<input type="submit" value="Create" name="submit"/>
</form>

ありがとう!

4

2 に答える 2

3

このようにphpとjavascriptを混在させることはできません。phpはサーバー側の言語ですが、javascriptはクライアント側です。phpはユーザーに表示される前にページをレンダリングしますが、javascriptはページを更新せずに変更します。js内のすべてのphp値は、jsが実行される前にレンダリングおよび出力されます。

必要なことを行うには、非同期のjavascriptとxmlであるajaxを使用する必要があります。これは、実行したいことを可能にするクライアント/サーバー通信の方法です。

これを行うには、このようなリクエストを非常に簡単にするjavascriptライブラリであるjQueryをお勧めします。jqueryでそのようなリクエストを行う方法の例として...

jQuery.ajax()方法:

$.ajax({
    url: "validate.php",
    type: "POST",
    data: "username=" + username,
    sucesss: function(data) {
        if (data == 1)
            $("#ajax_div").html("Username is taken, choose another!");
        }
        else {
            $("#ajax_div").html("Username is free :)");
        }
    }
});

これはajaxで行う方法ですが、phpファイルはデータベース内のユーザー名を比較するSQLクエリの結果に応じて1または0を返します。

jqueryなしでこれを行うには、次のようになります。

function checkUsername() {
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {
            if (xmlhttp.responseText == 1) {
                document.getElementById('ajax_div').innerHTML = "Username is taken, please choose another!";
            }
            else {
                document.getElementById('ajax_div').innerHTML = "Username is free :)";
            }
        }
    }
    xmlhttp.open("POST","validate.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("username=" + username);
    }
}
于 2012-07-31T01:31:53.833 に答える
1

phpスクリプトを使用して検証するには、jqueryを使用する必要があります。これを行う最良の方法は、すべてのフィールドが確認されるまで送信ボタンを無効にすることです。これには、キーストロークをリッスンしてからjquery呼び出しを行って入力フィールドを検証する必要があります。以下の簡単な例

script.js

var typingTimer;                //timer identifier
var doneTypingInterval = 5000;  //time in ms, 5 second for example

//on keyup, start the countdown
$('#myInput').keyup(function(){
    typingTimer = setTimeout(doneTyping, doneTypingInterval);
});

//on keydown, clear the countdown 
$('#myInput').keydown(function(){
    clearTimeout(typingTimer);
});

//user is "finished typing," do something
function doneTyping () {
  $.ajax({
      type: "POST",
      url: 'ajax/validate.php',
      data: 'cname='+$('#name').val(),
      success: function(data) {
         if(data == "original"))
           //enable the submit button
         else
          //Update your div that contains the results
      }
  });
}

ajax/validate.php

<?PHP
   //Run your validations here
?>
于 2012-07-31T01:47:02.793 に答える