2

我是 PHP 和 JavaScript 的新手。我想验证表单,如果表单输入字段正确,则将其发送到 php 外部脚本。我试过这样的事情:

<head>
<script type="text/javascript">
  function Validate(){
    var x=document.forms["form"]["firstname"].value;
    var y=document.forms["form"]["lastname"].value;
    var z=document.forms["form"]["age"].value;
    if(x==null || x=="") {
      alert("Input name!");
    } else if(y==null || y=="") {
      alert("Input surname!");
    } else if(z==null || z=="") {
      alert("Input age!");
    } else {
  // IS IT POSSIBLE TO SEND FORM HERE FORM VARIABLES TO PHP SCRIPT?
    }
  }
</script>
</head>
<body>

  <form name="forma" action="validate.php" method="post" onSubmit="return Validate()">
    Firstname: <input type="text" name="firstname">
    Lastname: <input type="text" name="lastname">
    Age: <input type="text" name="age">
    <input type="submit">
  </form>
</body>
</html>
4

4 回答 4

1

由于您没有从函数中返回 false,因此无论如何都应该提交表单。您可以通过让您的 validate() 函数返回 false 来阻止它被提交。

于 2013-03-19T22:23:59.640 回答
1

您的代码看起来是正确的,除了您可能想要return false阻止表单提交失败的事实。当不返回 false 时,表单将继续提交。

form我还认为您可能打算将您的表格命名为forma

于 2013-03-19T22:24:21.893 回答
1

您应该验证输入服务器端 (php),即使您是在客户端 (javascript) 进行的。

您可以通过检查$_POSTvalidate.php 来做到这一点:
在脚本的开头:

if (isset($_POST)) {  // form has been sent

    if (!isset($_POST['firstname']) || strlen($_POST['firstname'])==0) { // no entry 

        $e['firstname']='please enter a firstname!'; // prepare error-msg
    }

    if (!isset($e)) {  // no error, continue handling the data

        // write data to database etc.
    }
}

// in your form...

if (isset($e)) echo "there were errors: ". implode(',',$e);
于 2013-03-19T22:32:02.647 回答
1

您需要输入以下代码:

function Validate(){
var x=document.forms["form"]["firstname"].value;
var y=document.forms["form"]["lastname"].value;
var z=document.forms["form"]["age"].value;
if(x==null || x=="") {
  alert("Input name!");
  return false;
} else if(y==null || y=="") {
  alert("Input surname!");
  return false;
} else if(z==null || z=="") {
  alert("Input age!");
  return false;
} else {
  return true;
}
}
于 2013-03-19T22:39:11.723 回答