0

这是收集雇主历史并将该数据存储到二维数组中的表格,然后我试图将该信息存储到 mysql 数据库中的表中employment。它没有给我任何错误,但它无法将数据存储到 mysql 中。

form1.php

<form action="result.php" method="post">
        <table width="676" border="0" cellspacing="0" cellpadding="7" align="center">
            <tr><td colspan="6" bgcolor="#C0C0C0">EMPLOYMENT HISTORY</td></tr>
<?php

for ($x=0; $x<2; $x++) 
{ 
?>
            <tr>
                <td colspan="3" align="left">NAME OF EMPLOYER<br>
                        <input type="text" name="emp[emp_name][]" size="38"></td>

                <td align="left">JOB TITLE <br>
                    <input type="text" name="emp[emp_title][]" size="32"></td>
            </tr>
            <tr>
                <td colspan="5" valign="top">ADDRESS<br>
                        <input type="text" name="emp[emp_addr][]" size="58"></td>
            </tr>
            <tr>
                <td colspan="2" valign="top">REASON FOR LEAVING<br>
                        <textarea name="emp[emp_reason][]" cols="25" rows="3"></textarea></td>
            </tr>
            <tr>
                <td align="left">DATE STARTED<br>
                        <input type="text" name="emp[emp_start][]" size="8"></td>
                <td align="left">DATE ENDED<br>
                        <input type="text" name="emp[emp_end][]" size="8"></td>
                <td colspan="2" align="left">TYPE OF BUSINESS<br>
                        <input type="text" name="emp[emp_btype][]" size="15"></td>
            </tr>
            <tr><td colspan="6" bgcolor="#C0C0C0">&nbsp;</td></tr>
<?php } ?>
</table>
<input type="submit" name="submit" value="SUBMIT">&nbsp;&nbsp;<input type="reset" value="RESET">
</form>

这是结果.php

 <?php
// open connection to the database
mysql_connect('localhost', 'user', 'pass');
mysql_select_db('userdb');

// get all the values
$app_id = 5;
$app_emp = array($emp => array(
                                   $emp_name => $_POST["emp_name"],
                                   $emp_title => $_POST["emp_title"],
                                   $emp_addr => $_POST["emp_addr"],
                                   $emp_reason => $_POST["emp_reason"],
                                   $emp_start => $_POST["emp_start"],
                                   $emp_end => $_POST["emp_end"],
                                   $emp_btype => $_POST["emp_btype"]
                                 ));
// set up error list array
$errorList = array();
$count = 0;

// validate
// making sure that they are filling in all the required fields for the employer for each of the 3 "boxes"
    for ($x=0; $x<sizeof($app_emp); $x++)
    {
        if(!empty($emp_name[$x]) || !empty($emp_start[$x]) || !empty($emp_end[$x]))
        {
            if(empty($emp_start[$x]) || empty($emp_end[$x])) 
            { 
            $errorList[$count] = "Invalid entry: Employment History, item " . ($x+1);
            $count++;
            }
        }
    }

    // if no errors
    if (sizeof($errorList) == 0)
    {
        // insert employment history
        for($i=0; $i<sizeof($emp_name); $i++)
        {
        $x = 0;
            if (!empty($emp_name[$i][$x]) && !empty($emp_start[$i][$x]) && !empty($emp_end[$i][$x]))
            {
            $query = "INSERT INTO `employment` (`app_id`,`name`,`title`,`addr`,`reason`,`start`,`end`,`bustype`) VALUES ('$app_id', '$emp_name[$x]', '$emp_title[$x]', '$emp_addr[$x]','$emp_reason[$x]', '$emp_start[$x]', '$emp_end[$x]', '$emp_btype[$x]')" or die(mysql_error());
            $result = mysql_query($query, $conn) or die ("Error in query: $query. " . mysql_error());
            }
        }
        // If it gets processed, print success code
        echo "Your information has been accepted.";
    }
    else
    {
    ?>
    <table width="676" border="0" cellspacing="0" cellpadding="8" align="center">
            <tr><td>
<?php
    // or list errors
    listErrors();
?>
            </span></td>
            </tr>
        </table>
<?
    }
?>
<?php
// print out the array
echo '<pre>';
print_r($_POST);
echo '</pre>'; 

?>
4

1 回答 1

0

我知道你已经找到了解决办法。以防有人发现这个并好奇:)

此行下的 For start 逻辑有几个问题: // 获取所有值

$emp 将一直为空 '' 因为它没有初始化,如果你初始化整个逻辑就会崩溃。

您提到的 $_POST 也将始终为空。你需要从他们那里解决它 Master (Level1) Just var_dump($_POST) 你明白我的意思:)

所以做这样的事情:(我必须强调这不是一个好方法,只是为了阐明这个问题)

var_dump($_POST['emp']); // This is master array that holds everything
$app_emp = array();

foreach ($_POST['emp'] as $key => $val) {

    $app_emp[0][$key] = mysql_real_escape_string($val[0]);
    $app_emp[1][$key] = mysql_real_escape_string($val[1]);
}

// set up error list array
$errorList = array();
$count = 0;

var_dump($app_emp);

现在在 $app_emp 中,您有 2 个单独的数组,您可以对其进行检查、验证并将它们添加到数据库中。当然,当前的 SQL 无法正常工作,因为您需要调整它以适应新数组。休息应该很容易。

几个方便的注意事项:

  • 我确定您正在清理您的表单,为所有变量提交 mysql_real_escape。
  • 成功提交后也尝试使用重定向,因为用户会打算刷新页面。否则用户会变得丑陋你想重新提交数据吗?
  • 确保将令牌传递到结果页面,并在那里进行检查。我会使用一个随机的数据库编号,所以停止跨浏览器黑客攻击。

希望这有帮助。H。

于 2013-05-15T12:47:48.320 回答