2013-10-05 45 views
1

我想弄清楚如何採取數組$_POST['custom']並將值插入MySQL數據庫中的單獨的行。我怎樣才能插入每個數組值作爲一個單獨的行在PHP和MYSQL

var_dump($_POST['custom'])使得數組array(1) { [0]=> string(12) "item1, item2, " }

我試過的foreach和回聲,看看我是否可以單獨生產線,但我只是得到整個數組返回:

$array = $_POST['custom']; 

foreach ($array as $item) 
{ 
    echo $item,'-'; 
} 

和輸出是item1, item2, -而不是item1-item2

我試圖做的是將每個項目插入一個單獨的行,以及購買該項目的user_id - 例如:

user_id | item 
----------------- 
user_1 | item1 
user_1 | item2 

我可以用json_encode($_POST['custom']),然後你的標準插入查詢,即使格式化有點奇怪用引號和[]插入單行(我都試過破滅和爆炸他們不這樣做工作 - 但我現在可以接受這一點)。這表看起來像

user_id | item 
----------------- 
user_1 | ["item1,item2,"] 

我的主要問題是如何獲取值item1item2etc被用作個人價值將數據插入到每件單排,使得它看起來像第一個數組上面的表格。

EDIT

HTML表單

<form name="paypalCheckout" action="<?php echo PPCART_URL; ?>" method="post"> 

      <input type="HIDDEN" name="business" value="<?php echo PPCART_ACCOUNT; ?>"> 
      <input type="HIDDEN" name="cmd" value="_cart"> 
      <input type="HIDDEN" name="upload" value="1"> 
      <input type="hidden" name="currency_code" value="<?php echo PPCART_CURRENCY; ?>"> 
      <input type="hidden" name="lc" value="<?php echo PPCART_COUNTRY; ?>"> 
      <input type="hidden" name="return" value="<?php echo PPCART_RETURN_URL; ?>"> 
      <?php 
      if (isset ($_SESSION['paypalCart'])) 
      { 
       foreach($_SESSION['paypalCart'] as $product) 
        { 
        $custom .= $product['name'].","; 


        } 
      } 
      ?> 
      <input type="hidden" name="custom" value="<?php echo $custom?>"> 
      //<input type="hidden" name="custom[]" value="<?php echo $custom?>"> I have also tried this 

相關部分是$custom變量 - 它是作爲$custom="";

解已初始化

    <?php 
      if (isset ($_SESSION['paypalCart'])) 
      { 
       foreach($_SESSION['paypalCart'] as $product) 
        { 
        $custom .= $product['name'].","; 


        } 
      } 
      ?> 
      <input type="hidden" name="custom" value="<?php echo $custom?>"> 

然後在處理PHP文件我有

$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 


$user_id = "Test"; 
$custom = $_POST['custom']; 
//print_r($_POST['custom']); This is good to see what your array looks like before it gets trimmed 

$trim = rtrim($custom, ","); 
$explode = explode(',',$trim); 
//print_r($_POST['custom']); Good way to check what it looks like after being trimmed to make sure you have trimmed it correctly. 

foreach ($explode as $course_id) 
{ 
    $sql = $db->query("INSERT INTO `subscriptions`(`user_id`, `course_id`) VALUES ('".$user_id."','".$course_id."')"); 

    if($sql) 
    { 
    echo "it's good"; 

    } 
    else 
    echo "no good", mysql_error(); 

} 
+0

向我們展示您的html表單或看看「爆炸」 – worenga

+0

您能否顯示print_r的輸出($ _ POST ['custom']) – Malkocoglu

+0

@Malkocoglu print_r給我'Array([0] => item1, item2,)' – Fahad

回答

3

你的陣列是:

[0] => "item1, item2, " 

,而不是:

[0] => "item1", 
[1] => "item2" 

你必須explode你的價值首先由逗號,如果這是一個合適的分隔符(以及之後的trim)。

+0

已經用我的html表單更新了這篇文章,我不知道我需要改變以按照你的方式來改變。另外我得到的錯誤'explode()期望參數2是字符串,數組中給出的數組或''數組中的數組到字符串的轉換,並且我同時使用了'',''和'','',但沒有運氣 – Fahad

+0

@Fahad如果您希望按照您的期望工作,那麼您必須在表單中重複自定義輸入。否則,這個答案是完美的。 – SaidbakR

+0

@sємsєм你的意思是?我會怎麼做? – Fahad

0

之前在數據庫中存儲陣列使用

$item = serialize($_POST["custom"]); 

現在,您可以將其存儲在數據庫中。當您檢索字段值時,這次將其反序列化:

$custom_array = unserialize($item); 

在這裏,您的數組就像您存儲在數據庫中一樣。

+0

自我評論:這不是你的答案,我認爲:)只是像你一樣的黑客已經做了... – Malkocoglu

相關問題