Mal funcionamiento de la validación de PHP, MySQL y la búsqueda no funciona?

He creado un pequeño formulario de registro adhesivo. Todo funciona bien, pero si ingreso cualquier valor incorrecto, como números en el nombre, letras de edad o incluso el formato de correo electrónico incorrecto, entonces aún los datos se guardan en la base de datos, no puedo resolver el problema de validación. Y otra 1 es la opción de búsqueda. Cada vez que ingreso cualquier nombre o apellido en el cuadro de búsqueda, debe mostrar el nombre que está en la base de datos o se mostrará un mensaje de error. Cualquier 1 puede sugerirme qué debo hacer. Consulte mi código a continuación.

códigos sticky_form …

  <?php global $fname,$lname,$gender,$age,$course,$email; if(isset($_POST['register'])) { $fname=$_POST['fname']; $lname=$_POST['lname']; $gender=$_POST['gender']; $age=$_POST['age']; $course=$_POST['course']; $email=$_POST['email']; if (preg_match("/[a-zA-Z ]+$/", $_POST['fname'])) { $fname = trim($_POST['fname']); } else { echo '

The First name is empty or has illegal characters! To edit please go the link Display Data Information

'; //$error = true; } if (preg_match("/[a-zA-Z ]+$/", $_POST['lname'])) { $lname = trim($_POST['lname']); } else { echo '

The last name is empty or has illegal characters! To edit please go the link Display Data Information

'; $error = true; } if(isset($_POST['gender'])) { $gender = $_POST['gender']; } else { echo "

No gender found!

"; } if (preg_match("/[a-zA-Z ]+$/", $_POST['age'])) { $age = trim($_POST['age']); } else { echo '

Please enter age. Or your age contains illegal characters

'; //$error = true; } if(isset($_POST['course'])) { $course = $_POST['course']; } else { echo "

Please Select Course!

"; } // Validate the email: if (preg_match("/^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$/", $_POST['email'] )){ $email = trim($_POST['email']); } else { echo '

The email is empty or has illegal characters! To edit please go the link Display Data Information

'; //$error = false; } echo "
"; echo "
"; echo "
"; } if($fname&&$lname&&$gender&&$age&&$email&&$course) { require_once('connection.php'); $query = mysql_query("INSERT INTO members SET FirstName='$fname', LastName='$lname', Gender='$gender', Age='$age', Email='$email', Course='$course'") or die(mysql_error()); if($query){ echo"Your Data Successfully Saved"; } else { echo "Please recheck your Data!"; } } ?>

Register Student Account

First Name :
Last Name :
Age :
Gender : Male Female
Course : Bachelor Of Computing
Bachelor Of Science
Bachelor Of Software Engineering
Bachelor Of Networking
Bacelor Of IT
Bachelor Of Computer Science
Email Address :

Home

Display Data Information

To search for Members

y este es el código search_form ……

   <?php //require_once('https://stackoverflow.com/questions/11293712/php-mysql-validation-malfunction-and-search-doesnt-work/student_form.php'); if(isset($_POST['s1'])){ $id=$_REQUEST['id']; $fname=$_POST['fname']; //connect to the database include('connection.php'); //-query the database table $sql=mysql_query("SELECT * FROM members WHERE (FirstName LIKE '". $fname ."%' OR LastName LIKE '". $lname ."%'"); //-run the query against the mysql query function $result=mysql_query($sql); if($row=mysql_fetch_array($result)){ $fname=$row['FirstName']; $lname=$row['LastName']; /*$email=$row['Email']; $age =$row['Age']; $gender=$row['Gender']; $course = $row['Course'];*/ } //-display the result of the array else {   } } ?>   
search box :

sus variables como $fname $lname $gender $age $email $course se ponen en condición después de if condición para isset($_POST['register']) . Ahora, incluso si su validación funcionará, los datos aún se ingresarán en la base de datos. porque has puesto la condición

if($fname&&$lname&&$gender&&$age&&$email&&$course)

Ahora el control ingresará a ese bloque cuando tenga un solo valor en todas esas variables. Lo que debe suceder es que ponga valores incorrectos, que se validen, que se muestre el mensaje, pero que primero el bloque termine, ya que las variables $ _POST todavía tienen ALGÚN valor, independientemente de que no sean válidas, segundo si se ingresará el bloque y la consulta será disparada.

Lo que puede hacer es, donde quiera que esté repitiendo un mensaje de error, borrar la variable respectiva. algo como esto:

 if (preg_match("/[a-zA-Z ]+$/", $_POST['fname'])) { $fname = trim($_POST['fname']); } else { echo '

The First name is empty or has illegal characters! To edit please go the link Display Data Information

'; $fname = ""; }

En cuanto a su primera pregunta, no compruebe $var , compruebe for !empty($var) .

Segunda pregunta: no estoy seguro de entender lo que estás tratando de hacer. ¿Pero no te refieres a $row lugar de $rows cuando estás mostrando algo? Además, ¿qué sucede si tienes más de un hit de búsqueda? Lo que quieres es:

 while($row=mysql_fetch_assoc($result)){ echo $row['Firstname'], ' ', $row['LastName']; } 

en lugar de su construcción if-else.