2016-01-08 4 views
-1

Я не очень люблю PHP/MySQL, так извините мое невежество. У меня есть форма входа в систему на моем веб-сайте, я создал форму для создания учетной записи, наглядно все в порядке, однако мне нужны данные, которые нужно отправить в мою таблицу учетных записей клиентов в mysql. Когда я отправляю форму, она работает, создавая ID 1, но все остальные поля пусты.Создать учетную запись, используя PHP для MySQL

PHP:

<?php 

$hostname="localhost"; 
$username="createaccount"; 
$password="******"; 
$dbname="Island_Web_Design"; 
$usertable="customer_accounts"; 
$connection = mysql_connect($hostname, $username, $password); 
mysql_select_db($dbname, $connection); 

$sql="INSERT INTO customer_accounts (firstname, lastname, email, password) 
VALUES 
('$_POST[firstname]','$_POST[lastname]','$_POST[email]','$_POST[password]')"; 


if (!mysql_query($sql,$connection)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

mysql_close($con); 

>

HTML:

<form role="form" action="Create_Account.php"> 
          <div class="row"> 
           <div class="col-xs-6 col-sm-6 col-md-6"> 
            <div class="form-group"> 
             <input type="text" name="firstname" id="firstname" class="form-control input-sm floatlabel createinput" placeholder="First Name"> 
            </div> 
           </div> 
           <div class="col-xs-6 col-sm-6 col-md-6"> 
            <div class="form-group"> 
             <input type="text" name="lastname" id="last_name" class="form-control input-sm createinput" placeholder="Last Name"> 
            </div> 
           </div> 
          </div> 
          <div class="form-group"> 
           <input type="email" name="email" id="email" class="form-control input-sm createinput" placeholder="Email Address"> 
          </div> 
          <div class="row"> 
           <div class="col-xs-6 col-sm-6 col-md-6"> 
            <div class="form-group"> 
             <input type="password" name="password" id="password" class="form-control input-sm createinput" placeholder="Password"> 
            </div> 
           </div> 
           <div class="col-xs-6 col-sm-6 col-md-6"> 
            <div class="form-group"> 
             <input type="password" name="password_confirmation" id="password_confirmation" class="form-control input-sm createinput" placeholder="Confirm Password"> 
            </div> 
           </div> 
          </div> 
          <input type="submit" name="submit" value="Create Account" class="btn btn-primary btn-block register"> 
         </form> 

Спасибо заранее.

+1

(http://stackoverflow.com/questions/60174/how-can-i- prevent-sql-injection-in-php) –

+2

Пожалуйста, прекратите использование 'mysql_ *' функций (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) , [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

+0

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

ответ

2

Для начала вы должны прекратить использовать mysql_* функции для нового кода. Он удаляется с языка в последней версии (7). Вместо этого обновите до mysqli или PDO:

Why shouldn't I use mysql_* functions in PHP?.

Во-вторых, вы должны предотвратить отверстия для инъекций SQL вы имеете в своем коде:

How can I prevent SQL-injection in PHP?

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

password_hash()

Наконец, чтобы получить на свой вопрос: если вы не говорите вашей формы POST это сделает GET запрос вместо. Измените форму на <form role="form" action="Create_Account.php" method="post">.

Вы можете и должны самостоятельно отлаживать свой код для таких проблем. Простейшей формой было бы использовать var_dump(); на ваших переменных, чтобы увидеть, содержат ли они то, что, по их мнению, они содержат. И вы также можете проверить запросы, открывая инструменты разработчика вашего любимого браузера.

Ваш код может/должен быть переписано в виде: [. Ваш скрипт находится в опасности для SQL Injection атак]

<?php 

$dbConnection = new PDO('mysql:dbname=Island_Web_Design;host=localhost;charset=utf8', 'createaccount', '******'); 

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$stmt = $dbConnection->prepare('INSERT INTO customer_accounts (firstname, lastname, email, password) VALUES (:firstname, :lastname, :email, :password'); 

try { 
    $stmt->execute([ 
     'firstname'=> $_POST[firstname], 
     'lastname' => $_POST[lastname], 
     'email' => $_POST[email], 
     'password' => password_hash($_POST[password], PASSWORD_DEFAULT, ['cost' => 14]), 
    ]); 
} catch(\PDOException $e) { 
    die('Error: ' . $e->getMessage()); 
} 

echo "1 record added"; 
+0

Благодарим вас за ответ, в идеале id нравится видеть визуально. может кто-то что-то собрать вместе, чтобы я мог понять разницу? – JoeyG

+0

Да. OP мог бы прочитать весь ответ, потому что все на вершине действительно более важно. Также вы меняете мои изменения. – Jeeves

+0

@JoeyG Я попытался добавить изображение, но, как новый пользователь, мне не разрешено добавлять дополнительные ссылки. – PeeHaa

-3

Пожалуйста, никогда не сделать это:

('$_POST[firstname]','$_POST[lastname]','$_POST[email]','$_POST[password]') 

прочитать: Is SQL Injection possible with POST?

метод Fix добавить = "пост" в виде индуктора, благодаря @jay

+0

Это было освещено в комментариях и не является ответом на вопрос. –

+0

Я только начинаю с stackoverflow, я не могу комментировать – Moon

+0

[Нетрудно заработать достаточно репутации, чтобы комментировать.] (Http://meta.stackexchange.com/questions/214173/why-do-i-need-50 -reputation-to-comment-what-can-i-do-вместо этого) –

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