J'ai écrit ce code PHP pour soumettre toutes les entrées dans le formulaire dans la base de données, mais je reçois un problème étrange. La requête d'insertion fonctionne parfois mais pas d'autres fois et elle affiche 'Error querying database'. J'ai vérifié cent fois les identifiants de tous les champs HTML et ils sont absolument corrects. Toutes les colonnes de la base de données sont également très bien. S'il vous plaît aidez-moi avec cette erreur.Insérer une requête fonctionne parfois mais parfois il ne fonctionne pas
<?php
require_once('connectvars.php');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error connecting to the MySQL server.');
$name = mysqli_real_escape_string($dbc, trim($_POST['name']));
$fathername = mysqli_real_escape_string($dbc, trim($_POST['fathername']));
$dob = mysqli_real_escape_string($dbc, trim($_POST['dob']));
$year = $_POST['year'];
$email = mysqli_real_escape_string($dbc, trim($_POST['email']));
$pass = mysqli_real_escape_string($dbc, trim($_POST['pass']));
$confirmpass = mysqli_real_escape_string($dbc, trim($_POST['confirmpass']));
$address = mysqli_real_escape_string($dbc, trim($_POST['address']));
$mobile = mysqli_real_escape_string($dbc, trim($_POST['mobile']));
$rollno = mysqli_real_escape_string($dbc, trim($_POST['rollno']));
$coordinator = $_POST['coordinator'];
if(isset($_POST['submit'])) {
$output_form = false;
//To check if all the form entries have been filled or not
if(!empty($name) && !empty($fathername) && !empty($dob) && !empty($email) && !empty($pass) && !empty($confirmpass) && !empty($address) && !empty($mobile) && !empty($rollno)){
//Code to validate the form entries
$domain = preg_replace('/^[a-zA-Z0-9][a-zA-Z0-9\._\-&!?=#]*@/', '', $email);
//function to check if the domain name is valid and it exists in the Domain Name System(if the web server is on Windows)
function win_checkdnsrr($domain, $recType='') {
if(!empty($domain)) {
if($recType == '') $recType="MX";
exec("nslookup -type=$recType $domain",$output);
foreach($output as $line) {
if (preg_match("/^$domain/", $line)) return true;
}
}
}
if(preg_match('/^[a-zA-Z0-9][a-zA-Z0-9\._\-&!?=#]*@/', $email) && win_checkdnsrr($domain) && preg_match('/^\d{10}$/', $mobile) && preg_match('/(DTU\/)? ?\w{4}\/\w{2,3}\/\d{3,4}$/', $rollno) && preg_match('/^.{6,20}$/', $pass) && ($pass == $confirmpass)) {
$query = "SELECT * FROM reg_table WHERE email = '$email'";
$data = mysqli_query($dbc, $query);
if(mysqli_num_rows($data) == 0) {
//The user is registering for the first time, so insert into database
$query = "INSERT INTO reg_table(`name`, `fathername`, `dob`, `collegeyear`, `email`, `pass`, `address`, `mobile`, `rollno`, `coordinator`) VALUES ('$name','$fathername', '$dob', $year, '$email', SHA('$pass'), '$address', $mobile, '$rollno', '$coordinator')";
$test = mysqli_affected_rows($dbc);
echo $test;
$result = mysqli_query($dbc, $query) or die('Error querying database');
mysqli_close($dbc);
$output_form = false;
echo '<p class="success">Data submitted</p>';
}
else {
//A user with same email-id exists
echo '<p class="error">A person with this email-id is already registered</p>';
$output_form = true;
}
}
else {
//the data entered is invalid
echo '<p class="error">Please enter valid data</p>';
$output_form = true;
}
}
else {
echo '<p class="error">Please fill all the form fields</p>';
$output_form = true;
}
}
else {
$output_form = true;
}
if($output_form) {
?>
votre code est en train d'être refait. – DevZer0
Utilisez [instructions préparées] (http://php.net/manual/fr/mysqli.prepare.php) à la place. – hjpotter92
@ hjpotter92 quel est l'avantage? –