2016-11-08 2 views
-2

Я уверен, что у меня нет никаких ошибок, однако, когда я отправляю их, я не получаю «Успех», как я должен, когда мое представление будет успешным. Файл connect.php является файлом php, который подключается к моей базе данных, и я не получаю никаких ошибок от этого, поэтому я знаю, что я подключен к моей базе данных, а header.php - это заголовок. Ничего, что могло бы вызвать какие-либо ошибки там. И нижний колонтитул - это одно и то же. Я знаю, что я подключен к моей базе данных, потому что у меня была ошибка до того, когда я тестировал свой код, однако теперь у меня нет никаких ошибок или «Успеха».Почему моя версия кода PHP не работает с моей SQL-базой данных?

Вот моя попытка:

<?php 
//signup.php 
include 'connect.php'; 
include 'header.php'; 

echo '<h3>Sign up</h3>'; 
echo '<form method="post" action=""> 
    Username: <input type="text" name="user_name" /> 
    Password: <input type="password" name="user_pass"> 
    Password again: <input type="password" name="user_pass_check"> 
    E-mail: <input type="email" name="user_email"> 
    <input type="submit" value="sign up" /> 
</form>'; 
if($_SERVER['REQUEST_METHOD'] === 'POST') { 

    $fixed_user_name = $database_connection->real_escape_string($_POST['user_name']); 
    $fixed_user_email = $database_connection->real_escape_string($_POST['user_email']); 
    $now = NOW(); 

    $sql = "INSERT INTO users (user_name, user_pass, user_email) 
      VALUES ($fixed_user_name, $_POST['user_pass'], $fixed_user_email)"; 

    if($database_connection->query($sql) === TRUE){ 
     echo "Success"; 
    } 
    else { 
     echo "Error: " . $sql . "<br>" . $database_connection->error; 
    } 
} 

include 'footer.php'; 
?> 

Вот мой файл connect.php, а также:

<?php 
//connect.php 
$username = 'root'; 
$password = "root_password"; 
$database = 'cloud'; 

$database_connection = new mysqli("localhost", $username, $password, $database); 

if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 

echo $mysqli->host_info . "\n"; 

?> 
+0

Что же такое в '$ database_connection-> error'? Ошибка синтаксиса? –

+0

Включите отчет об ошибках и повторите попытку. Добавьте следующую строку вверху страницы error_reporting (E_ALL); ini_set ("display_errors", 1); – Ima

+0

Вы широко открыты для [SQL Injections] (http://php.net/manual/en/security.database.sql-injection.php) и должны действительно использовать [Подготовленные утверждения] (http://php.net/ manual/en/mysqli.quickstart.prepared-statements.php) вместо того, чтобы объединять ваши запросы.Изменение строк не так безопасно, как можно было бы надеяться. Специально, так как вы только избегаете некоторых входов! ?? –

ответ

2

вот более безопасный способ вашего сценария с password_hash() и подготовительные документы:

signup.php

<?php 
//signup.php 

#include "connect.php"; // set $servername, $username, $password and $dbname there 

include 'header.php'; 

// changed here the '' to "" and back 
echo "<h3>Sign up</h3>". 
    "<form method='post' action=''> 
     Username: <input type='text' name='user_name' /> 
     Password: <input type='password' name='user_pass'> 
     Password again: <input type='password' name='user_pass_check'> 
     E-mail: <input type='email' name='user_email'> 
     <input name='submit' type='submit' value='sign up' /> 
    </form>"; 

if(isset($_POST["submit"])) { 

    include "connect.php"; 

    // set the user_name and user_email as a seperate variable 
    $username = $_POST["user_name"]; 
    $email = $_POST["user_email"]; 
    $password = $_POST["user_pass"]; 
    $cpassword = $_POST["user_pass_check"]; 

    $fixed_user_name = mysqli_real_escape_string($conn, $username); 

    $fixed_user_email = mysqli_real_escape_string($conn, $email); 

    #$now = NOW(); 

    //check if password is not cpassword and if so, there is an error 
    if ($password !== $cpassword) { 
     echo "Passwords do not match!"; 
    } 

    //NEVER store PLAINTEXT PASSWORDS... user php build_in functions like password_hash() and store only the hash 
    $hash = password_hash($password, PASSWORD_DEFAULT); 

    //change your db_entry user_pass to hash 
    $sql = $conn->prepare("INSERT INTO users (user_name, hash, user_email) VALUES (?, ?, ?)"); 
    $sql->bind_param("sss", $fixed_user_name, $hash, $fixed_user_email); 
    $sql->execute(); 

    echo "Success!"; 

    $sql->close(); 
    $conn->close(); 

} 
include 'footer.php'; 
?> 


connect.php

<?php 
//connect.php 
$servername = "localhost"; 
$username = "root"; 
$password = "root_password"; 
$dbname = "cloud"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
?> 

объяснение в сценарии с комментариями :)

посмотреть на php.net manual для функции password_hash()

может быть, это помогло вам

+0

Чтобы сделать его еще более безопасным и безопасным от SQL-инъекций, используйте подготовленные заявления ... –

+0

да, но я думал, что это будет enouth для начала и понимания – Blueblazer172

+0

Я вообще не согласен. Лучше сделать это правильно с самого начала, но я согласен с тем, что проблема с паролем была самой важной, поэтому я понимаю, почему вы пропустили подготовленные заявления. :) –

0
echo '<h3>Sign up</h3>'; 
echo '<form method="post" action=""> 
Username: <input type="text" name="user_name" /> 
Password: <input type="password" name="user_pass"> 
Password again: <input type="password" name="user_pass_check"> 
E-mail: <input type="email" name="user_email"> 
<input type="submit" name="submit" value="sign up" /> 
</form>'; 
if(isset($_POST['submit'])) { 

$fixed_user_name = $database_connection->real_escape_string($_POST['user_name']); 
$fixed_user_email = $database_connection->real_escape_string($_POST['user_email']); 
$now = NOW(); 

$sql = "INSERT INTO users (user_name, user_pass, user_email) 
     VALUES ('$fixed_user_name', '".$_POST['user_pass']."', '$fixed_user_email')"; 

$result = mysqli_query(whatever your connection variable is, $sql); 

if($database_connection->query($sql) === TRUE){ 
    echo "Success"; 
} 
else { 
    echo "Error: " . $sql . "<br>" . $database_connection->error; 
} 
} 
+0

Я добавил эти изменения, но я до сих пор не добился успеха ... – Joshua

+0

Попробуйте добавить, извините, мне очень сложно писать код в этой крошечной коробке :) Я не знаком с php 7, но это должно работать , вы должны поместить свой запрос в другой файл и поместить файл в action = "" часть формы. –

+0

Хорошо. Я сделал это, и теперь это просто приводит меня к пустой странице с именем файла в URL-адресе ... Я попробую ваш обновленный код. – Joshua

Смежные вопросы