Php 仅显示表中的第一个ID
我有一个数据库表,如下所示: 使用下面的代码,我将显示Php 仅显示表中的第一个ID,php,pdo,Php,Pdo,我有一个数据库表,如下所示: 使用下面的代码,我将显示text列中的所有行: $stmt = $con->query("SELECT * FROM test"); if($stmt->rowCount() > 0) { $replyid = $row['ID']; while($row = $stmt->fetch()) { echo' '.$row['text'].' <form method="post">
text
列中的所有行:
$stmt = $con->query("SELECT * FROM test");
if($stmt->rowCount() > 0) {
$replyid = $row['ID'];
while($row = $stmt->fetch()) {
echo'
'.$row['text'].'
<form method="post">
<input name="testing" type="submit">
</form>
';
}
}
我的问题是只显示表中第一行的
ID
。如果用户单击“你好”旁边的“提交”按钮,将显示数字1(而不是3!)您必须添加隐藏字段以形成您的值:
echo'
'.$row['text'].'
<form method="post">
<input name="replyid" type="hidden" value="'.$row['ID'].'">
<input name="testing" type="submit">
</form>
';
试着这样做,但我不太确定这是否是你想要的
$stmt = $con->query("SELECT * FROM test");
if($stmt->rowCount() > 0) {
while($row = $stmt->fetch()) {
echo'
'.$row['text'].'
<form method="post">
<input name="testing" type="submit" value="'.$row['ID'].'">
</form>
';
}
}
首先,我总是建议使用PDO方法,而不是MySQL/MySQLi
class Connection {
public function __construct() {
return new PDO('mysql:host=X;dbname=X', 'user', 'pass');
}
}
$Con = new Connection;
$Con->Prepare("SELECT * FROM test");
$Con->execute();
foreach($Con->FetchAll() as $row) {
echo $row['id'] . '\n';
}
上面的代码部分展示了基本SQL语句的易用性,为了将来的注意,您还可以使用PDObindValue()
进行安全查询
[...]
$Con->Prepare("SELECT * FROM test WHERE id = :paramhere");
$Con->bindValue(":paramhere", 1);
[...]
我希望这有所帮助,您可以从以下链接找到更多关于PDO和SQL的信息:
编辑:除了最佳实践之外,在使用HTML时还应使用条件语句。
<?php foreach($Con->FetchAll() as $row): ?>
<div class="example">
This is HTML, Your ID is: <?php echo $row['id']; ?>
</div>
<?php endforeach; ?>
这是HTML,您的ID是:
您知道您没有使用表单中的id,对吗?感谢您的回复。这将ID
显示为submit按钮的值,我不想这样做。当用户单击submit按钮时,我希望ID
随后显示.Hello。在我的站点上进行一些测试时,我发现用户可以通过inspect元素更改ID
。我有什么办法可以防止这种情况发生?用户可以更改浏览器中的所有内容。确保网站安全的唯一方法是在php中检查用户是否有权使用他发送的ID做某事。如果您不在表单中添加此ID,您将无法获得用户发送给您的ID的信息。正如我所说的:浏览器中的所有内容都可以由用户更改,并且您必须验证php$\u POST['replyid']
中的所有数据在本例中为空。应该是$_POST['testing']@PootieTang:因为它是从第一个答案复制的。当您为“提交”按钮设置值时,该值将显示为按钮“文本”,这可能不是一个正确的解决方案。@nospor-很好。他本可以用输入代替tho。
class Connection {
public function __construct() {
return new PDO('mysql:host=X;dbname=X', 'user', 'pass');
}
}
$Con = new Connection;
$Con->Prepare("SELECT * FROM test");
$Con->execute();
foreach($Con->FetchAll() as $row) {
echo $row['id'] . '\n';
}
[...]
$Con->Prepare("SELECT * FROM test WHERE id = :paramhere");
$Con->bindValue(":paramhere", 1);
[...]
<?php foreach($Con->FetchAll() as $row): ?>
<div class="example">
This is HTML, Your ID is: <?php echo $row['id']; ?>
</div>
<?php endforeach; ?>