mySQL php表单不保存数据

时间:2015-01-16 02:26:32

标签: php mysql forms

我正在尝试使用以下php表单,但每次收到错误消息 保存失败请打印数据...

我认为这意味着它与数据库连接正常,但数据无法正确访问php文件或数据库。任何指针都会很棒......

由于

亨利

new_client.html表单

<form id="form_956123" class="appnitro"  method="post" action="new_client.php">
                <div class="form_description">
        <h2>New Client</h2>
        <p>Please enter your client details below</p>
    </div>                      
        <ul >

                <li id="li_1" >
    <label class="description" for="firstname">First Name </label>
    <div>
        <input id="firstname" name="firstname" class="element text medium" type="text" maxlength="255" value=""/> 
    </div> 
    </li>       <li id="li_2" >
    <label class="description" for="lastname">Last Name </label>
    <div>
        <input id="lastname" name="lastname" class="element text medium" type="text" maxlength="255" value=""/> 
    </div> 
    </li>       <li id="li_3" >
    <label class="description" for="address">Address </label>
    <div>
        <textarea id="address" name="address" class="element textarea medium"></textarea> 
    </div> 
    </li>       <li id="li_4" >
    <label class="description" for="postcode">Postcode </label>
    <div>
        <input id="postcode" name="postcode" class="element text medium" type="text" maxlength="255" value=""/> 
    </div> 
    </li>       <li id="li_5" >
    <label class="description" for="email">Email </label>
    <div>
        <input id="email" name="email" class="element text medium" type="text" maxlength="255" value=""/> 
    </div> 
    </li>       <li id="li_6" >
    <label class="description" for="tel">Phone </label>
    <div>
        <input id="tel" name="tel" class="element text medium" type="text" maxlength="255" value=""/> 
    </div> 
    </li>       <li id="li_7" >
    <label class="description" for="dob">Date of Birth </label>
    <div>
        <input id="dob" name="dob" class="element text medium" type="text" maxlength="255" value=""/> 
    </div> 
    </li>

          <li class="buttons">
            <input type="hidden" name="form_id" value="956123" />

            <input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" />
    </li>
      </ul>
    </form> 

new_client.php

<?php //Post Params 
$firstname = $_POST['firstname'];  
$lastname = $_POST['lastname'];  
$address = $_POST['address'];  
$postcode = $_POST['postcode'];  
$email = $_POST['email'];  
$dob = $_POST['dob'];  
$tel = $_POST['tel'];  
$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "dbname";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO client_data (date, userid, firstname, lastname, address, postcode, email, dob, tel) VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssssss",$firstname,$firstname,$lastname,$address,$postcode,$email,$dob,$tel);
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

表格格式

Column  Type    
date    date    
userid  text
firstname   text
lastname    text
address text
postcode    text
email   text
dob text
tel  text   

4 个答案:

答案 0 :(得分:1)

错误在于:

mysql_query($query)

首先,您不能混用mysql_mysqli_。其次,如果您正在使用过程式,则必须在第一个参数中指定连接(即mysqli_query($conn, $query)或OO样式:$conn->query)。

但是,由于您正在处理字符串,因此需要使用预准备语句来避免SQL注入。正确的做法是:

$stmt = $conn->prepare("INSERT INTO client_data ( date, userid, firstname, lastname, address, postcode, email, dob, tel )  VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?,  ? ) "));
$stmt->bind_param("ssssssss",$firstname,$firstname,$lastname,$address,$postcode,$email,$dob,$tel);
$stmt->execute();

顺便说一下,为什么userid不是ID?

更新:将您的代码更改为:

$stmt = $conn->prepare("INSERT INTO client_data ( date, userid, firstname, lastname, address, postcode, email, dob, tel )  VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?,  ? ) "));
if ( false===$stmt ) { die('prepare() failed: ' . htmlspecialchars($mysqli->error)); }
$rc = $stmt->bind_param("ssssssss",$firstname,$firstname,$lastname,$address,$postcode,$email,$dob,$tel);
if ( false===$rc ) { die('bind_param() failed: ' . htmlspecialchars($stmt->error)); }
$rc = $stmt->execute();
if ( false===$rc ) { die('execute() failed: ' . htmlspecialchars($stmt->error)); }

告诉我你得到了什么输出。

答案 1 :(得分:0)

您似乎正在使用mysql连接并使用mysqli查询并且未指定数据库连接。

尝试:

$result = mysli_query($conn, $query);

答案 2 :(得分:0)

更改行

$result = mysql_query($query); 

$result = mysqli_query($conn, $query);

或使用准备好的声明(推荐)。

然后,如果它仍然不起作用,请更改

echo 'Saving Failed Please Print Data...';

echo mysqli_error($conn);

暂时查看是否会说出错误是什么。

答案 3 :(得分:-1)

 $query = " INSERT INTO client_data ( date, userid, firstname, lastname, address, postcode, email, dob, tel )  VALUES ( 'now()','','$firstname', '$firstname', '$lastname', '$address', '$postcode', '$email', '$dob',  '$tel' ) "; 

或试试这个

 $query = " INSERT INTO client_data ( date, firstname, lastname, address, postcode, email, dob, tel )  VALUES ( 'now()','$firstname', '$firstname', '$lastname', '$address', '$postcode', '$email', '$dob',  '$tel' ) "; 

我假设userid字段是自动增量。

然后改变这一行

$mysql->query($query); 

$mysqli->query($query);