Php 服务器端验证错误未显示。用户转到标题位置

Php 服务器端验证错误未显示。用户转到标题位置,php,validation,Php,Validation,所以我有一种我相信是经过验证和消毒的形式。当注册者点击提交按钮时,它会将他们带到“标题”位置。即使注册器没有正确完成输入,它仍然会将注册器发送到“headers”位置。在我看来,这可能是两件事之一。要么验证代码错误,要么我没有正确显示错误。我将在下面留下我的代码 下面是index.php <php include("php/processuserform.php"); ?> <form method="POST" name="signup" action="php/

所以我有一种我相信是经过验证和消毒的形式。当注册者点击提交按钮时,它会将他们带到“标题”位置。即使注册器没有正确完成输入,它仍然会将注册器发送到“headers”位置。在我看来,这可能是两件事之一。要么验证代码错误,要么我没有正确显示错误。我将在下面留下我的代码

下面是index.php

 <php include("php/processuserform.php"); ?>


   <form method="POST" name="signup" action="php/processuserform.php">

   <input id="firstname" onkeyup="validateFirstName()"  placeholder="First Name" type="text" 
   value="<?php echo $valid_firstname; ?>" /><?php echo $error_firstname; ?><label 
   id="firstnameprompt"> 
   </label>

   <br><br>

   <input id="lastname" onkeyup="validateLastName()"  placeholder="Last Name" type="text" value="<?php 
   echo $valid_lastname; ?>" /><?php echo $error_lastname; ?><label id="lastnameprompt"></label>

   <br><br>


   <input id="Email" onkeyup="validateEmail()"  placeholder="Email" type="text" value="<?php echo 
   $valid_email; ?>" /><label id="Emailprompt"><?php echo $error_email; ?></label>

   <br /><br />

   <input id="Password" onkeyup="validatePassword()"  placeholder="Create Password" type="password" 
   value="<?php echo $valid_password; ?>" /><label id="Passwordprompt"><?php echo $error_password; ?> 
   </label>


   <br /><br />


 <strong>Male</strong><input id="Gender" type="radio" name="sex" value="m">
 <strong>Female</strong><input id="Gender" type="radio" name="sex" value="f">
 <?php echo $error_gender; ?> 

 <br /><br />

 Click "Submit" if you agree to <a href="#">"Terms And Conditions"</a>
 <br>
 <input id="submit" onclick="return validateUserRegistration()" value="Submit" type="submit" 
 name="submit"/><label id="submitprompt"></label>


$valid_gender==m | | f
对于PHP条件来说是无效的语法

  • m
    f
    不是字符串,您需要将表单输入(字符串)与它们进行比较
  • OR条件不能以这种方式工作
在PHP中,它总是打印“这是真的”:

这和说“如果有效的性别等于m或f是真的”是一样的

这使得您的条件始终等于
true

请尝试以下方法:

if( $valid_gender == "m" || $valid_gender == "f" ){ 
甚至

if( in_array($valid_gender,array("m","f")) ){ 

我的PHP有点过时了,但我不知道
$valid\u gender==m | | f
是如何有效的
m
f
不是字符串,这就是表单输入的形式,我认为您不能以这种方式使用或使用条件,它通常是
field==val | | field==otherVal
。由于条件未分组,您的陈述可能总是等同于感谢您提供的信息。因此,在阅读了你所写的内容之后,我将包含“性别”问题的“如果”陈述转化为以下内容。这就是你建议解决“性别”问题的方式吗?你是说这个“性别”问题是什么阻止我向注册者发送错误信息?下面是我认为您是如何说修复代码的如果((strlen($valid_lastname)>0)&(strlen($valid_lastname)>0)&(strlen($valid_email)>0)&(strlen($valid_password)>0)&($valid|性别==“m”| |$valid_性别==“f”){它阻止了我继续访问标题位置。不管输入字段是否正确,它都会停止processuserform.php页面上的注册器。因此,作为标题位置页面的交换,它现在会停止在我用来验证和清理注册器输入数据的外部文件上。有什么想法吗?我建议初始化将“clean”变量设置为false,这样可以更容易地检查它们是否已被设置。例如,
if($valid\u firstname&&$valid\u email)
。您需要包装“or”括号中的条件,但我建议尝试我给出的_数组中的
示例。如果条件不起作用,您需要打印/调试这些值,并找出真正的值。我是否必须使用If语句将变量初始化为false,或者以下操作可以起作用?…$a=$b=$c=$d=$e=false;
如果您正在初始化变量,则不需要isset
。下面是一个小例子,说明我的意思:。此外,如果任何验证表达式允许空格,请确保您使用的是
trim
。这是不使用
strlen
检查有效答案的另一个原因,它将计算空格。如果有人键入了所有空格,则您的valid仍然可以通过。我建议您使用验证/限制类:
if( $valid_gender == "m" || $valid_gender == "f" ){ 
if( in_array($valid_gender,array("m","f")) ){