2016-01-31 2 views
2

У меня возникли проблемы с регистрационной информацией.
Предполагается, что он перейдет в базу данных под названием «mon» и в таблицу «user». Эта таблица содержит информацию «id», «name» и «pass». «Id» основан на система автоматического приращения, поэтому ее не нужно определять на странице регистрации.Проблемы с вставкой регистрационной информации в базу данных Mysql

Об ошибках не сообщается, просто перезагрузка страницы. Но при посещении таблицы с использованием phpMyAdmin она показывает, что новая строка не была создана. Мне нужна помощь в этом, потому что я довольно новичок в PHP и дона Не знаю, что из этого вышло.

Код:
Pastebin because stackoverflow is acting weird with my code even though I spaced it.

register.php:

<?php 
    require_once 'connect.php'; 
    if(!empty($_POST)) { 
     if(isset($_POST['username'], $_POST['password'], $_POST['desc'])) { 
      $username = $_POST['username']; 
      $password = $_POST['password']; 

      if(!empty($username) && !empty($password)) { 
       $insert = $db->prepare("INSERT INTO 'user' ('name', 'pass') VALUES (?, ?)"); 
       $insert->bind_param('ss', $username, $password); 
      } 
     } 
    } 
    ?> 
    <html> 
     <head> 
      <?php 
      require_once 'style.php'; 
      ?> 
      <title>si | Registering an Account</title> 
     </head> 
     <body> 
      <?php 
      require_once 'header.php'; 
      ?> 
      <div id="page"> 
       <h2>Register an Account on Si</h2> 
       <form action="" method="post"> 
        <input type="text" name="username" placeholder="Username" autocomplete="off"> 
        <input type="password" name="password" placeholder="Password" autocomplete="off"> 
        <button>Register</button> 
       </form> 
      </div> 
     </body> 
    </html> 

connect.php:

<?php 
    $db = new mysqli('127.0.0.1', 'root', ''); 
    if($db->connect_errno) { 
     echo "<p id='gotem'>Something has gone wrong.Tell J to fix it.</p>"; 
    } 
    ?> 

Любая помощь по этому вопросу, создание сеанса, значки входа и перенаправление на индекс страница с сессией на очень ценится.

+1

Для обеспечения безопасности паролей воспользуйтесь встроенными функциями PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html). Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

ответ

3

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

