2013-05-30 4 views
0

Я пытаюсь изо всех сил вставлять в mysql db через php-форму и im запускать проблему, когда вводится только второе поле формы, но не первое.Вставка в mysql с php

EDIT

Вот код после перезаписи.

HTML

<form action="submit.php" method="post"> 
First Name: <input name="first_name" type="text" size="20" maxlength="25"><br> 
Last Name: <input name="last_name" type="text" size="20" maxlength="25"><br> 
</form> 

PHP

$dbhost = 'xx'; 
$dbname = 'xx'; 
$dbuser = 'xx'; 
$dbpass = 'xx'; 
$con = mysqli_connect($dbhost, $dbuser, $dbpass); 


$first_name = mysqli_real_escape_string($con, $_POST['first_name']); 
$last_name = mysqli_real_escape_string($con, $_POST['last_name']); 


$query = "INSERT INTO tbl_customerinfotest VALUES ('$first_name','$last_name');"; 
echo $query; 

mysqli_close($con) 

база данных подключается хорошо .. но все тот же вопрос. Имя дает нулевое значение. Выполнение печати на $ пост дает мне: Array ([first_name] => [last_name] => Коллингвуд

EDIT Я изменил имя формы в ПгвЬЫате без _ и теперь он работает

? Кроме того, это более безопасно теперь, когда это SQLI бы следующий шаг в области безопасности будет использовать подготовленное заявление

+3

пожалуйста дезинфицировать ввода пользователя, прежде чем взломан. –

+1

Любые ошибки sql? Попробуйте mysql_query ($ sql) или die (mysql_error()); 'для вывода каких-либо ошибок. Также обратите внимание, что ваш метод уязвим для [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). Рассмотрите возможность дезинфекции пользовательских значений или, еще лучше, используйте PDO. – showdev

+2

Пожалуйста, используйте mysqli, если вы используете устаревшие функции mysql, и также кажется, что это будет уязвимым для инъекций. – wazy

ответ

3

Я бы сначала получить отправленные данные в переменные, как это (я также добавляет функцию, которая действительно важна real_escape_string):

$first_name = mysql_real_escape_string($_POST['first_name']); 
$last_name = mysql_real_escape_string($_POST['last_name']); 

Обратите внимание одинарные кавычки внутри массива $ _POST

А затем попробуйте выполнить запрос:

INSERT INTO tbl_customerinfotest (first_name, last_name) VALUES ('$first_name','$last_name')"; 

Наконец, вы используете функции mysqli или PDO, так как mysql_ * устарели.

Если он по-прежнему не работает, добавьте print_r($_POST);, добавьте начало своего PHP-скрипта, чтобы узнать, правильно ли опубликованы данные и имеют правильные имена.

+0

Хорошо, позволь мне дать ему вихрь. Похоже, мне нужно выяснить, как это происходит в Mysqli из вышеперечисленных сообщений. Я использую этот код, поскольку это был пример кода, приведенный в w3cschools. –

+0

Если вы знакомы с 'mysql_ *' функциями, используйте 'mysqli_ *'. Они почти одинаковы :) –

+0

Попробуйте сначала со своими старыми функциями 'mysql_ *', чтобы убедиться, что синтаксис в порядке и что нет других ошибок. Затем перейдите в mysqli. Обратите внимание, что для большинства функций 'mysqli_ *' нужен идентификатор ссылки в качестве первого аргумента. Эта ссылка - это то, что вы получаете при подключении к базе данных. См.

1

EDIT:?

в ответ на редактирование ФП в этом отлично работает для меня:

Index.html

<form action="submit.php" method="post"> 
First Name: <input name="first_name" type="text" size="20" maxlength="25"><br> 
Last Name: <input name="last_name" type="text" size="20" maxlength="25"><br> 
<input type="submit" value="Submit"> 
</form> 

Submit.php

<?php 
    $dbhost = ''; 
    $dbname = ''; 
    $dbuser = ''; 
    $dbpass = ''; 
    $con = mysqli_connect($dbhost, $dbuser, $dbpass); 


    $first_name = mysqli_real_escape_string($con, $_POST['first_name']); 
    $last_name = mysqli_real_escape_string($con, $_POST['last_name']); 


    $query = "INSERT INTO test.tbl_customerinfotest VALUES ('$first_name','$last_name');"; 
    echo $query; 

    mysqli_query($con, $query); 
    echo mysqli_error(); 

    mysqli_close($con) 
?> 

Это гораздо лучше использовать Mysqli функцию теперь вместо устаревшего mysql_ * один. Прочтите здесь документы http://us2.php.net/manual/en/mysqli.overview.php для более подробного объяснения того, почему вы должны использовать mysqli_ * над mysql_ *.

+0

Я добавил код и получаю следующий вывод. Подключено к базе данныхINSERT INTO tbl_customerinfotest (first_name, last_name) VALUES ('', 'collingwood') –

+0

Вы видите, что в вашем запросе нет ни одного имени. См. Ответ Марсело, поскольку он более подробный и излишний для меня, чтобы повторить большую часть этого. – wazy

0

Попробуйте это:

$sql="INSERT INTO tbl_customerinfotest (first_name, last_name) VALUES ('%s','%s')"; 
$sql = sprintf($sql, $_POST['first_name'], $_POST['last_name']); 
1

От того, что я вижу, это должно работать, но я думаю, что есть часть кода, который вы не опубликовали, это что-то испортить.

При кодировании PHP у вас всегда должны быть предупреждения PHP!

Как и другие упомянули вы необходимо дезинфицировать данные, прежде чем использовать его, это означает, что вы должны проверить его для любого нежелательного входа (это, где регулярные выражения функции очень удобны)

Кроме того, ваш HTML код имеет незакрытые теги !

<input name="first_name" type="text" size="20" maxlength="25"><br> 

должен быть

<input name="first_name" type="text" size="20" maxlength="25" /><br /> 
+0

По какой-то причине причина _ в first_name. Исправлена ​​проблема с изменением его имени. –

+0

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

+0

В любом случае, рад, что вы это решили, но попробуйте следовать данным советам и дезинфицировать данные перед их использованием, что также означает проверить наличие (то, что PHP предупредит вас о том, что вы активируете предупреждения PHP во время разработки) –

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