【问题标题】:foreach loop insert $id of list itemsforeach 循环插入列表项的 $id
【发布时间】:2015-12-25 02:05:52
【问题描述】:

我尝试开发一个简单的评论系统。 foreach 行$result 包含来自名为posts 的数据库的变量。

帖子的 id(每个帖子都是一个列表项)是 AUTO_INCREMENT 并且每个帖子都有一个唯一的 $id,帖子的作者和评论被提交到一个文件,该文件将三个值插入一个名为厘米。

当用户单击弹出按钮时,第二个 foreach 循环 $comments 应该显示 cmets。这不起作用,因为 id <input type="hidden" name="id" id="id" value="<?PHP echo $row['id']; ?>" type="text" /> 不会正确插入(cmets.php 应该这样做)。

结果是所有 cmets 都显示在每个列表项中,而不仅仅是这些 cmets,例如在列表项 2。如何将列表项的 $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>

showcmets.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();
}      

cmets.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();
    }

}

【问题讨论】:

    标签: php jquery mysql foreach


    【解决方案1】:

    基本上,您需要在数据库中创建一个列来存储在哪个“id_post”下发布的评论——理想情况下,您应该为帖子创建一个表,为 cmets 创建一个表。那,或者如果您不将帖子存储在数据库中,则每个帖子都需要具有某种唯一标识符,您可以将其存储在每个评论中。

    您的表将设置为: 第一个表 -> 存储将有 cmets 的“帖子”

    表 - 帖子: post_id, post_content

    表格 - 评论: comment_id、comment_content、post_id(这是用户发布的帖子的 ID——您可以将其存储在隐藏的 post_id 输入中,并使用 POST 将其传递给表单处理。

    您的选择将如下所示

    "SELECT * FROM comments WHERE post_id = '{your post id}' 
    

    我不知道这是否会有所帮助,但可能会引导您走上正确的道路。

    【讨论】:

    • Mh 感谢您的关注,但在 cmets.php 中插入 id 失败。插入的值都是一样的。 ;)
    • 我不确定你的意思.. 你需要给帖子一个 ID 以便与 cmets 一起存储
    • 帖子已经有一个被mysql自动递增的id
    • 你误解了我的意思。除非所有 cmets 都在同一个页面上,否则每个“页面”或“帖子”都需要有一个唯一的 ID。然后该 ID 需要与“cmets”一起存储
    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2012-06-19
    相关资源
    最近更新 更多