【发布时间】:2019-09-11 17:42:42
【问题描述】:
我正在尝试从表中获取客户列表,然后每天将数据附加到他们身上。我不知道如何在数据库中插入多行同名
我有 3 个表格:公司、工作、报告。我正在执行 2 个循环,以将表格中的公司和工作数据转换为每天添加到 repots 表中的表格。我试过把它作为一个数组来做,并在一个while循环、foreach循环中做,但每次都没有奏效。我在某个地方出错了,我只是不知道在哪里
$companyquery = "SELECT * FROM companiestest WHERE (enabled != 'true') ORDER BY name";
$companies = $mysqli->query($companyquery);
while($company = $companies->fetch_assoc()) {
$cid = htmlspecialchars($company['id']);
$companyname = htmlspecialchars($company['name']);
echo "<tr>";
$jobquery = "SELECT * FROM jobstest WHERE (cid = " . $company['id'] . ") AND (enabled != 'true') ORDER BY jobname";
$jobs = $mysqli->query($jobquery);
while($job = $jobs->fetch_assoc()) {
$bid = htmlspecialchars($job['id']);
$product = htmlspecialchars($job['product']);
$server = htmlspecialchars($job['server']);
$medium = htmlspecialchars($job['medium']);
$jobname = htmlspecialchars($job['jobname']);
echo "<input type='hidden' name='backupid' value='$bid''>";
echo "<input type='hidden' name='companyname' value='$companyname''>";
echo "<input type='hidden' name='companyid' value='$cid'>";
echo "<td>$companyname - $cid</td>";
echo "<td>$product</td>";
echo "<td>$server</td>";
echo "<td>$medium</td>";
echo "<td>$jobname</td>";
echo "<td><select name='result' required>
<option disabled selected value>Result</option>
<option value='success'>Successful</option>
<option value='warn'>Warning</option>
<option value='fail'>Fail</option>
</select></td>";
echo "<td><input type='text' name='ticket' placeholder='Ticket Number'></td>";
echo "</tr>";
if(isset($_POST['submit'])){
$companyname = strip_tags(trim($_POST['companyname']));
$date = strip_tags(trim($_POST['date']));
$staffmember = strip_tags(trim($_POST['staff']));
$result = strip_tags(trim($_POST['result']));
$ticket = strip_tags(trim($_POST['ticket']));
$companyid = strip_tags(trim($_POST['companyid']));
$jobid = strip_tags(trim($_POST['jobid']));
$array = array();
array_push($array, $companyname, $date, $staffmember, $result, $ticket, $companyid, $jobid);
//$array = "('$companyname', '$date', '$staffmember', '$result', '$ticket', '$companyid')";
print_r($array);
$query = "INSERT INTO reporttest (company, date, staff, result, ticketnum, cid, bid) VALUES ($companyname, $date, $staffmember, $result, $ticket, $companyid, $jobid)";
//echo "$query";
}
【问题讨论】:
-
字符串值插入数据库时必须加引号,或者使用prepared statements和bind_param。 这将解决可能出现的任何令人讨厌的引用问题。
-
您确定
enabled应该是字符串'true',而不是真/假值吗? -
这是非常早期的开发,所以在进行准备和绑定之前,我需要先获得正确的语法。我忘记了报价,所以将添加谢谢 Enabled 是数据库中的二进制值,因此当客户离开公司时,我们在数据库中将其标记为 false,从而将其从页面上的列表中删除
-
我建议现在使用准备好的语句和绑定,因为它可以消除一大堆引用问题,比如这个。如果 enabled 是布尔值,则需要传递 1/0 而不是字符串。