php - php - for 循环仅从 mysql 结果中获取第一个值
问题描述
在这段代码中,我试图创建与查询结果的行一样多的模式框。这行得通!$row['seats_no']
然后我想用与数据库中的数字一样多的复选框填充这些模式框。这里我们有一个问题..在每个模态框中,它创建的复选框数量与第一个相同。我的意思是$row['seats_no']
每行的第一行都有数字。
<?php
session_start();
if(!isset($_SESSION['name']) && !isset($_SESSION['email']) && !isset($_SESSION['id']) && !isset($_SESSION['cash'])){
header("location: Start.php");
}
$name=trim($_SESSION['name']);
$email=trim($_SESSION['email']);
$dbc = mysqli_connect("localhost","root","","my_db");
// Check connection
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($dbc,"SET NAMES 'utf8'");
mysqli_query($dbc,"SET CHARACTER SET 'utf8'");
if (isset($_POST['buy']) && isset($_POST['consert_id'])){
$q = "SELECT ticket_id, section, cost, seats_no FROM tickets INNER JOIN concert ON tickets.consert_id=concert.concert_id WHERE concert.concert_id=".$_POST['consert_id'];
//ticket_id, concert_id, section, cost, seats_no, concert_id,concert_name, date, place, category, description
$r = mysqli_query($dbc,$q);
$num= mysqli_num_rows($r);
$q1 = "SELECT * FROM concert WHERE concert_id=".$_POST['consert_id'];
$r1 = mysqli_query($dbc,$q1);
$first = mysqli_fetch_assoc($r1)
?>
<!DOCTYPE html>
<html>
<title>Seats</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link type="text/css" rel="stylesheet" href="seats_style.css">
<body>
<div style="z-index:1;position:fixed;">
<ul>
<li><a href="Concerts.php" class="active">E-Viva</a></li>
<li><a href="cash.php">Ανανεωση υπολοιπου</a></li>
</ul>
</div>
<div class="background">
<div class="transbox">
<div class="w3-container">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/199011/concert.png">
<h1><?=$first['concert_name']?></h1>
<div style="left:0;"><?=$first['date']?></div>
<div style="right:0;"><?=$first['place']?></div>
<p><?=$first['description']?></p>
<?php
while ($row = mysqli_fetch_array($r)) {
?>
<div style="margin-left:5em;padding:5px;"><?=$row['section']?></div>
<div style="margin-left:5em;padding:5px;">Τιμή <?=$row['cost']?>€</div>
<div style="margin-left:5em;padding:5px;"><button onclick="document.getElementById('id01').style.display='block'" class="w3-button w3-black">Κράτηση</button></div>
<div id="id01" class="w3-modal" background="black">
<div class="w3-modal-content">
<div class="w3-container">
<span onclick="document.getElementById('id01').style.display='none'" class="w3-button w3-display-topright">×</span>
<p><h2>Διαλεξε τις θεσεις που θες</h2></p>
<form action="buy.php" method="post">
<table>
<?php
$num=0;
for($j=1; $j<=10; $j++){
echo "<tr>";
for($i=1; $i<= $row['seats_no']/10; $i++){
$num++;
echo "<td><input class='seat' type=\"checkbox\" name=\"s[]\" id=\"".$num."\" value=\"".$num."\"><label for=\"".$num."\">".$num."</label><input type='hidden' name='ticket_id' value='".$row['ticket_id']."'><input type='hidden' name='cost' value='".$row['cost']."'></td>";
}
echo "</tr>";
}
echo "</table><input class=\"ok\" type=\"submit\" name=\"ok\" value=\"Κράτηση\"></form></div></div></div><br>";
}
}
mysqli_free_result($r1);
mysqli_free_result($r);
mysqli_close($dbc);
?>
</div>
</div>
</div>
</body>
</html>
解决方案
Κατερίνα,试着while ($row = mysqli_fetch_array($r)) {...}
用一个foreach
循环来改变,
就像foreach( mysqli_fetch_array($r) as $row ) {....}
只是一个想法。
此外,您过早关闭一个括号,在第一个之前删除一个,并在文件末尾的mysqli_free_result($r1)
关闭 html 标记之后关闭它 。
另外,正如@tadman 所说,做一些研究并使用参数化查询。您的代码很容易发生 MySQL 注入,您将面临几个问题。据我所知,该页面与付款或预付款有关。</html>
无论如何,我希望我能帮助你。
Καλή επιτυχία ;)
推荐阅读
- python-3.x - 打印枚举列表的第 n 个索引
- c++ - 如何在 C++ 中将整数从一种方法调用到另一种方法
- apache-spark - 如何在 Kafka 和 spark-sql 中管理流式应用程序中的审计?
- python-3.x - Tensorflow @tf.function:AttributeError:在转换后的代码中
- django - 在弹性豆茎上运行 celeryd-worker
- image-upload - 如何解决 laravel 6 中的“SplFileInfo:getSize()”错误
- java - 如何解决 - bootcamp-cordapp 中的 NotSerializableException。测试合约时
- firebase - 如何根据电子邮件地址或电话号码列表验证用户是否可以在 Firebase 上登录?
- r - 将多个函数应用于矩阵列表并在数据框中输出答案
- node.js - 是否可以编辑 ng generate?