2014-02-14 4 views
0

Я делаю таблицу пользователей.PHP: insert into создает 2 строки

Стол изготовлен так:

CREATE TABLE `a9025688_chat`.`users` (
    `id` INT(10) NOT NULL AUTO_INCREMENT , 
    `username` VARCHAR(20) NOT NULL , 
    `password` VARCHAR(40) NOT NULL , 
    PRIMARY KEY (`id`) 
) ENGINE = MYISAM 

код PHP Я использую это:

<?php 
$hostname_localhost ="***"; 
$database_localhost ="***"; 
$username_localhost ="***"; 
$password_localhost ="***"; 

$localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost) 
or 
trigger_error(mysql_error(),E_USER_ERROR); 

mysql_select_db($database_localhost, $localhost); 

$username = $_POST['username']; 
$password = $_POST['password']; 


$sql = "INSERT INTO `a9025688_chat`.`users` (
`id` , 
`username` , 
`password` 
) VALUES (NULL , '$username', '$password' 
)"; 
$result = mysql_query($sql); 
if (!$result) die ("db access failed"); 

?> 

Однако, когда я пытаюсь сделать пользователю, это создает два из них. Здесь что-то не хватает?

+0

Это все из код? –

+0

Это все код php + mysql. – user3308491

+0

В вашем коде есть SQL-инъекция, что является серьезной проблемой безопасности. [Подробнее об этом здесь] (http://php.net/manual/en/security.database.sql-injection.php) – Carpetsmoker

ответ

0

Пожалуйста, не используйте функции mysql_*!

НИКОГДА НЕ используйте значения непосредственно от $_POST без фильтрации и подготовки.

Использование PDO по многим причинам, включая безопасность. Для более подробной информации см this tutorial

Вот another example о том, как использовать PDO

Существует даже простой в использовании класс-обертку, если вам нужна помощь по началу работы: PDO Wrapper

+0

Я так считаю. Человек должен отбросить свой код и начать все заново. – CommandZ

+0

Да, ты прав. Я откладывал проверку безопасности, но плохо сделал это сначала, и проблема могла бы исправить себя! – user3308491

+0

Когда я начал писать код PHP, я начал использовать функции mysql_ *, и он был у меня в канаве и вызвал всевозможные проблемы. Когда я ушел от этого, мне стало легче. Попробуйте PDO Wrapper. Это хороший уровень абстракции для слоя абстракции. Однако не вся документация завершена. Вам нужно будет взглянуть на класс внутри, чтобы увидеть его полную силу. Однако основы легки. – CommandZ

0

Почему вы вставляете нуль для ID? Возможно, это то, что заставляет его вставлять две строки. Вы никогда не должны делать вставку с передачей null для первичного ключа.

0

Нет проблем с данным кодом. возможно, что-то перекомпостирует ваши данные (или обновит страницу) после вставки. проверьте свои возможные javascripts или дополнения к браузеру.