我有一个脚本,该脚本允许在页面上创建多行,然后需要在帖子上对行进行计数,然后将每行插入表中。
当我提交未向表中写入任何数据时,我使用的GUI可以使用户根据需要添加或删除行。我曾尝试将帖子的脚本更改为直接的“ $ variables”,并且可以编写但只写第一行。
我已经附上了我从WebLesson使用的动作脚本,该脚本对于一个领域很有效,但是对于多个领域,我对尝试的方法感到迷茫。
//includes
include '----';
include '---';
session_start();
$number = count($_POST['name']);
echo $_POST['name'] . "<br>";
echo $number . "<br>";
if($number >= 1)
{
echo $_POST['pasid'];
$conn = mysqli_connect($servername, $username, $password, $dbname);
$id = $_POST['pasid'];
$name = $_POST['name'];
$dose = $_POST['dose'];
$dir = $_POST['directions'];
$time = $_POST['time'];
echo $i;
for($i=0; $i<$number; $i++)
{
if(trim($_POST["name"][$i] != ''))
{
$sql = "INSERT INTO meds (id, name, dose, directions)
VALUES('".mysqli_real_escape_string($_POST["pasid"][$i])."',
'".mysqli_real_escape_string($_POST["name"][$i])."',
'".mysqli_real_escape_string($_POST["dose"][$i])."',
'".mysqli_real_escape_string($_POST["directions"][$i])."',
'".mysqli_real_escape_string($_POST["time"][$i])."') " ;
mysqli_query($conn, $sql);
}
}
echo "Data Inserted";
}
else
{
die("Connection failed: " . mysqli_connect_error());
}
我要计算要发布的行数,然后将每行提交到表中。
UI图片:
答案 0 :(得分:0)
您可以为每个表单元素生成唯一的name
属性,然后在PHP中循环遍历它们。最简单的方法可能是在用户每次创建新行时,在name
属性的末尾增加一个数字。您必须使用Javascript来做到这一点。
var suffix = 0;
function addNewRow(){
...
<input type="text" name="pasid_${i}"/> //Add incriminating suffix
...
suffix++; //Increment suffix for next time
}
然后您的PHP看起来像
$suffix = 0;
while(isset($_POST['pasid' . $suffix])){ //Keep looping until no more POST value
//Process row $suffix, referencing all the data like $_POST['field_name'. $suffix]
$suffix++; //Increment suffix for the next field
}
确保在while循环中需要检查的字段是必需的,否则用户可能会忽略输入,并且循环会过早终止。如果不需要所有字段,也可以在while循环中检查多个$_POST
索引。