2013-05-13 58 views
0

这里是收集雇主的历史记录并将该数据存储到2d数组中的表单,然后我试图将该信息存储到表中的数据库employment。它给了我没有错误,但它无法将数据存储到MySQL ..使用二维数组在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> 

这里是result.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>'; 

?> 
+0

执行'echo $ query'来检查查询是否正常。我想'如果我从查询中删除'die(mysql_error())',那么它也不会改变任何东西,所以'$ query =“INSERT INTO ....”'不需要'或死(mysql_error())' – draxxxeus 2013-05-13 17:14:42

+0

。 .. – fahim74 2013-05-13 18:15:19

+0

你试过'echo $ query;'? – draxxxeus 2013-05-13 18:24:53

回答

0

我知道你已经找到了解决办法。只是柜面有人发现了这一点,并感到好奇:)

有几个与这条线下的逻辑 对于启动问题: //获取所有的值

$ EMP将是空的“”所有的时间因为它没有初始化,并且如果初始化整个逻辑将会粉碎。

另外您提到的$ _POST将始终为空。你需要从他们解决它主(Level1)只是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.

+0

thx for你的解决方案和小时便利的笔记很容易观察@Mr H – fahim74 2013-05-16 19:43:27