WordPress

wtyczki — Nie można zapisać danych formularza w bazie danych

  • 28 kwietnia, 2023
  • 4 min read
wtyczki — Nie można zapisać danych formularza w bazie danych


Próbuję zbudować formularz w zapleczu, aby zapisać niektóre dane w niestandardowej tabeli. Formularz jest listą checkboxów, w których wartość jest powiązana z wybranym użytkownikiem.

Musisz więc wybrać użytkownika z listy rozwijanej, nacisnąć filtr, a następnie wykonać wywołanie ajax, aby załadować prawdziwy formularz z zaznaczoną wartością, gdy był sprawdzany wcześniej. Te części działają dobrze, mam wstępnie sprawdzone wartości. Po przesłaniu formularz musi zapisać wybrany identyfikator_użytkownika, a także zaznaczone pola wyboru, aby zapisać każdą zaznaczoną wartość z odpowiednim identyfikatorem_użytkownika.

Kłopoty pojawiają się, gdy próbuję zapisać formularz. Pierwszym problemem jest to, kiedy umrę(var_dump($_POST)); na początku mojej funkcji zapisywania otrzymuję wybrany identyfikator użytkownika zgodnie z oczekiwaniami, ale nie dostaję wszystkich zaznaczonych pól wyboru, a zamiast tego otrzymuję tylko ostatnią zaznaczoną wartość (przykład zaznaczam 4 pola wyboru Oczekuję 4 identyfikatorów w $ _ Post , ale dostaję tylko ostatni). Dziwne jest to, że jeśli spojrzę na ładunek w zakładkach sieciowych, widzę wszystkie moje dane, ale jakoś nie trafiają one do mojego $ _Post.

Drugi problem polega na tym, że przed zapisaniem muszę sprawdzić, która wartość jest już w bazie danych, aby móc zapisać nowe i usunąć niezaznaczone wartości. Jak mogę to zrobić ? Próbowałem kilku rzeczy, ale nie wiem, jak sobie z tym poradzić. I na koniec moja pętla zapisywania nie działa, WordPress zawsze zwraca „Błąd bazy danych WordPress: [You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ” at line 1] WŁÓŻ W wp_mytable( store_id,data_id) VALUES;” Czy ktoś może mi pomóc to rozgryźć?

brand.php

 <div class="wrap">

     <div class="brand">
         <div class="brand_dropdown">
             <p class="brand_text">Form </p>

             <form method="POST"  action="<?php echo site_url() ?>/wp-admin/admin-ajax.php">
                 <div class="select">
                     <input type="hidden" name="action" value="filterBrandRestrict">

                     <select name="retailerfilterwatch">
                         <option value="">Select retailer...</option>
                         <?php

                            $posts = new WP_Query(array('post_type' => 'retailer'));
                            while ($posts->have_posts()) : $posts->the_post();
                                wp_reset_postdata(); ?>
                             <option id="selection" value="<?php echo get_the_ID(); ?>"><?php echo get_the_title(); ?></option>

                         <?php endwhile; ?>
                     </select>


                     <button id="filter_btn">Apply filter</button>

                 </div>
             </form>
         </div>
         <div class="brand__checkbox" id="responseBrand">




         </div>
     </div>
Form.php

add_action('wp_ajax_filterBrandRestrict', 'filter_brand_retailer');
add_action('wp_ajax_nopriv_filterBrandRestrict', 'filter_brand_retailer');

function filter_brand_retailer()
{

    $store_id = $_POST['retailerfilter'];
    global $wpdb;
    //var_dump($_POST);

    $query = $wpdb->prepare("SELECT data_id FROM `mytable` WHERE `store_id` = '%d'", $store_id);

    $results = $wpdb->get_results($query, OBJECT_K);

    $Brand = new WP_Query(array('post_type' => 'watch_brand'));
?>
    <?php
    if ($Brand->have_posts()) : ?>
        <div class="control-group legend_brand">
            <form method="post" action="<?php echo site_url() ?>/wp-admin/admin-post.php" contentType: false,>
                <!-- Store id -->
                <input type="hidden" name="store_ids" value="<?php echo $store_id ?>">
                <input type="hidden" name="action" value="saveBrand">
                <!--  loop on brand to create checkboxes -->
                <?php while ($watchBrand->have_posts()) : $watchBrand->the_post(); ?>
                    <label class="control control-checkbox">
                        <?php echo get_the_title(); ?>

                        <input name="data_ids" value="<?php echo get_the_ID(); ?>" <?= isset($results[get_the_ID()]->data_id)  == get_the_ID() ? 'checked' : '' ?> type="checkbox" />

                        <div class="control_indicator"></div>
                    </label>
                <?php endwhile; ?>
                <div class="submit_default">
                    <button name="Submit" class="submit_button" type="submit">Envoyer</button>
                </div>
            </form>
        </div>
<?php
        wp_reset_postdata();
    else :
        echo 'No posts found';
    endif;

    die();
}

Dzięki

Warto przeczytać!  Jesteś bezpieczny! Najnowsza wersja Hummingbird umożliwia ręczną optymalizację w trybie chronionym


Źródło