php - 如何使用 PHP 将 session 数组插入 MySQL DB

标签 php mysql arrays session insert

我有一个多页表单,正在 try catch 一个数组作为 session 插入到 mysql 中。表格的第二页是“地址”部分。在这里我要求提供地址信息。用户可以点击“输入另一个地址”按钮来展开另一个框。

用户点击“下一步”进入下一页(phone.php),我在其中询问电话信息。在此页面上,我认为我正在正确注册 session 数据,如下所示:

if(!isset($_SESSION)) 
{ 
@session_start(); 
}  
header("Cache-control: private");
ob_start();

include('header.php');

//now, let's register our session variables from address.php
session_register('addressLineOne');
session_register('addressLineTwo');

//finally, let's store our posted values in the session variables
$_SESSION['addressLineOne'] = $_POST['addressLineOne'];
$_SESSION['addressLineTwo'] = $_POST['addressLineTwo'];

最终我们点击了submit.php。如果我禁用代码来添加附加地址,这就是我正在使用的插入,效果很好。

 $insertAddress="INSERT INTO address (idperson, addressLineOne, addressLineTwo)
 VALUES ( '$id','$_SESSION[addressLineOne]','$_SESSION[addressLineTwo]')";
 if (!mysql_query($insertAddress,$con))
   {die('Error: ' . mysql_error());}
 echo "";

当我启用“添加附加地址”代码时,上面的插入会将“ARRAY”插入到每个数据库字段中。我一直在尝试以下方法:

 foreach($_SESSION['idperson'] as $row=>$id)
{
    $idperson=$id;
    $addressLineOne=$_SESSION['addressLineOne'][$row];
    $addressLineTwo=$_SESSION['addressLineTwo'][$row];
}
 //enter rows into database
 foreach($_SESSION['idperson'] as $row=>$id)
{
    $idperson=mysql_real_escape_string($id);
    $addressLineOne=mysql_real_escape_string($_SESSION['addressLineOne'][$row]);
    $addressLineTwo=mysql_real_escape_string($_SESSION['addressLineTwo'][$row]);
}

 $insertAddress="INSERT INTO address (idperson, addressLineOne, addressLineTwo)
 VALUES ('.$id.','.$addressLineOne.','.$addressLineTwo.')";

 if (!mysql_query($insertAddress,$con))
 {
 die('Error: ' . mysql_error());
 }
 echo "$row record added";

然而,上面的代码并没有起作用,只是在数据库中插入了几个像“...”的点。我不知道还能做什么。我没有正确抓取 session 数据吗?我的 foreach 代码离题了吗?感谢您的帮助。

这是我用来在 address.php 上添加另一个表的代码:

 <?php for($i=1; $i<6; $i++):?>
 <div id='hidden<?php echo $i; ?>' style='display: none'>
<tr class="odd">
    <td width="33%">Street/Number</td>
    <td><input type="text" name="addressLineOne[]" id="addressLineOne<?php echo $i; ?>"/></td>
</tr>
<tr>
    <td>Address 2</td>
    <td><input type="text" name="addressLineTwo[]" id="addressLineTwo<?php echo $i; ?>"/></td>
</tr>
 <?php endfor; ?> 

Submit.php 除了连接到数据库和上面的插入之外没有任何东西。

最佳答案

所以只需进行一些清理:

你的第一个区 block :

无需条件调用session_start ,在脚本顶部调用它是安全的。另外,不要抑制警告,如果您收到警告,请找到根本原因并消除它们。

session_start();
header("Cache-control: private");
ob_start();
include('header.php');

无需使用 session_register 注册 session 变量,它现在已被弃用,手册上说不要使用它——特别是不要将它与 $_SESSION 混合使用。套。

$_SESSION['addressLineOne'] = $_POST['addressLineOne'];
$_SESSION['addressLineTwo'] = $_POST['addressLineTwo'];

所以$_SESSION现在至少包含两个与刚刚设置的键相对应的键。

您的其余问题可能源于错误地迭代数组结构(向我们展示更多代码)。

对第二个 block 进行一些清理:

没有必要迭代你的列表两次——假设你迭代正确,你只需要遍历一次并每次运行插入(而不是在最后)。这确实假设您希望每个由 id 索引的地址一行。

此外,您可能会重新考虑使用 die作为一种错误控制机制,它会简单地终止整个脚本执行——这真的是您想要的吗?

// enter rows into database
foreach($_SESSION['addressLineOne'] as $row => $id){
    $idperson = mysql_real_escape_string($_SESSION['idperson']);
    $addressLineOne = mysql_real_escape_string($_SESSION['addressLineOne'][$row]);
    $addressLineTwo = mysql_real_escape_string($_SESSION['addressLineTwo'][$row]);
    $insertAddress="INSERT INTO address (idperson, addressLineOne, addressLineTwo)
                    VALUES ('.$id.','.$addressLineOne.','.$addressLineTwo.')";
    if(!mysql_query($insertAddress,$con)){
        // maybe not the best use of `die` here?
        die('Error: ' . mysql_error());
    }
    echo "$row record added";
}

关于php - 如何使用 PHP 将 session 数组插入 MySQL DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4772265/

相关文章:

java - PHP 的 print_r 函数在 Java 中的等价物是什么?

mysql - 如何用 JOIN 重写这个语句,使其更快?

php - 通过给定字段通过 UNION 组加入 2 个表,并仅获取该组的最新信息

php - Mysql返回特殊字符时的类型

php - 如何保护容器即服务(caas)中的源代码和数据库结构?

php数据库更新问题

MySQL HAVING 在 GROUP_CONCAT 中具有特定编号

JavaScript 按字符串中的数字排序

C++:平均数和众数

ios - 无法使用类型为 '[[String : Any]]' 的索引下标类型为 'String' 的值