1

こんにちは。この投稿を読んで回答してくれるすべての人に感謝します。まず第一に、これがすでに回答されている場合は非常に申し訳ありませんが、ウェブ全体で12時間ほどこれに対する回答を探していますが、何もうまくいきませんでした. 私の問題は次のとおりです。フォーム、スクリプト、およびphp部分があります。Webページには多くのフォームページがあるため、検証に必要なデータをフィールドから直接取得できるようにスクリプトを作成しようとしました。したがって、関数には引数があります。現在、送信ボタンは非表示になっており、最後のフィールドの後にEnterを使用してフォームを自動的に送信しています。javascript が機能しても (空のフィールドの周囲に赤い境界線が作成されます)、Enter キーを押すと、フォームは引き続き php を介して送信されます。私の初心者では、スクリプトがtrueまたはfalseを返さないか、onSubmitにエラーがあるため、trueまたはfalseが渡されないことが問題だと思います。私は以下のコードを投稿しています。どうもありがとう、もう一度!

フォーム部分の場合:

        <form action="addUser.php" method="post" name="login" onsubmit="return checkField()">

          <table border="0" cellpadding="0" cellspacing="0" class="addUser">
            <tr>
              <td><p class="capRegister">Date de utilizator</p></td>
              <td><p class="capRegister">Date de identificare</p></td>
            </tr>
            <tr>
              <td><input class="input1" name="user" type="text" placeholder="alege-ti un nume de utilizator" tabindex="1" onblur="checkField(name)" value="<?php echo $user; ?>"/></td>
              <td><input class="input1" name="nume" type="text" placeholder="numele tau" tabindex="4" onblur="checkField(name)" value="<?php echo $nume ?>" /></td>
            </tr>
            <tr>
              <td><input class="input1" name="password" type="password" placeholder="alege-ti o parola" tabindex="2" onblur="checkField(name)" /></td>
              <td><input class="input1" name="prenume" type="text" placeholder="prenumele tau" tabindex="5" onblur="checkField(name)" value="<?php echo $prenume; ?>"/></td>
            </tr>
            <tr>
              <td><input class="input1" name="confirma" type="password" placeholder="confirma parola" tabindex="3" onblur="checkField(name)" /></td>
              <td><input class="input1" name="interior" type="tel" placeholder="interior" tabindex="6" onblur="checkField(name)" value="<?php echo $interior ?>"/></td>
            </tr>
            <tr>
              <td>&nbsp;</td>
              <td><input class="input1" name="mobil" type="tel" placeholder="mobil" tabindex="7" onblur="checkField(name)" value="<?php echo $mobil; ?>"/></td>
            </tr>
          </table>
          <p><input class="submitButton" name="login2" type="submit" value="" /></p>

  </form>

スクリプト部分は次のとおりです。

function checkField(x) {

//initializeaza o variabila care pe baza argumentului functiei verifica campurile dupa nume (argumentul contine numele campului)
var continutCamp=document.getElementsByName(x)[0].value;
//variabila pentru footer
var msgJos;
//variabila pentru parola
var tempParola=document.getElementsByName('password')[0].value; 

msgJos="";
document.getElementById('bottomBar').innerHTML=msgJos;
document.getElementsByName(x)[0].style.borderStyle='none';

//verifica daca campul este gol     
if (continutCamp==null || continutCamp=="")
    {   
    // inconjoara cu o margine rosie eroarea
    document.getElementsByName(x)[0].style.borderColor='#FF0000';
    document.getElementsByName(x)[0].style.borderStyle='solid';
    document.getElementsByName(x)[0].style.borderRadius='4px';

    // scrie un mesaj in campul de jos

    msgJos='<p id="footerInfo">nu ai completat campul '+ x +'</p>';
    document.getElementById('bottomBar').innerHTML=msgJos;

    //return false pentru a impiedica procesarea formularului
    return false;

    }

        //daca nu se potriveste parola cu confirmarea
if((name=="confirma")&&(continutCamp!=tempParola))
{
    //coloreaza ambele campuri de parola si confirmare cu rosu
    document.getElementsByName('confirma')[0].style.borderColor='#FF0000';
    document.getElementsByName('confirma')[0].style.borderStyle='solid';
    document.getElementsByName('confirma')[0].style.borderRadius='4px';
    document.getElementsByName('password')[0].style.borderColor='#FF0000';
    document.getElementsByName('password')[0].style.borderStyle='solid';
    document.getElementsByName('password')[0].style.borderRadius='4px';

    //cod ca sa schimbe continutul footerului cu mesajul potrivit
    msgJos='<p id="footerInfo">parolele nu se potrivesc</p>';
    document.getElementById('bottomBar').innerHTML=msgJos;

    //din nou return false ca sa nu se proceseze formularul daca parola nu e aceeasi
return false;
}


}

そして最後にphp部分:

<?php
require_once("localVars.php");

$footerError;

if(isset($_POST['user']))
{

// $dbc=mysqli_connect(USER,PASS,BAZA) or die ('<p id="footerInfo"> Eroare in timp ce ma conectam </p>');

$user=$_POST['user'];
$parola=$_POST['password'];
$nume=$_POST['nume'];
$prenume=$_POST['prenume'];
$interior=$_POST['interior'];
$mobil=$_POST['mobil'];

$query="INSERT INTO users (user, parola, nume, prenume, interior, mobil) VALUES ('$user','$parola','$nume','$prenume','$interior','$mobil')"; 

// $result=mysqli_query($dbc, $query) or die ('<p id="footerInfo"> Eroare in timp ce bagam datele </p>');

mysqli_close($dbc); 
}

else{

    $footerError='nu sunt date de introdus';
}

?>

php には、データベースに 10 億回の試行を送信しないようにするためのコメントがあります。$_POST はユーザーをチェックしますが、以前に送信または他のフィールド名をチェックしました。

4

2 に答える 2

1

関数checkField(x)は変数 'x' を期待していますが、onSubmit リスナーには " return checkField()" しかなく、期待される変数がありません。これは JavaScript エラーであり、フォームを評価して true/false を返すことができないため、フォームが送信されます。

まだ持っていない場合は、firebug (getfirebug.com) をダウンロードしてブラウザにインストールすると、これらの種類の JavaScript エラーのデバッグが非常に簡単になります。

于 2013-02-16T22:09:12.913 に答える
0

あなたの主な問題は、そのような変数がないときにグローバル変数'name'を使用していることであるように思われます。したがって、onblurイベントは関数を正しく呼び出しません。 nameと同義ではありませんthis。イベントが発生している要素の名前を取得する場合は、代わりにnamethis.nameに置き換える必要があります。

<input class="input1" name="password" type="password" placeholder="alege-ti o parola" tabindex="2" onblur="checkField(this.name)" />

アップデート:

もう1つの問題は、name変数が存在しない状態で、変数をもう一度チェックすることです。nameここに置き換えxます:

if((name=="confirma")&&(continutCamp!=tempParola))

だからそれは

if((x=="confirma")&&(continutCamp!=tempParola))

それはそれであるはずです、私はこの答えを編集する前に私の側でそれをテストしました。

于 2013-02-16T22:19:21.197 に答える