Запрос PHP, вставляющий данные дважды?

#php #mysql #arrays #insert #fetch

#php #mysql #массивы #вставить #выборка

Вопрос:

Я пытаюсь создать функцию для системы Mybb, которая будет называть это социальными группами, пока это было здорово, но когда я пытаюсь вставить комментарий в базу данных, он вставляет его дважды из-за msql_fetch_array и того, как это работает (php должен это исправить)

В любом случае, как я могу получить идентификатор сообщений, которые пользователь комментирует, и вставить его только один раз в базу данных, а не дважды

 <?php
require_once ("core/connection.php");
require_once ("core/group_functions.php");



    //We need to post the message update in to the database
if(isset($_POST['post_message_submit'])) {
$post_message_submit = $_POST['post_message_submit'];
$post_message = $_POST['post_message'];
    if(($post_message_submit) amp;amp; ($post_message)) {

    $insert_query = $db->query("INSERT INTO " . TABLE_PREFIX . "groups_posts" . "(posted_by, group_name, post_body)
VALUES ('$mybb_username', '$get_group_url' ,'$post_message')");


    } else {
    echo "<text style='color:red;'> You Must Specify A Message</a></text>";
    }
    }



echo "
    <form action='' method='POST'>
<textarea name='post_message' id='post_message' placeholder='Whats Going On?'></textarea><br> 
       <input type='submit' name='post_message_submit' value='Post'>
        </form>

";


$fetch_index_query = $db->query("SELECT post_id,posted_by,post_body,post_active,group_name FROM " . TABLE_PREFIX . "groups_posts WHERE group_name='$get_group_url'");





while($fetch_index_groups_array = $db->fetch_array($fetch_index_query)) {
$post_id_row = $fetch_index_groups_array['post_id'];
$posted_by = $fetch_index_groups_array['posted_by'];
$g_name = $_fetch_index_groups_array['g_name'];
$g_body = $fetch_index_groups_array['post_body'];
echo("<br>" . "<a href=''> $posted_by </a>" . "<br>" . $gname
. "<br>____________
<br> 
<form action='' method='POST'>
<input type='text' name='comment_post' placeholder='Comment then Hit Enter'>
</form>
"
);
$fetch_comments_query = $db->query("SELECT g_name,post_body,comment_by FROM spud_groups_comments WHERE post_id='$post_id_row'");
while($fetch_groups_comments = $db->fetch_array($fetch_comments_query)) {
$post_body = $fetch_groups_comments['post_body'];




echo ("<br>" . $post_body);



}
$insert_query = $db->query("INSERT INTO " . TABLE_PREFIX . "groups_posts" . "(posted_by, group_name, post_body)
VALUES ('$mybb_username', '$get_group_url' ,'$post_message')");

}

//We have done everything we need to do we can now exit and not execute anything beyond this point
exit();
?>
  

Это программное обеспечение будет с открытым исходным кодом, так что вы действительно вносите свой вклад в эту функцию, помогая, поскольку я никогда раньше не продвигался так далеко.

Спасибо!

Комментарии:

1. Что такое объект $ db? Он случайно справляется только с одним набором результатов?

2. Это программный объект форума mybb, он просто заменяет MySQL на db

3. Вы выполняете цикл вокруг $fetch_index_query и для каждой возвращаемой строки выполняете вставку. Ничто во вставке не зависит ни от чего из $fetch_index_query, поэтому, похоже, нет смысла помещать вставку в цикл. Но способ, которым ваш код широко открыт для атак с использованием SQL-инъекций.

Ответ №1:

потому что вы используете запрос вставки дважды 🙂

Комментарии:

1. Я забыл упомянуть, что, лол, я дважды вставлял запрос в целях тестирования, но у него был другой запрос для вставки комментария, но по какой-то причине fetch_array вставляет его в базу данных из того, сколько комментариев было найдено (скажем, если найдено 4 сообщения, он вставит комментарий в базу данных 4 раза)

2. не говорите, что fetch_array вставляет его, на самом деле вы отправляете форму на той же странице, и php-скрипт может снова запуститься после отправки формы. Итак, попробуйте создать файлы и модуль вашего проекта

3. Я могу попробовать, но я извлек запрос вставки из fetch_array, и он вставлен только один раз, но мне нужно с в массиве выборки, чтобы получить row_id

4. В качестве хорошего предложения: никогда не создавайте динамические формы. Не пытайтесь включить HTML в php. На самом деле это плохая практика. используйте html и php и по возможности отдельно.

5. я делаю это только в целях тестирования, но скоро я их разделю

Ответ №2:

     <?php
            require_once ("core/connection.php");
            require_once ("core/group_functions.php");



                //We need to post the message update in to the database
            if(isset($_POST['post_message_submit'])) {
            $post_message_submit = $_POST['post_message_submit'];
            $post_message = $_POST['post_message'];
                if(($post_message_submit) amp;amp; ($post_message)) {

               // $insert_query = $db->query("INSERT INTO " . TABLE_PREFIX . "groups_posts" . "(posted_by, group_name, post_body) VALUES ('$mybb_username', '$get_group_url' ,'$post_message')");


                } else {
                echo "<text style='color:red;'> You Must Specify A Message</a></text>";
                }
                }



            echo "
                <form action='' method='POST'>
            <textarea name='post_message' id='post_message' placeholder='Whats Going On?'></textarea><br> 
                   <input type='submit' name='post_message_submit' value='Post'>
                    </form>

            ";


            $fetch_index_query = $db->query("SELECT post_id,posted_by,post_body,post_active,group_name FROM " . TABLE_PREFIX . "groups_posts WHERE group_name='$get_group_url'");





            while($fetch_index_groups_array = $db->fetch_array($fetch_index_query)) {
            $post_id_row = $fetch_index_groups_array['post_id'];
            $posted_by = $fetch_index_groups_array['posted_by'];
            $g_name = $_fetch_index_groups_array['g_name'];
            $g_body = $fetch_index_groups_array['post_body'];
            echo("<br>" . "<a href=''> $posted_by </a>" . "<br>" . $gname
            . "<br>____________
            <br> 
            <form action='' method='POST'>
            <input type='text' name='comment_post' placeholder='Comment then Hit Enter'>
            </form>
            "
            );
            $fetch_comments_query = $db->query("SELECT g_name,post_body,comment_by FROM spud_groups_comments WHERE post_id='$post_id_row'");
            while($fetch_groups_comments = $db->fetch_array($fetch_comments_query)) {
            $post_body = $fetch_groups_comments['post_body'];




            echo ("<br>" . $post_body);



            }
            $insert_query = $db->query("INSERT INTO " . TABLE_PREFIX . "groups_posts" . "(posted_by, group_name, post_body)
            VALUES ('$mybb_username', '$get_group_url' ,'$post_message')");

            }

            //We have done everything we need to do we can now exit and not execute anything beyond this point
            exit();
            ?>
  

Комментарии:

1. Я забыл упомянуть, что, лол, я дважды вставлял запрос в целях тестирования, но у него был другой запрос для вставки комментария, но по какой-то причине fetch_array вставляет его в базу данных из того, сколько комментариев было найдено (скажем, если найдено 4 сообщения, он вставит комментарий в базу данных 4 раза) Спасибо за попытку до сих пор;)

Ответ №3:

Удалите второй запрос вставки из кода.