За последние 24 часа нас посетили 15959 программистов и 1729 роботов. Сейчас ищут 1762 программиста ...

Тестовый плагин со своей таблицей базы данных

Тема в разделе "Wordpress", создана пользователем nowo, 13 июл 2024.

  1. nowo

    nowo Активный пользователь

    С нами с:
    14 май 2016
    Сообщения:
    44
    Симпатии:
    0
    Написал плагин

    главный файл плагина

    Код (Text):
    1. <?php
    2. /*
    3. Plugin Name: test message
    4. Plugin URI:
    5. Description: test message
    6. Version: 1.0.1
    7. Author: test
    8. Author URI: http://test
    9. */
    10.  
    11. include_once("inc/test-db.php");
    12. include_once("inc/test-shortcode.php");
    13.  
    14. // Hook for adding admin menus
    15. add_action('admin_menu', 'test_add_pages');
    16. // action function for above hook
    17. function test_add_pages(){
    18.  
    19.     add_options_page('test Options', 'test Options', 8, 'test-options', 'test_options_page');
    20. }
    21.  
    22. // mt_options_page() displays the page content for the Test Options submenu
    23. function test_options_page() {
    24.     echo "<h2>test Options</h2>";
    25.     echo '<hr>';
    26.  
    27.     global $wpdb;
    28.     $test_message = $wpdb->prefix.'test_message';
    29.  
    30.     // Удаляем подписчика
    31.     if(isset($_GET['delete_id'])){
    32.         $delid = $_GET['delete_id'];
    33.         $wpdb->query("DELETE FROM ".$test_message." WHERE id=".$delid);
    34.     }
    35.     ?>
    36.     <h1>Все подписчики</h1>
    37.  
    38.     <table width='100%' border='1' style='border-collapse: collapse;'>
    39.         <tr>
    40.             <th>№</th>
    41.             <th>Имя</th>
    42.             <th>Email</th>
    43.             <th>Telegram</th>
    44.             <th>Pass</th>
    45.             <th>&nbsp;</th>
    46.         </tr>
    47.         <?php
    48.         // Получаем записи и, если они есть, выводим
    49.         $entriesList = $wpdb->get_results("SELECT * FROM ".$test_message." order by id desc");
    50.         if(count($entriesList) > 0){
    51.             $count = 1;
    52.             foreach($entriesList as $entry){
    53.                 $id = $entry->id;
    54.                 $name = $entry->name;
    55.                 $email = $entry->email;
    56.                 $telegram = $entry->telegram;
    57.                 $pass = $entry->pass;
    58.  
    59.                 echo "<tr>
    60.           <td>".$count."</td>
    61.           <td>".$name."</td>
    62.           <td>".$email."</td>
    63.           <td>".$telegram."</td>
    64.           <td>".$pass."</td>
    65.           <td><a href='?page_id=410&delete_id=".$id."'>Удалить</a></td>
    66.           </tr>
    67.           ";
    68.                 $count++;
    69.             }
    70.         }else{
    71.             echo "<tr><td colspan='5'>Нет подписчиков</td></tr>";
    72.         }
    73.         ?>
    74.     </table>
    75.     <?php
    76. }
    77. ?>
    дале папка inc в ней 2 файла

    test-db

    Код (Text):
    1. <?php
    2. require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    3.  
    4. $test_message = $wpdb->prefix.'test_message';
    5.  
    6. $sql = "CREATE TABLE {$test_message} (
    7.     id int(11) NOT NULL AUTO_INCREMENT,
    8.     name varchar(255) NOT NULL,
    9.     email varchar(255) NOT NULL,
    10.     telegram varchar(255) NOT NULL,
    11.     pass varchar(255) NOT NULL,
    12.     PRIMARY KEY  (id)
    13. ) {$charset_collate};";
    14.  
    15. dbDelta( $sql );
    16. ?>
    Создади таблицу в базе данных

    далее шорткод

    test-shortcode

    Код (Text):
    1. <?php
    2. add_shortcode( 'test-message', 'test_message' );
    3. function test_message() {
    4.  
    5.     global $wpdb;
    6.  
    7.     // Добавляем подписчика
    8.     if(isset($_POST['submit'])){
    9.  
    10.         $name = $_POST['name'];
    11.         $email = $_POST['email'];
    12.         $telegram = $_POST['telegram'];
    13.         $pass = $_POST['pass'];    
    14.         $test_message = $wpdb->prefix.'test_message';
    15.  
    16.         if($name != '' && $email != ''){
    17.             // Проверяем по полю email есть ли такой подписчик
    18.             $check_data = $wpdb->get_results("SELECT * FROM ".$test_message." WHERE email='".$email."' ");
    19.             if(count($check_data) == 0){
    20.                 $insert_sql = "INSERT INTO ".$test_message."(name,email,telegram,pass) values('".$name."','".$email."','".$telegram."','".$pass."') ";
    21.                 $wpdb->query($insert_sql);
    22.                 echo "Подписчик добавлен!";
    23.             }
    24.         }
    25.     }
    26.  
    27.     ?>
    28.     <h1>Добавить подписчика</h1>
    29.     <form method="POST" action="">
    30.         <table>
    31.             <tr>
    32.                 <td>Имя</td>
    33.                 <td><input type='text' name='name'></td>
    34.             </tr>
    35.             <tr>
    36.                 <td>Email</td>
    37.                 <td><input type='text' name='email'></td>
    38.             </tr>
    39.             <tr>
    40.                 <td>Telegram</td>
    41.                 <td><input type='text' name='telegram'></td>
    42.             </tr>
    43.             <tr>
    44.                 <td>Pass</td>
    45.                 <td><input type='text' name='pass'></td>
    46.             </tr>
    47.             <tr>
    48.                 <td>&nbsp;</td>
    49.                 <td><input type='submit' name='submit' value='Добавить'></td>
    50.             </tr>
    51.         </table>
    52.     </form>
    53.     <?php
    54.  
    55. }
    56.  
    57. ?>
    ставлю шорткод создаю страницу данные в таблицу добовляются но всегда видно что форма не работает и вот такое сообщение в экране

    Но форма не работает и пишет страница не найдена ...Что надо исправить то дорогие знатоки ?
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    912
    Симпатии:
    143
    сменить платформу, не?
     
  3. nowo

    nowo Активный пользователь

    С нами с:
    14 май 2016
    Сообщения:
    44
    Симпатии:
    0
    платформу это сам движок вордпресс на какой то другой ? операционку ? хостинг ? )) что такое платформа ?)
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    414
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    Вот такое сообщение на экране -
    Выдаётся пустая страница?
    Включите error reporting. Возможно в коде фатальная ошибка.
    Уточните "форма не работает и пишет страница не найдена"

    По Вашей function test_message:
    1. В поля формы добавил атрибут required
    2. Добавил prepare (защита от SQL-инъекций)
    PHP:
    1. <?php
    2. add_shortcode( 'test-message', 'test_message' );
    3. function test_message() {
    4.     global $wpdb;
    5.     // Добавляем подписчика
    6.     if(isset($_POST['submit'])){      
    7.         $test_message = $wpdb->prefix.'test_message';
    8.      
    9.         // Проверяем по полю email есть ли такой подписчик
    10.         $select_sql = "SELECT * FROM $test_message WHERE email= %s";      
    11.         $check_data = $wpdb -> get_results($wpdb->prepare($select_sql, $_POST['email']));
    12.         if($check_data)
    13.         {
    14.             echo "Такой подписчик есть!";
    15.         }
    16.         else  
    17.         {
    18.             $insert_sql = "INSERT INTO $test_message (name, email, telegram, pass) values (%s, %s, %s, %s)";
    19.             $res = $wpdb->query($wpdb->prepare($insert_sql,
    20.                 $_POST['name'],
    21.                 $_POST['email'],
    22.                 $_POST['telegram'],      
    23.                 $_POST['pass']));
    24.             if($res)
    25.                 echo "Подписчик добавлен!";
    26.             else
    27.                 echo "Подписчик не добавлен!";
    28.         }    
    29.      
    30.     }
    31.     echo <<<HTML
    32.     <h1>Добавить подписчика</h1>
    33.     <form method="POST" action="">
    34.         <table>
    35.             <tr>
    36.                 <td>Имя</td>
    37.                 <td><input type='text' name='name' required></td>
    38.             </tr>
    39.             <tr>
    40.                 <td>Email</td>
    41.                 <td><input type='text' name='email' required></td>
    42.             </tr>
    43.             <tr>
    44.                 <td>Telegram</td>
    45.                 <td><input type='text' name='telegram' required></td>
    46.             </tr>
    47.             <tr>
    48.                 <td>Pass</td>
    49.                 <td><input type='text' name='pass' required></td>
    50.             </tr>
    51.             <tr>
    52.                 <td>&nbsp;</td>
    53.                 <td><input type='submit' name='submit' value='Добавить'></td>
    54.             </tr>
    55.         </table>
    56.     </form>
    57. HTML;
    58. }
    59. ?>
    Удачи!
     
    nowo нравится это.
  5. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    414
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    (дополнение)
    Забыл убрать * из Вашего SELECT * FROM.
    Для проверки есть ли такой подписчик по полю email не нужно выбирать все поля таблицы
    д.б.
    PHP:
    1. $select_sql = "SELECT 1 FROM $test_message WHERE email =  %s";
     
    nowo нравится это.
  6. nowo

    nowo Активный пользователь

    С нами с:
    14 май 2016
    Сообщения:
    44
    Симпатии:
    0
    Оп. то что надо ! БЛАГОДАРЮ !
    --- Добавлено ---
    Огромное спасибо !!! реально !!!
     
  7. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    912
    Симпатии:
    143
    движок )
    SELECT TRUE, оптимизять так оптимизять )
     
    nowo нравится это.
  8. nowo

    nowo Активный пользователь

    С нами с:
    14 май 2016
    Сообщения:
    44
    Симпатии:
    0
    Форум где действилельно помогут в интернете много воды и ни чего по существу. а вопрос следующий Есть ли какие фильтры чтобы записывать содиржимое json файла в свою таблицу данных ? тоесть сам поток данных идёт с уже установленными id а надо чтобы ид шли по своим id так как уже стоит auto_increment где автоматически присваивается ld и таблица забивается повторяющимися данными Тоесть поток id 4364 далее id 53568 а надо чтоб шли они по порядку id 1 2 и так далее