Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅显示表中的第一个ID_Php_Pdo - Fatal编程技术网

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语句的易用性,为了将来的注意,您还可以使用PDO
bindValue()
进行安全查询

[...]
$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; ?>