我正在尝试开发一个简单的评论系统。

对于每个新帖子,都会创建一个新的列表项。

列表项的ID为AUTO_INCREMENT。弹出窗口应插入以下值:帖子$ id的id,帖子$ autor的作者和评论用户名的作者

现在的问题是,如果我将元素listone的ID设置为$ row ['id']行的ID,则ID是正确的。但是,当我将listitem的id设置为输入元素id的值时,该id或我在其中添加的其他内容始终具有与上次添加的帖子/列表项相同的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"></a><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>
                    <button class="commentbtn" data-rel="button" >comment</button>
            <div id="createcomment" class="comment" data-theme="a" >
    <form data-ajax="false" name="login-form" class="login-form" action="./comments.php" method="post" style="padding:20px 40px;">
        <div class="content">
        <div id="showcomments" data-theme="a" >
    <?php
include("showcomments.php");
?>
    <?php foreach ($comments as $keyComment => $rowComment): ?>
    <div>
    <p class="ui-li-desc"><strong><?php echo $rowComment['username']; ?></strong></p>
                        <p class="ui-li-desc"><?php echo $rowComment['comment']; ?></p>
                        </div>
                <?php endforeach; ?>
</div>
         <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" />
       <textarea rows="1" name="text" id="text" class="foo"></textarea>
        </div>
        <div class="footer">
        <input type="submit" name="submit" value="comment" class="button" data-theme="a"/>
        </div>
    </form>
</div>

                            </li>

                <?php endforeach; ?>

        </ul>
                    </div>
            </div>
        </div>
        </div>


comments.php:

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

if(isset($_POST["submit"])){
                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();
                }

    }

最佳答案

您要为每个输入命名相同。因此,name="id"的逻辑是,无论您以何种形式提交,都将获得最后一个元素。

您应该给name属性一些上下文(因为name attr的值是作为表单输入提交的值)

<?php foreach ($result as $key => $row): ?>
<form action="./comments.php" method="post">
   <input type="hidden" name="authorForm[<?php echo $row['id']; ?>][id]" id="id" value="<?php echo $row['id']; ?>"> </input>
   <input type="hidden" name="authorForm[<?php echo $row['id']; ?>][autorpost]" id="autorpost" value="<?php echo $row['autor']; ?>"></input>
   <textarea rows="1" name="text" id="text" class="foo"></textarea>
   <input type="submit" name="submit" value="comment" class="button" data-theme="a"/>

</form>
<?php endforeach; ?>


编辑以遵循第一条评论信息:

以下是呈现2种形式的序列的脚本:

<?php
$result = array(
    array(
    'id' => 1,
    'title' => "title_1",
    'text' => "text_1",
    'town' => "town_1",
    'autor' => "autor_1",
    'time' => "time_1"
    ),
    array(
    'id' => 2,
    'title' => "title_2",
    'text' => "text_2",
    'town' => "town_2",
    'autor' => "autor_2",
    'time' => "time_2"
    ),
);
?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" ></script>
<ul >
<?php foreach ($result as $key => $row): ?>
    <li id ="listone" name="listone"><?php echo $row['date'];?></li>
    <li>
    <div >
        <?php echo $row['time'];?> <?php echo $row['title']; ?> <?php echo $row['text'];?> <?php echo $row['town'];?>
        <a href="#popupcomment">comment</a>
    </div>
    <form name="login-form" action="./comments.php" method="post" >
        <div>
            <input type="hidden" name="id" id="id" value="<?php echo $row['id'];?>"/>
            <input type="hidden" name="autorpost" id="autorpost" value="<?php echo $row['autor'];?>"/>
            <textarea name="text" id="text" ></textarea>
        </div>
        <div class="footer">
            <input type="submit" name="submit" value="comment" />
        </div>
    </form>
    </li>
<?php endforeach; ?>
</ul>


php - 使$ id在foreach循环中唯一-LMLPHP
php - 使$ id在foreach循环中唯一-LMLPHP

因此,您可以在chrome检查器的屏幕截图中看到。发送正确的值(使用讨厌的形式输入名称,因为它们不提供上下文)

关于php - 使$ id在foreach循环中唯一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32830361/

10-09 22:57
查看更多