2015-01-26 4 views
0

У меня возникают проблемы при попытке вставить («имя пользователя», как я использую в качестве примера) в mysql db .. в любом случае, как только я обновляю сайт, я получаю «успех» msgstr "сообщение, которое я установил, если он работал так, как нужно, и пустая строка вставляется в мой db. Тем не менее, он также работает обычным способом при вводе текста в текстовое поле (после того, как я получил сообщение «Успех») и нажмите «Отправить», он также вставлен в db. Но моя проблема в том, что это первая пустая вставка, которой не должно быть, я больше не знаю, как ее решить:/вставляет пустую строку в mysql db

Я также получаю уведомление в верхней части сайта, говоря «Неопределенный индекс: имя пользователя »Я понятия не имею, что я сделал неправильно:/

Вот мой код кСТАТИ:

<?php 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "pw"; 
$dbname = "dbname"; 

$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
if($conn->connect_error) { 
    die("Connection Failed: " . $conn->connect_error); 
} 

$user = $_POST["username"]; 

$sql = "INSERT INTO account (username) VALUES ('$user')"; 
if($conn->query($sql) === true) { 
    echo "Success!"; 
} else { 
    echo "Error: " . $sql . "<br />" . $conn->error; 
} 
$conn->close(); 
?> 
<form method="POST" action=""> 
    <input type="text" name="username" placeholder="Username" /><br /><br /> 
    <input type="submit" name="submit" value="Go" /> 
</form> 

Thx в Adv. :)

+0

что произойдет, если мое имя пользователя '; Учетная запись DROP TABLE; --'? – castis

+1

** ПРЕДУПРЕЖДЕНИЕ **: при использовании 'mysqli' вы должны использовать параметризованные запросы и [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить пользователя данные по вашему запросу. ** НЕ используйте ** интерполирование строк, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/). То, как вы закодировали это, будет работать только при определенных обстоятельствах и крайне рискованно. – tadman

ответ

4

1) Вы уязвимы для sql injection attacks. Наслаждайтесь наличием вашего сервера pwn3d.

2) Ваш код работает безоговорочно, КАЖДЫЙ раз страница загружается. Поэтому, когда пользователь сначала попадает на страницу, вы запускаете свой код. Поскольку форма не была отправлена, $ _POST ['username'] не определено, и вы вставляете пустую строку в БД.

На минимум вы должны иметь что-то вроде

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    ... db code here ... 
} 

так, что он работает только тогда, когда POST была выполнена.

+0

Что делать, если пользователь решает не вводить ничего на выходе? –

+0

Op не упоминал об этом, поэтому я тоже не буду. –

+0

Привет, спасибо за комменс, я добавил метод метода запроса в верхней части кода db, теперь он работает лучше, если я просто нажал enter, как сказал Фред. (не вводя ничего), он также вводит пустую строку в db: S извините за отсутствие noob>. < – Enten92