繁体   English   中英

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

[英]fail to create account via php on mysql database

我无法通过自己创建的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);
?>

我看到VALUES之前没有空格' ' ,这将导致SQL失败。

将您的SQL更改为

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

如果仍然得到意外的结果,请输入以下代码以获取else错误并注释掉所有其他内容。

printf("Error: %s\n", $mysqli->error);

==更新==

“错误:键“ PRIMARY”的条目“ 0”重复”

它指的是违反primary key约束,换句话说,您试图插入新值0 ,该值已经存在于同一列中。 因为, primary key不允许重复。 它正在失败,并陷入else障碍。 要更正此问题,您需要确保没有具有primary key列的重复条目。

我看到您的页面没有连接,这就是为什么它被重定向到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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM