1

我编写了这个 php 代码来将表单中的所有条目提交到数据库中,但我遇到了一个奇怪的问题。插入查询有时有效,但有时无效,它显示“查询数据库时出错”。我已经检查了所有 HTML 字段的 id 一百次,它们绝对没问题。数据库中的所有列也很好。请帮我解决这个错误。

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

?>

4

1 回答 1

0

我有时在插入 mysql 时遇到同样的问题。没有错误。

我正在做批量插入,并在批处理过程中暂停了它的工作。

usleep(250000); // take a 1/4 second break
于 2018-02-27T16:09:47.903 回答