php - foreach 循环不会生成唯一的列表项 ID

标签 php jquery mysql foreach

我尝试开发一个评论系统。 foreach 行 $result 包含来自名为 posts 的数据库的变量。对于评论,功能是弹出窗口。帖子的 ID 为 AUTO_INCREMENT,帖子的作者和评论被提交到一个文件,该文件将这三个值插入到名为 comments 的数据库中。第二个 foreach 循环 $comments 应该在用户单击弹出按钮时显示评论。那行不通,因为 id <input type="hidden" name="id" id="id" value="<?PHP echo $row['id']; ?>" type="text" />不是唯一的,每个列表项的评论都不会正确显示,但帖子具有唯一的 ID。所有评论都显示出来。如何更改 ID 在每个新创建的列表项中都是唯一的?

<div data-role="content">
    <?php include( "list.php"); ?>
    <div data-demo-html="true">
        <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset ui-corner-all ui-shadow">

            <?php foreach ($result as $key=> $row): ?>

            <li id="listone" name="listone" data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-bar-b ui-li-has-count ui-first-child">
                <?php echo $row[ 'date']; ?>
            </li>
            <li data-corners="false" data-shadow="false" data-iconshadow="true" data-wrapperels="div" data-icon="arrow-r" data-iconpos="right" data-theme="a">
                <div class="ui-btn-inner ui-li">
                    <div class="ui-btn-text">
                        <a class="ui-link-inherit">
                            <p class="ui-li-aside ui-li-desc"><strong></strong>
                                <?php echo $row[ 'time']; ?>
                            </p>
                            <p class="ui-li-desc"><strong><?php echo $row['title']; ?></strong>
                            </p>
                            <p class="ui-li-desc">
                                <?php echo $row[ 'text']; ?>
                            </p>

                            <p class="ui-li-desc"><strong><?php echo $row['town']; ?></strong>
                            </p>
                            <a href="#popupcomment" data-rel="popup" data-position-to="window" data-transition="pop">comment</a>
                            <div data-role="popup" id="popupcomment" data-theme="a" class="ui-corner-all">
                                <form data-ajax="false" name="login-form" class="login-form" action="./comments.php" method="post" style="padding:20px 40px;">
                                    <div class="content">
                                        <?php include( "showcomments.php"); ?>
                                        <?php foreach ($comments as $keyComment=> $rowComment): ?>
                                        <p class="ui-li-desc"><strong><?php echo $rowComment['username']; ?></strong>
                                        </p>
                                        <p class="ui-li-desc">
                                            <?php echo $rowComment[ 'comment']; ?>
                                        </p>
                                        <?php endforeach; ?>
                                        <input type="hidden" name="id" id="id" value="<?php echo $row['id']; ?>" type="text" />
                                        <input type="hidden" name="autorpost" id="autorpost" value="<?php echo $row['autor']; ?>" type="text" />
                                        <!-- autor des posts -->
                                        <textarea rows="1" name="text" id="text" class="foo"></textarea>
                                    </div>
                                    <div class="footer">
                                        <input type="submit" name="save" value="comment" class="button" data-theme="a" />
                                    </div>
                                </form>
                            </div>

                        </a>
            </li>

            <?php endforeach; ?>

        </ul>
        </div>
        </div>
        <!-- div content -->
    </div>
</div>

showcomments.php:

    $hostname='localhost';
        $user='root';
        $password='';

$id = $row['id'];
try {
                        $dbh = new PDO("mysql:host=$hostname;dbname=searchfood",$user,$password);

                        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
                         $sql = "SELECT id, username, comment, time 
FROM comments 
WHERE  id_post = $id 
ORDER BY id DESC"; // oder (longitude between $loo and $lo or latitude  between $laa and $la) versuchen
  if ($com = $dbh->query($sql)) {// need to add this line in your code
      // then after fetchColumn
     $comments = $com->fetchAll();       
   }                        
                }
                catch(PDOException $e)
                {
                        echo $e->getMessage();
                }      

comments.php:

    $hostname='localhost';
        $user='root';
        $password='';

