我有一个多页表单,正在 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/