("INSERT INTO 'user' ('name', 'pass') 
      ^^^ ^^ ^

Какие должны быть либо удалены

("INSERT INTO user (name, pass) 

или с помощью клещей, которые напоминают цитаты, но на самом деле НЕ цитата; это два разных животных.

("INSERT INTO `user` (`name`, `pass`) 

Ссылка на отборочные идентификаторов для MySQL:


Пароли

Я также заметил, что вы можете хранить пароли в виде обычного текс т. Это не рекомендуется.

Используйте один из следующих действий:

Другие ссылки:

Важно Sidenote о длине колонки:

Если и когда вам решите использовать password_hash() или crypt, важно отметить, что если длина вашего текущего столбца пароля меньше 60, его нужно будет изменить на это (или выше). В руководстве предлагается длина 255.

Вам потребуется ALTER length вашей колонки и начать с нового хэша, чтобы он вступил в силу. В противном случае MySQL будет терпеть неудачу.

0

в файле, строка 6

if(isset($_POST['username'], $_POST['password'], $_POST['desc'])) {

вы не отправлять $_POST['desc'] проверку этого.

Примечание: Лучше путь, есть еще для всех ваших, если посмотреть, что случилось

EDIT:

использование $insert->execute();

после

$insert->bind_param('ss', $username, $password);

1

Прежде всего, вы забыли добавить имя своей базы данных и пароль d в вашем Mysqli например

<?php 
    $db = new mysqli('127.0.0.1', 'root', 'your_password_for_the_user_root','yout_database_name'); 
    if($db->connect_errno) { 
     echo "<p id='gotem'>Something has gone wrong.Tell J to fix it.</p>"; 
    } 
?> 

Затем в файле register.php вы добавили индекс пост, который не будет установлен ($_POST['desc']), поэтому ваш код в ваш, если заявление не будет выполняться, так как ваша форма делает не содержать имя ввода desc.I думаю, что лучше удалите его и, пожалуйста, не забудьте выполнить подготовленное заявление. Код может быть таким.

ОБНОВЛЕНО CHANGE 'К'

if(!empty($_POST)) { 
      if(isset($_POST['username'], $_POST['password'])) { 
       $username = $_POST['username']; 
       $password = $_POST['password']; 

       if(!empty($username) && !empty($password)) { 
        $insert = $db->prepare("INSERT INTO `user` (`name`, `pass`) VALUES (?, ?)"); 
        $insert->bind_param('ss', $username, $password); 
        if (!$insert->execute()) { 
         echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
        }     
       } 
      } 
     } 

Добавление атрибута типа вашей кнопки также может быть полезным

   <form action="" method="post"> 
        <input type="text" name="username" placeholder="Username" autocomplete="off"> 
        <input type="password" name="password" placeholder="Password" autocomplete="off"> 
        <button type="submit">Register</button> 
       </form> 
+0

Используется этот метод, но после '$ insert-> bind_param ('ss', $ username, $ password);' Я включил '$ insert-> execute();'. Появилась новая ошибка: «Fatal Ошибка: вызов функции-члена bind_param() для не-объекта в [отредактированном] в строке 10 ». Любая помощь по этому вопросу будет оценена. Код: http://pastebin.com/hps1VUHp – Ebvi

+1

ОП опубликовал новый вопрос http://stackoverflow.com/q/35118877/, используя ваш код здесь, который является неправильным. Вы скопировали то, что использовали, и не избавились от недопустимых котировок для своих таблиц/столбцов. 'INSERT INTO 'user' ('name', 'pass')' неверно/неверно. –

+0

@Ebvi Я не знаю, почему вы приняли этот ответ в первую очередь, это неверно. То, что я сказал в другом комментарии, является причиной, а также одной из ваших других вопросов, которые вы опубликовали. См. Дублированный вопрос, с которым был связан ваш другой вопрос, и узнать о идентификаторах классификаторов. Условия, которые вы должны знать при кодировании с базами данных SQL. –

0

линии нет.6

Я думаю, вы добавили дополнительный параметр 'desc' в инструкцию isset, которая нигде не используется.

Изменение этой линии

if(isset($_POST['username'], $_POST['password'], $_POST['desc'])) { 

К следующей

if(isset($_POST['username'], $_POST['password'])) { 

Добавить следующий код.

Вы связываете параметр с запросом sql, но еще не выполнили.

Добавьте следующий код сразу после $ insert-> bind_param ('ss', $ username, $ password);

$insert->execute(); 

Создание сессии

Для создания сеанса вам необходимо сохранить значение сеанса в переменной сеанса. Вы можете сделать это, сохранив вновь зарегистрированный идентификатор пользователя в переменной сеанса. Добавьте следующий код сразу после $ insert-> execute();

$userid = mysqli_insert_id($db); // get newly registred userid 
$_SESSION['userid'] = $userid  // store the registred userid in session. 

Перенаправление на главную страницу

Перенаправление страницы осуществляется с помощью функции заголовка в PHP

Добавить следующий код.

header("Location: index.php"); 

На странице Индекс

Чтобы получить доступ к сессии и переменной сеанса. Добавьте следующий код в первой строке.

session_start(); 
$userid = $_SESSION['userid']; 

if(isset($userid) && !empty($userid)) { 
echo "User is logged In using user id:".$userid; 
} else { 
echo "User is not logged In" 
} 
+0

Благодарим вас за тему сеансов, перенаправление и загрузку сессий. Я получаю основную проблему (если вы хотите ее проверить, перейдите по адресу http://pastebin.com/hps1VUHp), но дополнительный материал - большая помощь. – Ebvi

+0

Я не могу получить URL. Можете ли вы отправить меня снова. – samnaikwade

+0

http://pastebin.com/hps1VUHp – Ebvi

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