if(isset($_POST["id"])){                    
                try {
        $dbh = new PDO("mysql:host=localhost;dbname=searchfood", $user, $password);

        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
        // prepare your query
        $query = 'INSERT INTO comments (username, autorpost, comment, id_post, time) VALUES (?, ?, ?, ?, now())';

        $stmt = $dbh->prepare($query);
        // bind variables
        $stmt->execute(array($_COOKIE['username'], $_POST['autorpost'], $_POST['text'], $_POST['id']));
        // pull last insert id
        $new = $dbh->lastInsertId(); 

        // show success message or redirect, whatever you want
        echo "New Record Inserted Successfully";
        $message['success'] = 'Neuer Benutzer (' . htmlspecialchars($_POST['username']) . ') wurde angelegt, <a href="login.php">weiter zur Anmeldung</a>.';
        header("Location: http://".$_SERVER['HTTP_HOST']."/lendsth/main.php", true, 302);

    }
                catch(PDOException $e)
                {
                        echo $e->getMessage();
                }

    }

最佳答案

试试下面的代码,

创建一个名为$i;的变量

然后每次迭代它然后添加到id

<div data-role="content">
    <?php include( "list.php"); ?>
    <div data-demo-html="true">
        <ul data-role="listview" data-inset="true" class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
        <?php $i = 0; ?>
            <?php foreach ($result as $key=> $row): ?>
            <li id="listone" name="listone" data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-bar-b ui-li-has-count ui-first-child"> <?php echo $row[ 'date']; ?> </li>
            <li data-corners="false" data-shadow="false" data-iconshadow="true" data-wrapperels="div" data-icon="arrow-r" data-iconpos="right" data-theme="a">
                <div class="ui-btn-inner ui-li">
                <div class="ui-btn-text">
                <a class="ui-link-inherit">
                <p class="ui-li-aside ui-li-desc"><strong></strong> <?php echo $row[ 'time']; ?> </p>
                <p class="ui-li-desc"><strong><?php echo $row['title']; ?></strong> </p>
                <p class="ui-li-desc"> <?php echo $row[ 'text']; ?> </p>
                <p class="ui-li-desc"><strong><?php echo $row['town']; ?></strong> </p>
                <a href="#popupcomment" data-rel="popup" data-position-to="window" data-transition="pop">comment</a>
                <div data-role="popup" id="popupcomment" data-theme="a" class="ui-corner-all">
                    <form data-ajax="false" name="login-form" class="login-form" action="./comments.php" method="post" style="padding:20px 40px;">
                        <div class="content">
                            <?php include( "showcomments.php"); ?>
                            <?php foreach ($comments as $keyComment=> $rowComment): ?>
                            <p class="ui-li-desc"><strong><?php echo $rowComment['username']; ?></strong> </p>
                            <p class="ui-li-desc"> <?php echo $rowComment[ 'comment']; ?> </p>
                            <?php endforeach; ?>
                            <input type="hidden" name="id" id="id<?php echo $i; ?>" value="<?php echo $row['id']; ?>" type="text" />
                            <input type="hidden" name="autorpost" id="autorpost" value="<?php echo $row['autor']; ?>" type="text" />
                            <!-- autor des posts -->
                            <textarea rows="1" name="text" id="text" class="foo"></textarea>
                        </div>
                        <div class="footer">
                            <input type="submit" name="save" value="comment" class="button" data-theme="a" />
                        </div>
                    </form>
                </div>
                </a> </li>
                <?php $i++; ?>
            <?php endforeach; ?>
        </ul>
    </div>
</div>
<!-- div content -->
</div>
</div>

关于php - foreach 循环不会生成唯一的列表项 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32806174/

相关文章:

javascript - 使用 JavaScript 或 PHP 从网站启动 putty(带参数)

php - 我应该从哪里开始正确理解 ORM 的概念

php - Laravel Eloquent Sum of relationship 的列

javascript - 您应该从 Rails 服务器返回 javascript (.js.erb) 还是在 Ajax 调用后更新页面时使用 native JS 回调机制

mysql - Django:从 Django 数据库获取下一组查询以进行异步加载

php - 超过 64kb 的内容未显示在 WordPress 中

php - Firefox 不遵守 RFC6265 关于处理 cookie 的路径属性

jquery - 类型 ="mce-text/javascript"被添加到tinymce编辑器html中

jquery:取消绑定(bind)加载的函数

mysql - SQL 通过对行进行分组获取公共(public)值