2012-02-07 2 views
0

У меня почти нет опыта работы с PHP, и сейчас я застрял в общем начале, что очень расстраивает. У меня есть код, который, похоже, работает. Из моего приложения я могу вводить значения и помещать их в свою базу PHP. Дело в том, что он вводит самое последнее значение из моего PHP-кода. Поэтому приложение в стороне: если я использую только PHP-код для ввода чего-то в моей базе данных, он всегда принимает только последнее значение. Вот мой код:База данных PHP вводит только последнее значение

<?php 
$DB_HostName = "localhost"; 
$DB_Name = "xxx"; 
$DB_User = "xxx"; 
$DB_Pass = "xxx"; 
$DB_Table = "contacts"; 

if (isset ($_GET["name"])) 
    $name = $_GET["name"]; 
else 
    $name = "Blade"; 

if (isset ($_GET["lastname"])) 
    $lastname = $_GET["lastname"]; 
else 
    $lastname = "Xcoder"; 

if (isset ($_GET["number"])) 
    $number = $_GET["number"]; 
else 
    $number = "111"; 

$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error()); 
mysql_select_db($DB_Name,$con) or die(mysql_error()); 

$sql = "insert into $DB_Table (Firtname) values('$name');"; 
$sql = "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql = "insert into $DB_Table (Number) values('$number');"; 

$res = mysql_query($sql,$con) or die(mysql_error()); 

mysql_close($con); 
if ($res) { 
    echo "success"; 
}else{ 
    echo "faild"; 
}// end else 
?> 

Для уточнения: Если у меня есть только значение ПгвЬЫата, он вводит его в нужном месте (имя). Если у меня есть значение firstname и lastname, он вводит только значение lastname, но не значение firstname (все еще в нужном месте lastname). И то же самое для числа. Если у меня есть имя, фамилия и номер, он помещает только номер в нужное место, но не другие значения. Кроме того, я могу сделать это только один раз. Если я хочу ввести другой контакт, он всегда говорит (Дублировать запись «myentry» для ключа «PRIMARY»).

+3

У вас есть уязвимость SQLI. – PeeHaa

ответ

2

Вы переписываете свой запрос, 2 способа решения. Либо 3 разных переменных, либо 1 переменная с тремя запросами. Я предпочел бы 2 вариант

$sql = "insert into $DB_Table (Firtname) values('$name');"; 
$sql .= "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql .= "insert into $DB_Table (Number) values('$number');"; 

$res = mysql_query($sql,$con) or die(mysql_error()); 

Или, если это может быть 1 строка в таблице, так как это та же таблица в любом случае:

$sql = "insert into $DB_Table (Firtname,Lastname,Number) values('$name','$lastname','$number');"; 
$res = mysql_query($sql,$con) or die(mysql_error()); 
0

Это потому, что вы используете одно и то же имя переменной ($sql) для всех 3 запросов. Используйте вместо этого $sql1, $sql2 и $sql3. Также звоните mysql_query для каждого (но только если вы его установили).

Как это:

$sql1 = "insert into $DB_Table (Firtname) values('$name');"; 
$sql2 = "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql3 = "insert into $DB_Table (Number) values('$number');"; 

if (isset ($sql1)) 
{ 
    $res1 = mysql_query($sql1,$con) or die(mysql_error()); 
} 

if (isset ($sql2)) 
{ 
    $res2 = mysql_query($sql2,$con) or die(mysql_error()); 
} 

if (isset ($sql3)) 
{ 
    $res3 = mysql_query($sql3,$con) or die(mysql_error()); 
} 
+0

Плохой совет, так как стол все тот же, его sql плохо все вместе. – thenetimp

+0

Хорошо, все можно сделать в одном запросе. Но, по крайней мере, он исправляет свою проблему ... –

2

Поскольку вы перезапись $ SQL на следующих 2-х линий, поэтому окончательный SQL строка, что вставлена.

Ваш код неверен, если вы хотите, чтобы все они были в одной строке.

$sql = "insert into $DB_Table (Firtname,lastname,number) values('$name','$lastname','$number');"; 
2

Вы перезапись $sql строки каждый раз.

Возможно, вы хотели использовать .=, чтобы добавить все три запроса вместе. Какова структура таблиц базы данных?

2

Вы переписываете свои $sql заявления. Вы должны их исполнить. Выполнение:

$sql = "Insert INTO..." 

Вы просто задаете переменную. Вам нужно выполнить каждый запрос, используя mysql_query().

Я также предполагаю, что вы хотите сделать это:

$sql = "INSERT INTO $DB_TABLE (Firstname, Lastname, Number) VALUES ('$name', '$lastname', '$number') 

Наконец, важно, что вы дезинфицировать свои входы:

$name = mysql_real_escape_string($_GET["name"]); 

Благодаря этому вы избежать SQL Инъекционная атака.

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