我的php代码没有添加到我的数据库

问题描述:

我是新来的PHP,我试图创建一个注册表单。我不知道为什么我的代码没有将新用户添加到数据库,它不会给任何错误消息只是进入白屏。我不知道它是否连接到数据库,但我相信这是否会给我一个错误信息,对不对?我的php代码没有添加到我的数据库

这是我的PHP代码:

<?php 
    define('DB_HOST', 'localhost'); 
    define('DB_NAME', 'class_rate'); 
    define('DB_USER', 'root'); 
    define('DB_PASSWORD', 'password'); 

    $con = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD) or die("Failed to connect" . mysqli_error()); 

    $db = mysqli_select_db($con, DB_NAME) or die("Failed to connect" . mysqli_error()); 

    function NewUser(){ 

    $name = $_POST['nome']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $query = "INSERT INTO users (nome_user,email_user,passw_user) VALUES ('$name','$email','$password')"; 
    $data = mysqli_query($query)or die(mysql_error()); 
    if($data) { 
     echo "YOUR REGISTRATION IS COMPLETED..."; 
    } 
    } 

function SignUp(){ 
    if (!empty($_POST['email'])) { 
     $query = mysqli_query("SELECT * FROM users WHERE email_user = $_POST[email]' AND passw_user = '$_POST[password]'") or die(mysqli_error()); 
    } 

    if(!$row = mysqli_fetch_array($query) or die(mysqli_error())){ 
     NewUser(); 
    } 
    else{ 
     echo "Email already registered!"; 
    } 
} 

if (isset($_POST['submit'])) { 
    SignUp(); 
} 


?> 
+0

提交变量存在于调用此代码的窗体中?我认为函数Signup中的查询会失败,你传递的是电子邮件并且传递错误。 – iubema

+0

了解功能参数 – metalbox

+0

https://*.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 –

在这里你去试试这个代码

<?php 
    define('DB_HOST', 'localhost'); 
    define('DB_NAME', 'class_rate'); 
    define('DB_USER', 'root'); 
    define('DB_PASSWORD', 'password'); 

    $con = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD) or die("Failed to connect" . mysqli_error()); 

    $db = mysqli_select_db($con, DB_NAME) or die("Failed to connect" . mysqli_error()); 

    function NewUser(){ 
    global $con; 
    $name = $_POST['nome']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $query = "INSERT INTO users (nome_user,email_user,passw_user) VALUES ('$name','$email','$password')"; 
    $data = mysqli_query($con, $query)or die(mysqli_error()); 
    if($data) { 
     echo "YOUR REGISTRATION IS COMPLETED..."; 
    } 
    } 

function SignUp(){ 
    global $con; 
    if (!empty($_POST['email'])) { 
     $query = mysqli_query($con, "SELECT * FROM users WHERE email_user = $_POST[email]' AND passw_user = '$_POST[password]'") or die(mysqli_error()); 
    } 

    if(!$row = mysqli_fetch_array($query) or die(mysqli_error())){ 
     NewUser(); 
    } 
    else{ 
     echo "Email already registered!"; 
    } 
} 

if (isset($_POST['submit'])) { 
    SignUp(); 
} 


?> 
+2

你修好了什么? –

+0

@JaredFarrish他忘记在'$ query'之前添加'$ con,'' – Rtra

+0

如果他应该试试这个代码,它会工作 – Rtra

有在脚本中一些问题。

  1. 你并没有看到错误消息,是因为mysqli_error()需要作为参数的连接,这是$con在您的实例,并在"SELECT * FROM users WHERE email_user = $_POST[email]' AND passw_user = '$_POST[password]'")缺少一个单引号应该是"SELECT * FROM users WHERE email_user = '$_POST[email]' AND passw_user = '$_POST[password]'")
  2. 变量的作用域,你的职责function NewUser()function SignUp()内,他们无法访问$con$db,有几种解决方案:

    我。为了使变量成为GLOBAL,但不推荐这样做,因为在PHP中使用GLOBAL关键字通常不是一个好习惯。

    ii。通过$con以作为参数,所以您的功能将变为function NewUser($con),function SignUp($con)在这种情况下

    iii。使用类来解决这个问题。

3.对于你的查询语句,它总是一个好主意,SELECT col1, col2正是您所需要的,而不是作为SELECT *最佳实践列。

4.检查POST参数的空值以及对输入参数进行一些清理以防止注入和不需要的标记/ javascripts也是一个好主意。

如果您有任何其他问题,请让我知道。