Как удалить строку из моей базы данных на основе значения сообщения в строке - PullRequest
0 голосов
/ 14 февраля 2020

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

Если пользователь хочет удалить строку из базы данных, у меня есть кнопка удаления, которая изменяет значение формы «is_active» с «да» на «нет» для этой конкретной строки, и когда они отправляют форму, я хотите удалить строку, которая имеет значение сообщения 'is_active' 'нет'.

Я использую $ wpdb для замены строк, а также для их удаления. Код, который я закомментировал, заканчивает тем, что удаляет все строки в таблице, а не только те, у которых значение is_active post равно 'no'.

Вот мой код:

<?php
    require_once '../../../wp-load.php';

    global $wpdb;
    $newdb = new wpdb( 'user' , 'pass' , 'table' , 'localhost' );

    if(isset($_POST['submit'])) {

        $username = $_POST['username'];
        $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $county = $_POST['county'];
        $street = $_POST['street'];
        $city = $_POST['city'];
        $ward = $_POST['ward'];
        $precinct = $_POST['precinct'];
        $id = $_POST['id'];
        $is_active = $_POST['is_active'];


        if(is_array($_POST)) {
            foreach($username as $index => $value) {
              if   (in_array("no", $_POST['is_active'], TRUE))
              { 
              /*  $newdb->delete( 'member_lists', array( 'id' => $id[$index])); */
                        $newdb->query( 
                            $newdb->prepare( 
                                    "
                                     DELETE FROM $newdb->member_lists
                                     WHERE id = $id[$index]
                                     AND $is_active[$index] = 'no'
                                    " 
                                    )
                        ); 

                       $newdb->replace( 'member_lists', 
                array( 
                        'id' => $id[$index],
                        'username' => $value, 
                        'first_name' => $first_name[$index],
                        'last_name' => $last_name[$index],
                        'county' => $county[$index],
                        'street' => $street[$index],
                        'city' => $city[$index],
                        'ward' => $ward[$index],
                        'precinct' => $precinct[$index]

                    ), 
                    array( 
                        '%s',
                        '%s', 
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                    ) 
);

                $wpdb->show_errors();

              }
                else{
                $newdb->replace( 'member_lists', 
                array( 
                        'id' => $id[$index],
                        'username' => $value, 
                        'first_name' => $first_name[$index],
                        'last_name' => $last_name[$index],
                        'county' => $county[$index],
                        'street' => $street[$index],
                        'city' => $city[$index],
                        'ward' => $ward[$index],
                        'precinct' => $precinct[$index]

                    ), 
                    array( 
                        '%s',
                        '%s', 
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                    ) 
);

                $wpdb->show_errors();
                }

            }   
        }

    }

?>

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Я мог бы не использовать этот метод, но для ответа на вопрос вот решение, которое я нашел.

Вместо того, чтобы пытаться прочитать значение «is_active» перед вставкой / обновлением и затем удалить запись из базы данных, я отправил это значение в базу данных, а затем после моего первоначального запроса «замена», Я запускаю второй запрос, где я удаляю из базы данных любую строку, где значение «is_active» равно «no».

Ввиду того, что любая строка, где 'is_active' помечена как 'нет' для удаления, я вообще не хочу ее в базе данных, поэтому я не пытаюсь читать строки на основе индекса.

<?php
    require_once '../../../wp-load.php';

    global $wpdb;
    $newdb = new wpdb( 'user' , 'pass' , 'table' , 'localhost' );

    if(isset($_POST['submit'])) {

        $username = $_POST['username'];
        $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $county = $_POST['county'];
        $street = $_POST['street'];
        $city = $_POST['city'];
        $ward = $_POST['ward'];
        $precinct = $_POST['precinct'];
        $id = $_POST['id'];
        $is_active = $_POST['is_active'];


        if(is_array($_POST)) {
            foreach($username as $index => $value) {

                $newdb->replace( 'member_lists', 
                array( 
                        'id' => $id[$index],
                        'username' => $value, 
                        'first_name' => $first_name[$index],
                        'last_name' => $last_name[$index],
                        'county' => $county[$index],
                        'street' => $street[$index],
                        'city' => $city[$index],
                        'ward' => $ward[$index],
                        'precinct' => $precinct[$index],
                        'is_active' => $is_active[$index]

                    ), 
                    array( 
                        '%s',
                        '%s', 
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                        '%s',
                    ) 
);

                $newdb->show_errors();



            }


        } 

        if ($newdb) {
$newdb->delete('member_lists', array('is_active' => "no"));
            wp_redirect('http://website.com/home/list-has-been-updated/');

}
    }

?>

0 голосов
/ 14 февраля 2020
change this string only
"DELETE FROM $newdb->member_lists WHERE id = $id[$index] AND $is_active[$index] = 'no'" 

к этому и попробуйте

"DELETE FROM ".$newdb->member_lists." WHERE id = ".$id[$index]." AND ".$is_active[$index]." = 'no';"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...