2016-08-16 121 views
1

我希望能够跟踪每天服用的处方药物。我不知道我是如何努力做到这一点是正确的策略,因为我只是在学习。我目前使用的策略是使用一个表格按日期跟踪每个指定项目,并在第二个表格中使用外键指定项目详细信息。从一个表格插入多个mysql

我的直接问题是有可能如何将单个表单上的每个规定的项目分组以收集所收取的金额,然后将每个项目插入到mysql中?

这是我到目前为止。这只适用于一个项目,但我希望每个日期都有多个项目。是否有可能在一个页面上有多组输入来创建多个插入?也许我的策略是错误的。这是可能的还是另一种策略是必要的?

<form method="post" action="db_insert.php"> 
    <?php 
     $date = "2016-15-16"; 
    ?> 
    <?php echo "Date " . $date; ?> 
    <input type="hidden" name="prescribedid" value="1"><br> 
    Prescribed #1 Amount: 200 <input type="checkbox" name="taken_amount" value="200"> 
    Prescribed #1 Units: mg <input type="checkbox" name="units" value="mg"> 
    Prescribed #1 Frequency: daily <input type="checkbox" name="frequency" value="1"> 
    <input type="hidden" name="prescribedid" value="2"><br> 
    Prescribed #2 Amount: 200 <input type="checkbox" name="taken_amount" value="200"> 
    Prescribed #2 Units: mg <input type="checkbox" name="units" value="mg"> 
    Prescribed #2 Frequency: daily <input type="checkbox" name="frequency" value="1"><br> 
    <input type="submit" name="Submit"> 
    </form> 

db_insert.php

<?php 
$date = "2016-08-15"; 
$date = date('Y-m-d',strtotime($date)); 

echo $date . "<br>"; 

$prescribedid = $_POST["prescribedid"]; 
$taken_amount = $_POST["taken_amount"]; 
$units  = $_POST["units"]; 
$frequency = $_POST["frequency"]; 

// 1st Insert 
$query[] = "INSERT INTO `tracked_db` (`takenid`, `date`, `prescribedid`, `taken_amount`, `taken_units`, `frequency`)"; 
$query .= " VALUES (NULL, '{$date}', '${prescribedid}', '{$taken_amount}', '{$units}', '{$frequency}')"; 

// 2nd insert 
$query[] = "INSERT INTO `tracked_db` (`takenid`, `date`, `prescribedid`, `taken_amount`, `taken_units`, `frequency`)"; 
$query .= " VALUES (NULL, '{$date}', '${prescribedid}', '{$taken_amount}', '{$units}', '{$frequency}')"; 

$result = mysqli_query($connection, $query); 
?> 

的foreach查询插入。

+1

'$ query [] ='表示它是一个数组,但是'$ query。='表示它是一个字符串。 – Barmar

+0

难道你不说___这只适用于一个item_如果它确实如此,那么这不是你实际运行的代码。发布真实代码 – RiggsFolly

+0

你是对的。我试图让我的问题更清晰并修改我的代码。第一个$查询不是一个数组,应该只是$查询。感谢您的答复。 –

回答

0

如果你想提交多个输入同名,那么你必须提供inputs的名称[]。 例如:

<input type="checkbox" name="taken_amount[]" value="200"> 

而在服务器侧,它们将被接收或作为阵列处理。例如:

例如:这里$taken_amount = $_POST["taken_amount"];$taken_amount是一个数组,其中包含名称为taken_amount的所有inputs的值。然后你可以迭代这个数组来检索这个值。

在你的情况下迭代你的任何参数并追加/连接$query,这样所有的行都可以一次插入。

例如:

$query=''; 
for($i=0;$i<count($taken_amount);$i++){ 
    $query .= "INSERT INTO `tracked_db` (`takenid`, `date`, `prescribedid`, `taken_amount`, `taken_units`, `frequency`) 
       " VALUES(NULL, '{$date}', '{$prescribedid[$i]}', '{$taken_amount[$i]}', '{$units[$i]}', '{$frequency[$i]}')"; 
} 
+1

您需要详细说明如何在PHP脚本中使用它。 – Barmar

+0

你可能想检查一个'foreach'或'for'或两者的语法,然后得到一个DV – RiggsFolly

+0

谢谢指出。那种习惯与'foreach' :) – jonju

0

这些隐藏的输入是无用的。您需要单独指定您的表单字段,而不是尝试将它们分组在隐藏字段下。从这里开始:

<form method="post" action="db_insert.php"> 
<?php 
    $date = "2016-15-16"; 
?> 
<?php echo "Date " . $date; ?> 
    <br> 
    Prescribed #1 Amount: 200 <input type="checkbox" name="p1taken_amount" value="200"> 
Prescribed #1 Units: mg <input type="checkbox" name="p1units" value="mg"> 
Prescribed #1 Frequency: daily <input type="checkbox" name="p1frequency" value="1"> 
<br> 
Prescribed #2 Amount: 200 <input type="checkbox" name="p2taken_amount" value="200"> 
Prescribed #2 Units: mg <input type="checkbox" name="p2units" value="mg"> 
Prescribed #2 Frequency: daily <input type="checkbox" name="p2frequency" value="1"><br> 
<input type="submit" name="Submit"> 
</form>