Удаление строки из базы данных на основе идентификатора из цикла while

#php

#php

Вопрос:

У меня есть цикл while, который выводит все мои записи в блоге. Наряду с этими сообщениями в блоге рядом с каждым из них появляется кнопка с красным крестиком, при нажатии на которую я хочу, чтобы она удаляла сообщение рядом с ней. Проблема? Я не придумал эффективного способа решить, какую запись удалить. Обычно это либо удаляет запись по наибольшему идентификатору, либо все записи. Итак, я дам вам представление о том, что у меня есть … (это не мой реальный код, просто представление о нем).

        $result = mysql_query("SELECT * FROM post");

       while($row = mysql_fetch_array($result){


         $someVariable = $row['Id'];
         $someVariable1 = $row['title'];
         $someVariable2 = $row['content'];

?>
        //This form right below here is the delete button. It functions, just need how to pull the correct Id***

        <form action="" method="post">
       <input type="submit" id ="<?php echo $someVariable ?>" value="" class="submit2" onClick="confirmation()">
    </form>

    <form action="" method="post">
      <input type="submit" value="" class="submit3">
    </form>

        <script type="text/javascript">
       <!--
        function confirmation() {
            var answer = confirm("Delete Post?")
            if (answer){

                <?php 


                    mysql_query("DELETE FROM posts WHERE id=***"); 

                ?>


            }

        }
       //-->
       </script>




<?php }?>
  

Проблема заключается в функции внутри Javascript. Кажется, я не могу понять, как заставить его вернуть правильный идентификатор. Я довольно плохо разбираюсь в php, так что будьте проще со мной: p.

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

1. Всем спасибо за помощь! Это было очень полезно.

2. Приветствую, но помните, что в этом коде вы можете неосознанно уничтожить всю таблицу базы данных. Пожалуйста, поймите, что PHP и Javascript-код на самом деле выполняются в разные моменты!

Ответ №1:

Что вы хотите, так это отправить форму, когда пользователь подтвердит удаление, и обработать само удаление на сервере.

   function confirmation() {
    var answer = confirm("Delete Post?")
       return answer;
  }
  

Таким образом, форма отправляется, когда пользователь подтверждает, и отправка отменяется, когда пользователь не подтверждает.

Включите идентификатор в скрытый элемент формы с именем «id». Пусть форма отправляется на страницу php, которая затем извлекает идентификатор из $ _POST[‘id’] и выполняет инструкцию SQL в базе данных, а затем снова перенаправляет на страницу списка.

Ответ №2:

Вы не можете смешивать PHP и Javascript таким образом. Послушайте меня, похоже, что что-то или кто-то ужасно ввел вас в заблуждение, и вам нужно начинать с основ, с нуля.

Пожалуйста, послушайте меня: поищите какой-нибудь базовый учебник по PHP и помните, что PHP — это текстовый препроцессор, в то время как Javascript позволяет вам осуществлять динамическое взаимодействие после полной загрузки страницы. Это на стороне клиента, тогда как PHP — на стороне сервера. Возможно, вы узнаете об их смешивании позже.

Вам может не понравиться этот ответ, уменьшите его, если хотите, но это единственный разумный вариант для такого сценария. Забудьте об AJAX и других причудливых технических особенностях, которые другие люди предлагали вам ответить на этот вопрос, потому что вы в конечном итоге будете использовать их, когда изучите основы, иначе вы будете разочарованы тем, что не сможете заставить их работать. Вам нужно некоторое время выполнять «hello world».

Вернитесь к основам, или вы натворите какую-нибудь неразбериху!

Ответ №3:

Вы не можете смешивать PHP и Javascipt так, как вы предлагаете. Часть PHP выполняется на сервере, результат отправляется обратно пользователю, и только после этого выполняется Javascript.

Вам нужно будет использовать AJAX / XMLHttpRequest для достижения того, чего вы хотите.

Ответ №4:

Предполагая, что я понимаю, о чем вы спрашиваете, вместо установки id элемента submit, возможно, было бы лучшей идеей включить вместо этого hidden элемент form:

 <input type='hidden' name='postID' value='<?php echo $someVariable; ?>'>
  

При обработке формы используйте это вместо.

Ответ №5:

Ну, я не занимаюсь PHP, и я застрял в winforms land примерно на 4 года по долгосрочному контракту прямо сейчас, но я полагаю, что ответ заключается в том, что вы можете передать parmeter (this) вашей функции confirmation () подтверждение (this), которое предоставит вам доступ ко всем свойствам кнопки в вашей функции javascript.

Ответ №6:

Вы не можете выполнить PHP-скрипт из JavaScript, как вы ожидаете. Что вам нужно сделать, так это заставить JavaScript вызывать PHP-скрипт в ajax-подходе.

Ответ №7:

Есть ли у вашего php echo

 "<a href="javascript:deleteMe($id)"><img src="x.jpg" /></a>"
  

в html. Затем javascript должен принять параметр в функцию удаления и отправить AJAX-запрос к вашему php-файлу.

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

1. Разве вы не видите, что нельзя предлагать ajax кому-либо, смешивающему js и php таким образом?

2. Вы абсолютно можете. Javascript существует отдельно от php. Все, что php должен сделать, это повторить содержимое, которое потребуется js, и иметь отдельный php-файл, готовый принять запрос. Если вас беспокоит безопасность, вам также потребуется пройти подтвержденный сеанс.

3. Я не заставил вас понять мою точку зрения. Посмотрите, это просто. Если кто-то путает серверный и клиентский код таким серьезным и очень опасным способом (он может удалять строки таблицы!), вы должны предложить ему / ей перейти на технологию next step (AJAX предназначен для тех, кто действительно понимает и PHP, и Javascript) или вместо этого жестоко, но с пользой, указать ему / ей на ОСНОВЫ? Если кто-то не умеет выполнять целочисленные деления, не могли бы вы предложить ему установить Matlab Simulink для их выполнения? Это заставило бы его хуже их понимать.

Ответ №8:

Вам не нужна форма для каждой записи. Просто используйте тег привязки с обработчиком onclick, который указывает на вашу функцию подтверждения. Вы можете повторить идентификатор записи в своей функции подтверждения. Затем попросите функцию подтверждения обновить скрытое поле в вашей форме для идентификатора записи для удаления, а затем отправьте форму вашему php-скрипту удаления.