2012-02-07 5 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 값만있는 경우 올바른 위치 (firstname)에 입력합니다. firstname 및 lastname 값이있는 경우 lastname 값만 입력하고 firstname 값은 입력하지 않습니다 (아직 성이 올바른 위치에 있음). 숫자도 마찬가지입니다. 이름, 성 및 번호가있는 경우 숫자 만 올바른 위치에 넣지만 다른 값은 넣지 않습니다. 또한 한 번만 할 수 있습니다. 다른 연락처를 입력하고 싶다면 그는 항상 ('PRIMARY'키에 대한 중복 항목 'myentry')라고 말합니다.

+3

당신은 SQLI 취약점이 :이 테이블의 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()); 

를 선호 또는 것입니다. – PeeHaa

답변

2

해결 방법은 두 가지입니다. 3 개의 다른 변수 또는 3 개의 쿼리가있는 1 개의 변수.

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

3 개의 검색어 모두에 대해 동일한 변수 이름 ($sql)을 사용했기 때문입니다. 대신 $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

당신이 다음 2 줄에 $의 SQL을 덮어 쓰기 때문에, 그래서 최종 SQL 라인이 삽입되는 것입니다.

SQL을 모두 같은 행에 넣으 려하면 SQL이 잘못되었습니다.

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

매번 $sql 문자열을 덮어 쓰고 있습니다.

아마도 세 개의 쿼리를 모두 추가하기 위해 .=을 사용하려고했을 것입니다. 데이터베이스 테이블의 구조는 무엇입니까?

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

$sql 문을 덮어 쓰고 있습니다. 당신은 그들을 실행해야합니다. 함으로써 :

$sql = "Insert INTO..." 

당신은 단순히 변수를 설정합니다. mysql_query()을 사용하여 각 쿼리를 처리해야합니다. 당신은 SQL을 피하기이에

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

감사 :

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

마지막으로, 당신이 당신의 입력을 소독 중요입니다 :

나는 또한이 작업을 수행 할 같은데요 주사 공격.

관련 문제