0

我目前正在尝试创建一个注册脚本以将注册信息输入到我的 UserAccount 表中。以下是我的连接:

<?php
//database preparation
$usr = "username";
$pwd = "password"; //put your php password
$host = "computing";
$db = $usr;
$conn = mysqli_connect($host, $usr, $pwd, $db);
if (!$conn){
echo "<p>server connection error:
mysqli_connect_error()</p>";
}
$_SESSION['conn'] = $conn; //database connection status 
transfer;
?>

这是我遇到困难的注册。

<?php
include "conn.php";

$email_address = $_POST['email_address'];
$password = md5($_POST['password']);
$f_name = $_POST['f_name'];
$s_name = $_POST['s_name'];

$insert = 'INSERT INTO UserAccount(email_address, password, f_name, s_name) 
VALUES("'.$email_address.'","'.$password.'","'.$f_name.'","'.$l_name.'")';

mysql_query($insert);


?>

输入信息时,我得到一个空白页,并且表格中没有数据条目,我想知道为什么?

4

4 回答 4

3

你有一个错字

mysql_query($insert);应该mysqli_query($insert);

您不能对 mysqli 连接进行 mysql 查询。

于 2013-03-13T16:07:35.880 回答
1

您必须查看您的查询是否正在执行?您的查询返回的错误是什么?尝试

mysqli_query($conn,$insert) or die(mysqli_error($conn));

这会告诉你为什么没有数据。迁移到 MYSQLI 或 PDO 的好时光

编辑:

此外,您正在使用$l_name之前未声明的变量。在您的查询中应该是$s_name. 很可能您的表设置为不接受 l_name 的空白值,这就是它失败的地方

于 2013-03-13T16:05:32.697 回答
0

通过更改单引号和双引号来尝试以下操作:

$insert = "INSERT INTO UserAccount(email_address, password, f_name, s_name) 
VALUES('".$email_address."','".$password."','".$f_name."','".$l_name."')";

这是个好习惯!该页面将是空白的,但至少您应该在表格中获得条目。

还要检查数据库名称$db是否应该与$usr?这个对吗?

$db = $usr;

这不应该是这样的吗

$db = "databaseName";

最后的想法:

有一个关键字变量transfer;看起来很有趣。由于设置了 php 错误报告/处理,它可能会导致错误但不会显示/报告它,因此是空白页。在代码中的特定位置使用echo以查看它停止的位置。

它应该$transfer;并且应该接收一个变量吗?

另一个想法是,如果你有$_SESSION['conn'],应该session_start();在开始<?php标签之后有一个。这都可能导致 conn.php 失败,从而破坏INSERT.

于 2013-03-13T16:07:53.577 回答
0

永远不要以这种方式使用 mysql_ 函数!严重地!

  • 直接在查询中使用未经处理的数据 会冒SQL 注入的风险
    • 有人可以制定可能暴露或破坏您的数据的恶意请求
  • 自 PHP 5.5 起,mysql_* 函数已被弃用!
    • 他们不再受支持!

解决方案:

  • 使用准备好的语句
  • 使用 PDO
  • 或在整个应用程序中始终使用 mysqli(如其他人所述)

在所有这些中,我建议采用 PDO 方式:

try {
    //open connection, this is different than in the old functions
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

    //***running query
    //**step1: create statement
    $stmt = $dbh->prepare('INSERT INTO UserAccount(email_address, password, f_name, s_name) 
    VALUES( :email, :password,:f_name,:l_name)'); //notice parameters prefixed with ':'

    //**step2: bind values (be sure to also check out the bindParameter() function too!)
    $stmt->bindValue(':email', $email_address);
    $stmt->bindValue(':password', $password);
    $stmt->bindValue(':f_name', $f_name);
    $stmt->bindValue(':l_name', $l_name);

    //**step3: exexcute statement
    $stmt->execute();

    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
于 2013-03-13T16:21:15.443 回答