作为学校的职责,有一个特殊的出勤和缺勤项目
我创建了一个表单,通过使用[]将其输入表单数据库git到git数组
一切正常,但:
当我从表单中插入数据时,我找不到正确的方法使其正常工作
我曾经循环for以转到下一个索引,foreach以获取单选按钮的索引
这是我的表格我有它的表格数据库:
<br>
<div class="row justify-content-md-center">
<h2>شاشة ادخال الحضور والغياب للطالب </h2>
<br><br>
</div>
<br><br>
<form action="" dir="rtl" method="POST">
<fieldset>
<legend>اختيار بيانات التحظير :</legend>
<div class="row">
<div class="col">
<select class="form-control" name="phase_student">
<option value="">المرحلة</option>
<?php
$QueryDB = "SELECT * FROM `phase_student`";
$DoQuery = mysqli_query($Con, $QueryDB);
$ChekRows = mysqli_num_rows($DoQuery);
if ($ChekRows > 0) {
while ($Rows = mysqli_fetch_assoc($DoQuery)) {
echo "<option value='" . $Rows['num_phase'] . "'> " . $Rows['phase'] . " </option>";
}
} else {
echo "<option value=''>لا توجد بيانات مرحلة </option>";
} ?>
</select>
</div>
<div class="col">
<select class="form-control" name="classe">
<option value="">الصف</option>
<?php
$QueryDB2 = "SELECT * FROM `classe`";
$DoQuery2 = mysqli_query($Con, $QueryDB2);
$ChekRows2 = mysqli_num_rows($DoQuery2);
if ($ChekRows2 > 0) {
while ($Rows2 = mysqli_fetch_assoc($DoQuery2)) {
echo "<option value='" . $Rows2['num_class'] . "'> " . $Rows2['class'] . " </option>";
}
} else {
echo "<option value=''>لا توجد بيان الصفوف </option>";
} ?>
</select>
</div>
<div class="col">
<select class=" form-control" name="prong">
<option value="">الشعبة</option>
<?php
$QueryDB3 = "SELECT * FROM `prong`";
$DoQuery3 = mysqli_query($Con, $QueryDB3);
$ChekRows3 = mysqli_num_rows($DoQuery3);
if ($ChekRows3 > 0) {
while ($Rows3 = mysqli_fetch_assoc($DoQuery3)) {
echo "<option value='" . $Rows3['num_prong'] . "'> " . $Rows3['prong'] . " </option>";
}
} else {
echo "<option value=''>لا توجد بيان شعب </option>";
} ?>
</select>
</div>
</div>
<br>
<div class="row">
<div class="col">
<select class="form-control" name="item">
<option value="">اسم المادة</option>
<?php
$QueryDB6 = "SELECT * FROM `item`";
$DoQuery6 = mysqli_query($Con, $QueryDB6);
$ChekRows6 = mysqli_num_rows($DoQuery6);
if ($ChekRows6 > 0) {
while ($Rows6 = mysqli_fetch_assoc($DoQuery6)) {
echo "<option value='" . $Rows6['num_item'] . "'> " . $Rows6['item'] . " </option>";
}
} else {
echo "<option value=''>لا توجد بيان المواد </option>";
} ?>
</select>
</div>
<div class="col">
<select class=" form-control" name="monthe">
<option value="">الشهر</option>
<?php
$QueryDB5 = "SELECT * FROM `monthe`";
$DoQuery5 = mysqli_query($Con, $QueryDB5);
$ChekRows5 = mysqli_num_rows($DoQuery5);
if ($ChekRows5 > 0) {
while ($Rows5 = mysqli_fetch_assoc($DoQuery5)) {
echo "<option value='" . $Rows5['num_month'] . "'> " . $Rows5['monthe'] . " </option>";
}
} else {
echo "<option value=''>لا توجد بيان الاشهر </option>";
} ?>
</select>
</div>
<div class="col">
<input type="date" class="form-control" name="thisDay" value="">
</div>
</div>
</fieldset>
<br>
<br>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<th>متسلسل</th>
<th>اسم الطالب</th>
<th>حاضر</th>
<th>غائب</th>
<th>مستئذن</th>
<th> ملاحظات</th>
</tr>
</thead>
<tbody>
<tr>
<?php
$queryStu = "SELECT * FROM `student_academia` ";
$DoQuerystu = mysqli_query($Con, $queryStu);
$ChekRowsstu = mysqli_num_rows($DoQuerystu);
if ($ChekRowsstu > 0) {
while ($Rowsstu = mysqli_fetch_assoc($DoQuerystu)) {
echo " <td> <span> " . $Rowsstu['num__student'] . "</span> <input type='hidden' name ='IdStu[]' value='" . $Rowsstu['num__student'] . "' > </td>";
echo " <td> <span> " . $Rowsstu['name_student'] . "</span> <input type='hidden' name ='NaStu[]' value='" . $Rowsstu['name_student'] . "' > </td>";
echo " <td>
<div class=\"form-check\">
<label class=\"form-check-label\">
<input class=\"form-check-input\" type=\"radio\" name=\"attend[" . $Rowsstu['num__student'] . "]\" value=\"1\" id=" . $Rowsstu['num__student'] . ">
</label>
</div>
</td>
<td>
<div class=\"form-check\">
<label class=\"form-check-label\">
<input class=\"form-check-input\" type=\"radio\" name=\"attend[" . $Rowsstu['num__student'] . "]\" value=\"0\" id=" . $Rowsstu['num__student'] . ">
</label>
</div>
</td>
<td>
<div class=\"form-check\">
<label class=\"form-check-label\">
<input class=\"form-check-input\" type=\"radio\" name=\"excusable[" . $Rowsstu['num__student'] . "]\" value=\"1\" id=" . $Rowsstu['num__student'] . ">
<input class=\"form-check-input sr-only\" type=\"radio\" name=\"excusable[" . $Rowsstu['num__student'] . "]\" value=\"0\" id=" . $Rowsstu['num__student'] . " checked >
</label>
</div>
</td>
<td><input type='text' class='form-control' name='attendNote[]' placeholder='ملاحظات ' /></td>
</tr>
";
}
} else {
echo "لا توجد بيان طلاب";
}
?>
</tbody>
</table>
</div>
<br>
<br>
<div class=" row justify-content-center">
<div class="col-3">
<input class="btn btn-outline-primary btn-block" type="submit" name="savedata"
value="حفظ"/>
</div>
<div class="col-3">
<input class="btn btn-block btn-outline-warning " type="reset" value="مسح"/>
</div>
<div class="col-3">
<button type="button" class="btn btn-block btn-outline-danger" name="close">خروج
</button>
</div>
</div>
</form>
这是我的表格:
<?php
include "header.php";
//connect to data base oraginal con
include "ConDB.php";
// connect to database but Php Data Opject conect
$db = new PDO("mysql:host=localhost;dbname=school_db", "root", "");
// utf8 supurt arabic
$db->exec("SET CHARACTER SET utf8");
// show error on connect
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// when some body click save button
if (isset($_POST['savedata'])) {
$phase_student = $_POST['phase_student'];
$classe = $_POST['classe'];
$prong = $_POST['prong'];
$item = $_POST['item'];
$monthe = $_POST['monthe'];
$thisDay = $_POST['thisDay'];
//array
$IdStu = $_POST['IdStu'];
$NaStu = $_POST['NaStu'];
$attends = $_POST['attend'];
$excusables = $_POST['excusable'];
$attendNote = $_POST['attendNote'];
echo "<br>";
var_dump($NaStu);
echo "<br>";
var_dump($IdStu);
echo "<br>";
var_dump($attends);
echo "<br>";
var_dump($attendNote);
echo "<br>";
var_dump($excusables);
echo "<br>";
/*
$queryInsertAttend = "INSERT INTO `outcom_month`(`num__student`, `name_student`, `num_month`, `num_class`,`class`, `prong`, `num_item`, `item`, `duties(20)`, `oral(20)`, `assiduity(20)`, `edit(40)`, `total`, `tribnte`, `note_avant`, `note_guardian`) VALUES (
$num__student ,$num__student, $num_month ,$num_class,$num_class,$prong,$num_item,$num_item,
$duties,$oral,$assiduity,$edit,$edit,$tribnte,$note_avant,$note_avant)";
**/
//
// $id = new ArrayIterator($IdStu);
// $at = new ArrayIterator($attend);
// $atnot = new ArrayIterator($attendNote);
//
// $dataa = new MultipleIterator(MultipleIterator::MIT_NEED_ALL);
//
// $dataa->attachIterator($id);
// $dataa->attachIterator($at);
// $dataa->attachIterator($atnot);
////
if (!empty($_POST)) {
//$insert_stu_Attend = $db->prepare("insert into test values (?,?,?,?,?,?,?,?)");
$insert_stu_Attend = $db->prepare("insert into test2 values (?,?,?,?,?,?,?,?)");
$insert_stu_Attend->bindParam(1, $first);
$insert_stu_Attend->bindParam(2, $second);
$insert_stu_Attend->bindParam(3, $third);
$insert_stu_Attend->bindParam(4, $forth);
$insert_stu_Attend->bindParam(5, $fifth);
$insert_stu_Attend->bindParam(6, $sixth);
$insert_stu_Attend->bindParam(7, $seventh);
$insert_stu_Attend->bindParam(8, $eighth);
for ($i = 0; $i < 3; $i++) {
foreach ($IdStu as $s) {
$dd = 1;
$first = $IdStu[$i];
$second = $monthe;
$third = $item;
$forth = $classe;
$fifth = $thisDay;
$sixth = $attends[$s];
$seventh = $excusables[$s];
$eighth = $attendNote[$i];
$insert_stu_Attend->execute();
}
}
}
} else {
echo '<br>';
echo " لم يتم الادخال";
}
?>
每次我拿到桌上唯一的第一排。
选项卡定义:
CREATE TABLE test (
num__student int(11) NOT NULL UNIQUE,
year_study date NOT NULL,
num_item int(11) NOT NULL,
calss varchar(15) NOT NULL,
date_day date NOT NULL,
attendee tinyint(1) NOT NULL,
excusable tinyint(1) NOT NULL,
nate mediumtext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2条答案
按热度按时间vpfxa7rd1#
显然你用的是
bindParam
不是最正确的方式。据此:https://www.w3schools.com/php/php_mysql_prepared_statements.asp,您应该在循环之前绑定它们,并使用循环仅调整绑定的变量。
我要以你的代码为例,好吗?
根据文件,它应该是有效的。告诉我进展如何。
edit我删除了for,只保留了foreach,因为考虑到为这个结果发送的用户数,我假设您使用for来循环来自不同数组的结果。
e4yzc0pl2#
我决定写一个答案,作为你的指导,尽管我们还有很多未知的东西。您决定如何从
student_academia
把它保存到test
table由你决定。待办事项
有注解行标记为
@todo
. 搜索并取消注解,以查看已发布值的结构外观,例如$_POST
变量。在测试我的代码之前,用你的db凭据替换我的db凭据。
一些建议
仅使用pdo扩展。尽管我仍然在代码中使用mysqli(面向对象)和pdo。
将有关从数据库中提取的代码与用于显示提取值的代码分开。e、 g.首先获取并将所有数据(需要在表单中使用的)保存到数组中。然后,在表单代码中,只需遍历这些数组并读取它们的数据。这是一个理想的设计原则,它被称为关注点分离。
不要从php打印html代码。所以不要这样写
echo "<option value='3'>Item 3</option>";
.原则上,你的代码应该以一种清晰的方式写出来,让其他人很容易理解。以下是基于我的编码方式和我使用的命名约定的一些说明:
表名使用复数形式,如:
items
,students
.在表中,尝试始终使用表名的单数形式的autoincremental pk(例如主键)列,如:in table
items
列item_id
,在表中students
列student_id
. 例如,如果您希望有一个具有唯一索引的列,那么它将是pk列旁边的另一列。例如,在students
表中有以下两列:student_id
以及identifier
. 注意我用了identifier
而不是num__student
.在db表中使用清晰的名称。所以,在db表中使用
year_of_study
而不是year_study
. 或者代替num_item
使用item_id
,或item_identifier
.在php中,使用意图揭示名称。例如
$ChekRows = mysqli_num_rows(...);
使用$numberOfRows = mysqli_num_rows(...);
. 或者,代替$IdStu
以及$NaStu
,使用$studentIdentifier
以及$studentName
. 或者,作为函数名,而不是getStudents($id)
使用getStudentsById($id)
.以下是一些很好的资源:
干净、高质量的代码
来自php标准建议的psr 1、psr 2、psr 4
治疗妄想
清洁代码三:功能-罗伯特c。马丁和一个书面的简短版本
祝你好运。
索引.php
连接\u mysqli.php
连接\u pdo.php
表格定义-详细阅读!