无法通过php在mysql数据库上创建帐户

时间:2018-01-26 03:51:03

标签: php html mysql

我在通过我创建的php创建数据到MySQL数据库时遇到了麻烦,以便能够在网站上创建一个帐户我正在制作以下php文件来处理这个过程(链接)下面),我一直在寻找这些代码行几个小时,我无法弄清楚它有什么问题....

signup.php

<?php 
require 'db.php';
session_start();
?>

<!DOCTYPE html>
<html>
  <head>
    <title>AlojArt Reservas</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <!-- styles -->
    <link href="css/styles.css" rel="stylesheet">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
  </head>

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    if (isset($_POST['login'])) { //user logging in

        require 'login.php';

    }

    elseif (isset($_POST['register'])) { //user registering

        require 'register.php';

    }
}
?>

  <body class="login-bg">
    <div class="header">
        <div class="container">
            <div class="row">
                <div class="col-md-12">

                  <!-------------------- Logo -------------------->
                  <div class="logo">
                     <h1><a href="index.php">AlojArt Reservas</a></h1>
                  </div>

               </div>
            </div>
        </div>
    </div>

    <div class="page-content container">
        <div class="row">
            <div class="col-md-4 col-md-offset-4">
                <div class="login-wrapper">
                    <div id="register">
                        <div class="box">
                            <form action="signup.php" method="post" autocomplete="off"> 
                                <div class="content-wrap">
                                    <h6>Criar conta</h6>
                                    <input class="form-control" type="text" placeholder="Nome" name="nome_titular">
                                    <input class="form-control" type="text" placeholder="Nome de utilizador " name="username">
                                    <input class="form-control" type="password" placeholder="Palavra-passe" name="password">
                                    <input class="form-control" type="email" placeholder="Endereço de e-mail" name="email">
                                    <div class="action">
                                        <button class="btn btn-primary btn-lg" name="register" />Criar conta</button>
                                    </div> 
                                </div>
                            </form>    
                        </div>
                    </div>


                    <div class="already">
                        <div id="login">
                            <p>Já tem conta?</p>
                            <a href="index.php">Iniciar sessão</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>



    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://code.jquery.com/jquery.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="bootstrap/js/bootstrap.min.js"></script>
    <script src="js/custom.js"></script>
  </body>
</html>

register.php

<?php
require 'db.php';
session_start();

$_SESSION['nome_titular'] = $_POST['nome_titular'];
$_SESSION['username'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];
$_SESSION['email'] = $_POST['email'];

// Escape all $_POST variables to protect against SQL injections
$nome_titular = $mysqli->escape_string($_POST['nome_titular']);
$username = $mysqli->escape_string($_POST['username']);
$email = $mysqli->escape_string($_POST['email']);
$password = $mysqli->escape_string(password_hash($_POST['password'], PASSWORD_BCRYPT));

// Check if user with that email already exists
$result = $mysqli->query("SELECT * FROM Utilizador WHERE email='$email'") or die($mysqli->error());

// We know user email exists if the rows returned are more than 0
if ( $result->num_rows > 0 ) {

    $_SESSION['message'] = 'O utilizador jรก existe!';
    header("location: error.php");
}

else { // User doesn't already exist in a database, proceed...

    $sql = "INSERT INTO Utilizador (nome_titular, username, email, password)"
            . "VALUES ('$nome_titular','$username','$email','$password')";

    // Add user to the database
    if ( $mysqli->query($sql) ){

        $_SESSION['logged_in'] = true;
        header("location: dashboard.php");

    }

    else {
        $_SESSION['message'] = "O registo falhou!";
        header("location: error.php");
    }

}

?>

编辑:添加了db.php

db.php中

<?php
/* Database connection settings */
$host = 'CENSORED';
$user = 'CENSORED';
$pass = 'CENSORED';
$db = 'projeto2_dcw';
$mysqli = new mysqli($host,$user,$pass,$db) or die($mysqli->error);
?>

2 个答案:

答案 0 :(得分:0)

我发现VALUES之前没有空格 $sql = "INSERT INTO Utilizador (nome_titular, username, email, password)" . " VALUES ('$nome_titular','$username','$email','$password')"; ,这会导致SQL失败。

将SQL更改为

else

如果您仍然收到意外结果,请将以下代码添加到printf("Error: %s\n", $mysqli->error); 以获取错误并将其他所有内容注释掉。

primary key

<强> ==更新==

  

&#34;错误:重复输入&#39; 0&#39;关键&#39; PRIMARY&#34;

它指的是0约束违规,换句话说,您正在尝试插入已存在于同一列中的新值primary key。因为else不允许重复。它失败并且落到primary key块。要解决此问题,您需要确保对于具有{{1}}的列没有重复条目。

答案 1 :(得分:0)

我看到您的网页没有任何连接,这就是为什么它被重定向到error.php将您的数据库连接更改为此

<?php
$host = 'CENSORED';
$user = 'CENSORED';
$pass = 'CENSORED';
$db = 'projeto2_dcw';
$con = mysqli_connect("$host,$user,$pass,$db") or die($mysqli->error);
mysqli_select_db($con,"your db name");
?>

在表单更改按钮中    <button type="submit" class="btn btn-primary btn-lg" name="register" />Criar conta

ALTER TABLE Your table name
ADD PRIMARY KEY (ID);