JavaScript 应该返回 false,表单仍然有效,PHP 在表中插入数据


javascript should return false, form still validates and php inserts data in table

您好,非常感谢所有将阅读和回答这篇文章的人。首先,如果这已经得到回答,我非常抱歉,但我正在寻找整个网络上大约 12 小时的答案,但我发现什么都没有解决。所以我的问题如下:我有一个表单,一个脚本和一个php部分。 由于网页将有许多表单页面,我尝试编写脚本,以便直接从字段中获取验证所需的数据。因此该函数有一个参数。现在,"提交"按钮处于隐藏状态,我在最后一个字段之后使用 Enter 自动提交表单。即使 JavaScript 有效(它在空字段周围创建一个红色边框(,当我按 Enter 表单时,仍然通过 PHP 提交。在我的菜鸟中,我认为问题是脚本没有返回真或假,或者 onSubmit 有错误,因此它没有传递真假。我正在下面发布代码。再次非常感谢!

对于表单部分:

        <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 对此有注释,以便不发送数据库中的十亿次尝试。 $_POST 检查用户,但它之前确实检查了提交或任何其他字段名称。

你的函数checkField(x)期待一个变量'x',但你的onSubmit侦听器只有"return checkField()",它缺少预期的变量。 这是一个 javascript 错误,由于它无法计算并向表单返回 true/false,因此表单被提交。

如果您还没有它,请下载firebug(getfirebug.com(并将其安装在浏览器中,这将使调试这些类型的javascript错误变得非常容易。

您的主要问题似乎是在没有此类变量的情况下使用全局变量"name"。 因此,您的 onblur 事件无法正确调用该函数。 name不是this的代名词。 如果要获取触发事件的元素的名称,则必须将name替换为this.name

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

更新:

另一个问题是,您再次检查变量name,而该变量不存在。 在此处将name替换为x

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

所以它看起来像

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

应该就是这样,在编辑这个答案之前,我对其进行了测试。