2012-06-13 4 views
-1

Website.(PHP) 삽입 된 데이터는 "배열"이것은 일반적인 문제 같은 느낌

로 MySQL에 나타납니다,하지만 구글에 어려운 일입니다!

코드의 주석에서 설명한대로 값을 삽입하는 것은 이전에는 문제가 아니었지만 그 아래에 추가 INSERT 쿼리를 추가했을 때 작동을 멈췄습니다. 당신의 웹 사이트에

$user = $_POST['name']; 
$night = $_POST['club']; 
$query = mysql_query("SELECT day FROM nights WHERE name = '$night'"); 
$email = $_POST['email']; 

while ($row = mysql_fetch_assoc($query)) { 

    $date = getFullDateString($row['day']); 
    $date2 = getDateString($row['day']); 

} 

// this one previously worked but now enters into the database with $user as "Array" 
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$user', '$night', '$date') ") or die(mysql_error()); 

$guest1 = $_POST['name1']; 
$guest2 = $_POST['name2']; 

// these were added later and work fine but seem to have had an effect on the query above 
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$guest1', '$night', '$date') ") or die(mysql_error()); 
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$guest2', '$night', '$date') ") or die(mysql_error()); 

foreach ($_POST as $key){ 
    if (is_array($key)){ 
     foreach ($key as $key2 => $value){ 
      mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$value', '$night', '$date') ") or die(mysql_error()); 

     } 
    } 
} 
+1

4 개의 인서트 중 지금 어떤 작업을하고 있습니까? –

+0

$ value is_array를 사용하여 배열을 검사합니다. 그리고 당신의 코드는 mysql 인젝션을 요구합니다. –

+1

오, 안돼, SQL 주입! 귀하의 코드는 공격에 매우 취약합니다. mysql_real_escape_string 또는 더 나은 PDO를 사용하십시오. – kapa

답변

1

게스트 HTML 입력의 이름을 다시 name 대신 guests[]으로 변경해야합니다. 이름 충돌이 있습니다.

var name = $("<p><input class='input' type='text' name='guests[]' value='' /></p>"); 

그리고 당신의 HTML 코드 :

당신은 당신의 자바 스크립트 코드에서이 문제를 해결해야 할 그 후

<input class="input" type="text" name="guests[]" /> 

, 배열로 게스트 변수를 처리해야 PHP 코드 :

$guests = $_POST['guests']; 

foreach ($guests as $guest) 
{ 
    mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$guest', '$night', '$date') ") 
    or die(mysql_error()); 
} 

guests[1], guests[2], guests[3]

+0

이것은 가장 효율적인 솔루션입니다. – matchdav

1

당신은이 :

<input class='input' type='text' name='name["+currentArrayNum+"]' value='' /> 

양식을 생성 할 수 있습니다. name[...] 인수는 배열이 될 $_POST['name']으로 PHP에서 끝납니다. 이것을 강제로 문자열로 만들면 문자열은 Array이됩니다. 따라서 $user을 가져 와서 foreach을 사용하여 반복하여 각 이름을 처리하십시오.

또한 SQL 인젝션을 읽어보십시오!

0

당신은 다음과 같이 양식 필드를 삽입되는 페이지에 일부 자바 스크립트가 있습니다

<input class="input" type="text" name="name[5]" value=""> 

여기에 문제의 원인이 뭐죠 name="name[5]" 부분은 - 제출 한 경우는 배열에 $_POST['name']을집니다. 해당 코드를 리팩터링해야합니다.