2014-01-13 2 views
0

У меня возникли проблемы с получением практика Форма регистрации представить данные в свою базу данных ...PHP не вставляя в таблицы

<!DOCTYPE HTML> 
<html> 
<head> 
</head> 
<body> 

<?php 
$name = $email = $password = ""; 
?> 

<form method="post"> 
Name: <input type="text" name="name"> 
<br><br> 
E-mail: <input type="text" name="email"> 
<br><br> 
Password: <input type="text" name="password"> 
<br><br> 
<input type="submit" value="Submit" name="submit"> 
</form> 

<?php 
if(isset($_POST['submit'])){ 
    $name = fix_input($_POST["name"]); 
    $email = fix_input($_POST["email"]); 
    $password = fix_input($_POST["password"]); 
    mysqli_connect("localhost","username","password","dbname") or     die(mysql_error()); 
    mysql_query("INSERT INTO ('username','password') VALUES ('$name', md5('$password'))"); 
    Print "You've been signed up successfully"; } 


function fix_input($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
?> 

</body> 
</html> 
+0

Sidenote: Это больше не считается безопасным для использования 'md5' для хранения паролей. Технология восходит к 1996 году. –

+0

что бы вы порекомендовали? –

+0

Это => http: // php.net/password –

ответ

1

В дополнение к ответу UĞUR, в вы несовместимы с командами mysqli и командами mysql. Вот как это сделать в ориентированной моде объекта:

// create mysqli database object 
$mysqli = new mysqli_connect("localhost","username","password","database"); 
// store your query in a variable. question marks are filled by variables 
$sql = "INSERT INTO table_name ('username','password') VALUES (?,?)"; 
// prepare command uses $sql variable as query 
$stmt = mysqli->prepare($sql); 
// "ss" means your 2 variables are strings, then you pass your two variables. 
$stmt->bind_param("ss",$name,md5($password)); 
// execute does as it seems, executes the query. 
$stmt->execute(); 
// then print your success message here. 

Использования подготовленных заявлений устраняет необходимость санитарной обработки пользовательского ввода, как вредный вход не подставляется в запрос непосредственно. Для более чтений:

http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

Есть некоторые хорошие советы по использованию подготовленных заявлений в различных сценариях, а также к низу, есть объяснение того, как подготовлены заявления предотвратить инъекции SQL.

+0

для $ stmt-> bind_param («ss», $ name, md5 ($ password)); Я получаю сообщение об ошибке «Вызов функции-члена bind_param() для не-объекта» –

+0

Я редактировал свой ответ, чтобы включить «новое» ключевое слово при создании объекта «$ mysqli». Таким образом, «$ mysqli = new mysqli_connect (...);» исправят эту ошибку. – EnergyWasRaw

+0

Кроме того, предоставляется дополнительная информация о том, почему этот подход рекомендуется. – EnergyWasRaw

1

недостающее имя таблицы

mysql_query("INSERT INTO ...... ('username','password') VALUES ('$name', md5('$password'))"); 
+0

спасибо .... Я был слишком занят, смотря на php и просматривая возможные ошибки sql –

1

Вы смешивание mysql_* с mysqli_* функции, т.е .: mysqli_connect и mysql_query и вы оборачивать ваши имена столбцов в кавычках, плюс вы теряете имя таблицы для вставки в.

Попробуйте следующее, фиксированный код:

if(isset($_POST['submit'])){ 
$name = fix_input($_POST["name"]); 
$email = fix_input($_POST["email"]); 
$password = fix_input($_POST["password"]); 
mysqli_connect("localhost","username","password","dbname") or die(mysql_error()); 
mysqli_query("INSERT INTO `your_table` (`username`,`password`) VALUES ('$name', md5('$password'))"); 
Print "You've been signed up successfully"; } 

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

Я предлагаю вам заглянуть в password функции РНР: http://php.net/password

И если у вас возникли проблемы с fix_input() функции, вы должны рассмотреть возможность использования функции mysqli_real_escape_string().

затем настраивает соединение БД, передавая ему переменную.

$DB_HOST = "xxx"; 
$DB_NAME = "xxx"; 
$DB_PASS = "xxx"; 
$DB_USER = "xxx"; 

$db = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 
if($db->connect_errno > 0) { 
    die('Connection failed [' . $db->connect_error . ']'); 
} 

и вместо использования:

$name = fix_input($_POST["name"]); 

использовать следующее:

$name= mysqli_real_escape_string($db, $_POST['name']); 

и сделать то же самое для остальных.

0

У вас нет имени таблицы в вашем запросе! также не используйте цитату в названии столбца :)

Вы перепутали mysqli и mysql.
Изменение

mysql_query("INSERT INTO ('username','password') VALUES ('$name', md5('$password'))"); 

в

mysqli_query("INSERT INTO yoour_table(username',password) VALUES ('$name', md5('$password'))"); 
Смежные вопросы