2013-12-24 2 views
1

У меня есть динамический form, который позволяет пользователям вводить информацию и что form может быть отправлен несколько раз, и на странице будут показаны все введенные данные благодаря $_SESSION. Эта информация отправляется на другую страницу, где она будет сохранена в базе данных MySQL после отправки.Сохранить динамический массив для базы данных MySQL

Я не могу получить его, чтобы сохранить всю информацию. Если у меня есть 3 группы данных, она будет записывать только последнюю в базу данных. Как сохранить весь массив в базе данных?

Это страница, которая показывает все динамической информации:

<?php 
     $invoice_no = $_SESSION['invoice']; 
     if(isset($_SESSION['order'])) : 

      foreach($_SESSION['order'] as $sav) { 
      ?> 
      <form action="addrow.php" method="post"> 
      <label>Length</label><input type="text" name="length" value="<?php echo $sav['length']; ?>" size="2"> 
      <label>Width</label><input type="text" name="width" value="<?php echo $sav['width']; ?>" size="2"> 
      <label>Color</label><input type="text" name="color" value="<?php echo $sav['color']; ?>" size="4"> 
      <label>Quantity</label><input type="text" name="quantity" value="<?php echo $sav['quantity']; ?>" size="2"> 
      <label>Invoice Is Hidden</label><input type="hidden" name="invoice" value="<?php echo $invoice_no; ?>"> 
      <input type="hidden" name="total" value="<?php echo $sav['total']; ?>" /> 
      <input type="hidden" name="PaymentStatus" value="PAID"> 
      <br> 
      <?php } endif; ?> 
      <br><br> 
      <input type="submit" value="Submit" name="upload"> 
      </form> 

Эта страница сохраняет его в базу данных. Я не был уверен в том, как сохранить массив в базу данных, так что я использовал тот же код, чтобы показать данные сессии, и я изменил его, но не смог:

<?php 
require("addrow_info.php"); 

if(isset($_POST['upload'])) : 

$decal = array(
    'length' => $_POST['length'], 
    'width' => $_POST['width'], 
    'color' => $_POST['color'], 
    'quantity' => $_POST['quantity'], 
    'total' => $_POST['total'], 
    'invoice' => $_POST['invoice'], 
    'paymentStatus' => $_POST['PaymentStatus'], 
    'submit' => $_POST['upload'] 
); 

$_POST['order'][] = $decal; 

endif; 


if(isset($_POST['order'])) : 
foreach($_POST['order'] as $newOrder) { 


// Opens a connection to a MySQL server 
$connection=mysql_connect ("localhost", $username, $password); 
if (!$connection) { 
die('Not connected : ' . mysql_error()); 
} 

// Set the active MySQL database 
$db_selected = mysql_select_db($database, $connection); 
if (!$db_selected) { 
die ('Can\'t use db : ' . mysql_error()); 
} 

// Insert new row with user data 
$query = "INSERT INTO orders (PaymentStatus, invoice_no, length, width, color, quantity, total) VALUES ('".$newOrder['paymentStatus']."','".$newOrder['invoice']."','".$newOrder['length']."', '".$newOrder['width']."', '".$newOrder['color']."', '".$newOrder['quantity']."', '".$newOrder['total']."')"; 

$result = mysql_query($query); 

if (!$result) { 
die('Invalid query: ' . mysql_error()); 

echo "$query"; 

mysql_close(); 
} 

} endif; 

header ("location:/thankyou.php"); 

?> 

Я читал об использовании функции serialize(), но я я не уверен, что это лучше всего для того, что я пытаюсь выполнить. Я хочу, чтобы каждая группа данных сохранялась в одной строке под их соответствующим столбцом.

Он должен выглядеть следующим образом:

Length Width Color Invoice Quantity Total PaymentStatus 
5   5  Green abc123  1   2.00  PAID <--Each row is a group 
6   6  blue  def234  2   3.00  PAID 

Что является лучшим решением для сохранения в array в базу данных MySQL?

+4

лучшее решение для сохранения массива в базе данных, чтобы нормализовать данные, так что вы можете запускать соответствующие запросы. – Jessica

+1

Кстати, 'mysql_query' устарела Посмотрите на mysqli или PDO. – cHao

ответ

1
<form action="addrow.php" method="post"><?php 
    $invoice_no = $_SESSION['invoice']; 
    if(isset($_SESSION['order'])) : 

     foreach($_SESSION['order'] as $sav) { 
     ?> 

     <label>Length</label><input type="text" name="length[]" value="<?php echo $sav['length']; ?>" size="2"> 
     <label>Width</label><input type="text" name="width[]" value="<?php echo $sav['width']; ?>" size="2"> 
     <label>Color</label><input type="text" name="color[]" value="<?php echo $sav['color']; ?>" size="4"> 
     <label>Quantity</label><input type="text" name="quantity[]" value="<?php echo $sav['quantity']; ?>" size="2"> 
     <label>Invoice Is Hidden</label><input type="hidden" name="invoice[]" value="<?php echo $invoice_no; ?>"> 
     <input type="hidden" name="total[]" value="<?php echo $sav['total']; ?>" /> 
     <input type="hidden" name="PaymentStatus" value="PAID"> 

     <br> 
     <?php } endif; ?> 
     <br><br><input type="submit" value="Submit" name="upload"> 
     </form> 

     try it and print_r($_POST), I think you can make it. 

if(isset($_POST['upload'])) { 
    print_r($_POST); 
} 

Array ([длина] => Array ([0] => 2 [1] => 3 [2] => 4) [ширина] => Array ([0] => 2 [ 1] => 3 [2] => 3)

for($i=0;$i<count($_POST['length']);$i++){ 
    $order = array(
     'length'=>$_POST['length'][$i], 
     'width'=>$_POST['width'][$i]), 
     //............... 
    ); 
    $sql = "INSERT INTO orders (PaymentStatus, invoice_no, length, width, color, quantity, total) VALUES ('{$order['paymentStatus']}','{$order['invoice']}','{$order['length']}', '{$order['width']}', '{$order['color']}', '{$order['quantity']}', '{$order['total']}')"; 
    mysql_query($sql); 
} 
+0

Что я должен делать с этим? –

+0

Что вы получаете во время запуска print_r ($ _ POST); –

+0

Мне не нужна помощь с этой страницей. Эта страница отлично работает и публикует все сообщения данных сеанса , Мне нужна помощь в размещении содержимого с этой страницы в базе данных MySQL. –

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