отображение текста независимо от ($ _POST ['submit']) - PullRequest
0 голосов
/ 24 мая 2018

Я очень плохо знаком с PHP и кодированием и пытаюсь научиться - но я застрял и надеялся, что кто-то может указать, что не так -

Мой код показывает текст "Ошибка", как толькокак я открываю свою страницу.Моя цель - показывать «Отказ» только тогда, когда пользователь вводит информацию, и ему не удается подключиться к базе данных.

Я использую WAMP, и мой сервер баз данных находится в MySQL.Кроме того, когда я нажимаю «Зарегистрироваться», я не получаю никаких результатов в своей базе данных - и не появляется сообщение об ошибке, чтобы указать причину.

php

<?php
require('connect.php');


$username = @$_POST['username'];
$password = @$_POST['password'];
$repass = @$_POST['repassword'];
$Email = @$_POST['email'];


if(isset($_POST['submit']))     

    {
    if($query = mysqli_query("INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$Email."')"))

        echo "Success";
}else{
    echo "Failure";
    }   
?>

база данных

<?php

$connect = mysqli_connect("localhost", "root", "") or die("Couldn't connect to server");
    mysqli_select_db($connect, "php_forum") or die("Couldn't connect to database");


?>

Пожалуйста, помогите!Дайте мне знать, если я не объяснил, что происходит достаточно хорошо

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Общие советы

  • Удалите ваш @.Символ амперсанда подавляет сообщения об ошибках.Это плохая идея использовать его 999/1000 раз.
  • Удалите ?>, если после этого момента вы фактически не публикуете данные, не относящиеся к PHP (например, HTML)
  • Храните хэши паролей только с использованием PHP password_hash. НИКОГДА хранить незашифрованные пароли в вашей базе данных.Когда-либо.Нет, даже на тестировании.( Хорошо, как мне это сделать? )
  • Использование PHP Prepared Statements для защиты от SQL-инъекций и поддержания Наилучших практик ,( Как? )
  • НИКОГДА вставлять неквалифицированные данные, предоставленные пользователем, в вашу базу данных.Это может быть приемлемым (но все же не мудрым imho), если вы используете Prepared Statements. ВСЕГДА проверьте правильность данных, указанных в любом HTML <form> ( Грубое руководство по подготовке отчетов ).
  • Используйте PHP подробно и очень полезно Система регистрации ошибок , и используйте ее, чтобы дать вам обратную связь с вашими скриптами .
  • Do NOT привыкнуть выводить подробные ошибки в браузер (например, с помощью операторов die()).
  • Используйте правильную IDE , которая может помочь Огромно со стилями синтаксиса и кодирования.
  • Убедитесь, что ваша HTML-форма содержит POST данных, а не GET данных.( Есть LOTS вопросов по переполнению стека о возможных ошибках в этой области ).
  • AUTO_INCREMENT Значения столбцов MySQL (id) можно игнорировать в коде PHP SQL, они будут вставлены MySQL самостоятельно.
  • Понимать основы работы PHP;как он взаимодействует с вашим HTML и логический порядок процессов, как все происходит.

Хорошие способы обучения:


Мое личное представление

Ваш код ужасен, но это нормально.То, что вам нужно, это последовательно .Даже неизменно ужасно лучше, чем быть абстрактно ужасным.

Вам необходимо последовательно формировать свои if заявления.Иногда у них есть скобки {...}, а иногда нет.Это затрудняет правильное чтение вашего кода.

Лично я считаю, что isset - ужасная функция для использования.Я также думаю, что вы должны привыкнуть использовать (и проверять) CSRF-токен .


Ваш код:

Пожалуйста, не прости менязатрачивая много времени и усилий на применение подготовленных операторов к этому блоку кода.Это затеняет предполагаемые изменения для ФП, поскольку они не очень хорошо используются в подготовленных заявлениях

<?php
require('connect.php');

$username = $_POST['username'];
$password = $_POST['password'];
$repass = $_POST['repassword'];
$Email = $_POST['email'];

if($_POST['CSRF_token'] == $_SESSION['token_value'])     
    {
    /***
     * Check Password values are equal.
     ***/
    if($password == $repass){
        $pwd = password_hash($password,PASSWORD_DEFAULT); 
    }
    else {
        echo "passwords do not match! Nothing saved!";
        die();
    }
    /***
     * Likewise you can also check the Emal is a valid format, etc. etc.
     ***/

    /***
     * Try and insert using procedural MySQLi. 
     * Note if statement brackets.
     ***/
    if($query = mysqli_query("INSERT INTO users ( `username`, `password`, `email`) VALUES ( '".$username."', '".$pwd."', '".$Email."')")){
        echo "Success"; //only echoed if the INSERT succeeds
    }
    else{
        /***
         * Only echoed if the insert failed 
         * AND the form WAS submitted. 
         ***/
        echo "Failure"; 
    }   
} // close your outer if block. 
0 голосов
/ 24 мая 2018

Чтобы ответить на ваш конкретный вопрос:

Причина, по которой вы видите «Сбой» при посещении страницы, такова:

echo "Failure";

, которая запускается, когда isset($_POST['submit']) ложно.

Вы можете обновить свой код, чтобы он выглядел так, и вы будете ближе, но вам все равно придется решать другие проблемы, связанные с регистрацией.

if (isset($_POST['submit'])) {
    if ($query = mysqli_query("INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '" . $username . "', '" . $password . "', '" . $Email . "')")) {
        echo "Success";
    } else {
        echo "Failure";
    }
} 
0 голосов
/ 24 мая 2018

В вашем соединении отсутствуют параметры, должно быть $connect = mysqli_connect("HostName","UserName","password","DBName") or die("Some error occurred during connection " . mysqli_error($con));, это будет включать проверку ошибок.

Почему у вас есть символ @ перед вашей переменной и точки перед всеми переменными в вашем запросе (может быть глупый вопрос а если так извините)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...