2013-10-05 2 views
1

Я пытаюсь выяснить, как взять массив $_POST['custom'] и вставить значения в отдельные строки в базе данных mysql.Как я могу вставить каждое значение массива в отдельную строку в Php и MYSQL

var_dump($_POST['custom']) дает массив array(1) { [0]=> string(12) "item1, item2, " },

Я пытался Еогеасп и эхо, чтобы увидеть, если я могу производить линии по отдельности, но я просто получить весь массив, возвращаемый:

$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,"] 

Мой главный вопрос заключается в том, чтобы получить массив значений item1, item2, etc, которые будут использоваться в качестве отдельного значения для вставки данных в одну строку за единицу, так что он выглядит как первый таблица выше.

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

I Я обновил сообщение с помощью своей html-формы, я не уверен, что мне нужно изменить, чтобы получить ее так, как вы. Также я получаю сообщение об ошибке 'explode() ожидает, что параметр 2 будет строкой, массив задан в' или 'Array для преобразования строки в' 'Array', и я использовал как' ',' 'и' ',' 'не повезло – Fahad

+0

@Fahad Если вы хотите работать так, как вы ожидаете, вам придется повторять пользовательский ввод в вашей форме. В противном случае этот ответ прекрасен. – SaidbakR

+0

@ sємsєм Что значит? Как мне это сделать? – Fahad

0

Перед хранением массива в базе данных используют

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

Теперь вы готовы хранить его в БД. При извлечении значения поля на этот раз десериализации это:

$custom_array = unserialize($item); 

Здесь вы идете, ваш массив так же, как вы хранили его в БД.

+0

Комментарий пользователя: это не ваш ответ, я думаю :) Еще один взломать, как вы уже это сделали ... – Malkocoglu

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