цикл foreach в форме с данными таблицы базы данных, изменение данных и обновление базы данных в плагине WordPress - PullRequest
0 голосов
/ 27 октября 2019

Я создаю плагин для WordPress для удовольствия, и я хочу что-то сумасшедшее, я думаю.

  1. создать форму с циклом foreach со всей таблицей базы данных.
  2. изменить данные всей таблицы базы данных
  3. обновить данные базы данных этой таблицы

У меня есть это до сих пор, но я застреваю, когда хочу обновить записи.


<form method="post">
<input type="hidden" name="form_hidden" value="Y">
<table>
<tbody>
        <?php 
        global $wpdb;
        $post_id = $wpdb->get_results("SELECT * FROM tbl_name ORDER BY id ASC"); 
        foreach($post_id as $row){ 
        echo    '<tr><td>' . $row->id . '</td><td><input type="text" name="' . $row->name . '" value="' . $row->name . '" /></td></tr>';
        }

        ?>
</tbody>
</table>
<input type="submit" name="Submit" value="Update Options" />
</form>


<?php


if($_POST['form_hidden'] == 'Y') {
    //update database
    global $wpdb;

        foreach($_POST['name'] as $item){
                $wpdb->replace( 'tbl_name',  ); // <- some kind of array here
        }


}

1 Ответ

0 голосов
/ 13 ноября 2019

Есть несколько проблем, я думаю.

  1. wpdb :: replace (...) заменяет столбцы всех строк на ОДНО значение;это не то, что вы хотите, правильно?
  2. Чтобы обновить правильную строку в вашей таблице, вы должны обратиться к соответствующему первичному ключу. Я предполагаю «id» в вашем случае.
  3. Чтобы хранить несколько значений в вашей форме как «массив», вы должны использовать имена полей, такие как «name []».

Давайте сложим все вместе:

// in your form creation loop...
foreach($post_id as $row){ 
    echo '<tr><td><input type="text" name="id[]" value="' . $row->id . '" /></td><td><input type="text" name="name[]" value="' . $row->name . '" /></td></tr>';
}

// processing the new values
foreach($_POST['id'] as $I => $id) {
    $sql = $wpdb->prepare("UPDATE tbl_name SET name=%s where id=%d"
        , $_POST['name'][$I]
        , $id
        );
    $wpdb->query($sql);
}

Это только интересные части - просто объедините их с существующим кодом. См.

Полезные ссылки:

https://developer.wordpress.org/reference/classes/wpdb/prepare/

https://developer.wordpress.org/reference/classes/wpdb/query/

https://www.php.net/manual/en/faq.html.php

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...