2011-04-16 109 views
1

我正在制作一个包含5个产品的简单订单,它们可以通过用户的复选框进行选择,然后我想将访问者将要选择的产品添加到mysql数据库中,但正如你知道例如INSERT数组[]做的工作!将数组添加到Mysql的最佳方式是什么

我用PHP做了一个FOR的努力,但它只添加了数组的最后一个产品!

我知道一个序列化和反序列化PHP函数的方式,但我真的不喜欢它!

谢谢你的帮助。

下面是代码:

$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 
$products = $_POST['products']; 
$email = $_POST['email']; 

echo '<h3>Sehr geehrte/er '.$firstname.' '.$lastname.'</h3>'; 


    if(empty($products)) 
    { 
    echo("Keine bestellung."); 
    } 
    else 
    { 
    $N = count($products); 

    echo("Sie haben $N produkte bestellt:<br /> "); 
    for($i=0; $i < $N; $i++) 
    { 
     echo $order = ($products[$i]);  
    } 
    $query = "INSERT INTO salt_orders (products, vorname, nachname, date) 
     VALUES ('$order', '$firstname', '$lastname', NOW())"; 
    $result = mysql_query($query); 
    } 
+2

正常化数据库....为每个产品创建一个order_line – 2011-04-16 22:52:33

+0

是否要将5个产品插入'salt_orders'表的一行?或成5行? – 2011-04-16 23:17:24

+0

@ypercube是成一行 – TooCooL 2011-04-16 23:21:22

回答

1

创建一个单独的表,引用您的产品和他们的详细资料。然后创建另一个表来保存订单行项目。

当客户下订单时,在行项目表中插入一条新行,用于引用他们购买的产品和应用的订单号。在包含订单编号的salt_orders中创建一条记录。

然后您可以通过将它们连接在一起检索完整的订单详细信息而将其全部退出。

将多个产品添加到一行中的一个单元格会使其对您非常困难,所以我建议像上面所述的那样对数据进行规范化。

这只是一个简单的例子,它可以更复杂,取决于你需要做什么。

1

您可以使用此Concat的产品在一个领域:

$order = ""; 
for($i=0; $i < $N; $i++) 
{ 
    echo $order .= $products[$i] . "," ;  
} 
$order = substr($order ,0 ,strlen($order)-1) ; 

但你真的应该考虑你的订单表的正常化,因为所有其他建议。

1

是的,正常化是你可能错过的。完成后,将函数添加到数据库中,以处理插入到标准化表中的操作。 这样数据的逻辑保留在数据中。

相关问题