2013-08-17 7 views
1

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) { 

?>

+0

votre code est en train d'être refait. – DevZer0

+0

Utilisez [instructions préparées] (http://php.net/manual/fr/mysqli.prepare.php) à la place. – hjpotter92

+0

@ hjpotter92 quel est l'avantage? –

Répondre

0

J'ai eu le même problème avec MySQL insérer parfois. Pas d'erreurs

Je faisais des insertions de masse en faisant un traitement par lots après avoir mis une pause dans cela fonctionne.

usleep(250000); // take a 1/4 second break 
Questions connexes