簡體   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