将数组存储在数据库中并从数据库

时间:2016-08-15 12:02:19

标签: php html sql arrays mysqli

所以我有这些html输入,我可以用javascript重新生成它们以允许用户输入他的经验历史,所以我们假设这个代码生成两次这样

<!-- User Experiense 1 -->
<label>Company Name</label>
<input type="text" class="form-control" name="company_name[]">

<label for="job-title">Job Title</label>
<input type="text" class="form-control" name="job_title[]">

<label for="dates">From</label>
<input type="date" class="form-control" name="start_date[]">

<label for="dates">To</label>
<input type="date" class="form-control" name="end_date[]">

<!-- User Experiense 2 -->
<label>Company Name</label>
<input type="text" class="form-control" name="company_name[]">

<label for="job-title">Job Title</label>
<input type="text" class="form-control" name="job_title[]">

<label for="dates">From</label>
<input type="date" class="form-control" name="start_date[]">

<label for="dates">To</label>
<input type="date" class="form-control" name="end_date[]">

这些是数据库中的列company_name job_title start_date end_date

这里是php代码

$js_company_name = [];
if(isset($_POST['js_company_name'])){   
   foreach($_POST['js_company_name'] as $selected) {
     $js_company_name[] = $selected ;
  }
}

$js_job_title = [];
if(isset($_POST['job_title'])){
   foreach($_POST['job_title'] as $selected) {
      $job_title[] = $selected;
   }
 }

$start_date= [];
if(isset($_POST['start_date'])){
   foreach($_POST['start_date'] as $selected) {
      $start_date[] = $selected;
   }
 }

$end_date= [];
if(isset($_POST['end_date'])){
   foreach($_POST['end_date'] as $selected) {
      $end_date[] = $selected;
   }
 }

我尝试使用serialize()unserialize()函数,但我认为它不是最好的解决方案,它会导致大量错误,特别是大数据。 所以我希望有一个更好的解决方案来存储数据库中的数组, 提前谢谢:)

1 个答案:

答案 0 :(得分:1)

你根本不应该。这不仅违反了关系数据库设计的First normal form,而且当所有连接应该是你的&#34;体验&#34;时,你也可能成为对齐错误的牺牲品。 entity是数组索引计数器。

例如:如果并非所有字段都是必填字段,那么空表单条目是否会创建一个空数组值?这可能取决于提交表单的客户端(浏览器)。

在任何情况下,它都是糟糕的数据库设计,你应该考虑将这个概念建模为UserExperience或类似的,并将它连接到用户。