Не могу вставить данные в таблицу.POST не работает? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь создать свой собственный шаблон, который позволит мне вставлять пользовательские данные в таблицу, но данные POST не отправляются при тестировании формы. Вот мой текущий код:

<?php /* Template Name: signup-volunteers */

get_header(); ?>

<header class="archive-header">
            <div class="cover-container row">
                <div class="inner cover col-md-12">
                    <h1 class="cover-heading"><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
                    <p class="lead"><?php bloginfo( 'description' ); ?></p>
                </div>
            </div>
        </header>

        <div class="container blog">
            <div class="row">
            <?php
                $theme_layout = get_theme_mod( 'latte_blog_sidebar', 'full' );
                if ($theme_layout=="left") :
                    get_sidebar();
                endif;
            ?>
            <?php if ($theme_layout=="full") : ?>
                <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
            <?php else: ?>
                <div class="col-lg-8 col-md-8">
            <?php endif; ?>
                <?php the_post() ?>
                <?php get_template_part( 'content', 'page' );

<?php

if (isset($_POST['submit'])) :
    // Process the form
    global $wpdb;
    $wpdb->show_errors(true);
    $table = $wpdb->prefix.'volunteers';
    var_dump($_POST);
    $data = array(
        'name' => $_POST['name'],
        'email' => $_POST['email'],
        'city' => $_POST['city'],
        'skills' => $_POST['skills']
    );
    $format = array(
        '%s',
        '%s',
        '%s',
        '%s'
    );
    $result = $wpdb->insert($table, $data, $format);
    if ($result):
        echo 'Successfully saved the data.';
    else:
        $wpdb->print_error();
    endif;
else :
?>
                <form method="post" action="">
                    <label for="name">Full Name: </label> <input type="text" name="name" id="name" required/>
                    <label for="email">Email: </label> <input type="email" name="email" id="email" required/>
                    <label for="city">City or Township: </label> <input type="text" name="email" id="city" required/>
                    <label for="skills">Skills: </label> <input type="text" name="skills" id="skills" />
                    <br />
                    <input type="submit" name="submit">
                </form>
                <br />
                </div>
            </div>
        </div>

<?php endif;

get_footer(); ?>

Я попытался добавить несколько операторов отладки, чтобы увидеть данные $_POST, но все это выглядит как NULL, когда я это делаю. Я не уверен, что делаю не так, потому что мой код соответствует другим версиям, которые я видел в других сообщениях как одобренные ответы.

1 Ответ

0 голосов
/ 13 мая 2019

Оказывается, я угонял имя переменной в WordPress. Не называйте переменные POST "name" или "email". Префикс это с чем-то:

<?php /* Template Name: signup-volunteers */
var_dump($_POST);
get_header(); ?>

<?php

if (isset($_POST['submit'])) :
    // Process the form
    global $wpdb;
    $wpdb->show_errors(true);
    $table = $wpdb->prefix.'volunteers';
    $data = array(
        'name' => sanitize_text_field($_POST['vol_name']),
        'email' => sanitize_email($_POST['vol_email']),
        'city' => sanitize_text_field($_POST['vol_city']),
        'skills' => sanitize_text_field($_POST['vol_skills'])
    );
    $format = array(
        '%s',
        '%s',
        '%s',
        '%s'
    );
    $result = $wpdb->insert($table, $data, $format);
    if ($result):
        echo 'Successfully saved the data.';
    else:
        $wpdb->print_error();
    endif;
else :
?>
        <header class="archive-header">
            <div class="cover-container row">
                <div class="inner cover col-md-12">
                    <h1 class="cover-heading"><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
                    <p class="lead"><?php bloginfo( 'description' ); ?></p>
                </div>
            </div>
        </header>

        <div class="container blog">
            <div class="row">
            <?php
                $theme_layout = get_theme_mod( 'latte_blog_sidebar', 'full' );
                if ($theme_layout=="left") :
                    get_sidebar();
                endif;
            ?>
            <?php if ($theme_layout=="full") : ?>
                <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
            <?php else: ?>
                <div class="col-lg-8 col-md-8">
            <?php endif; ?>
                <?php the_post() ?>
                <?php get_template_part( 'content', 'page' ); ?>
                <form method="post">
                    <label for="vol_name">Full Name: </label> <input type="text" name="vol_name" id="vol_name" required/>
                    <label for="vol_email">Email: </label> <input type="email" name="vol_email" id="vol_email" required/>
                    <label for="vol_city">City or Township: </label> <input type="text" name="vol_city" id="vol_city" required/>
                    <label for="vol_skills">Skills: </label> <input type="text" name="vol_skills" id="vol_skills" />
                    <br />
                    <input type="submit" name="submit">
                </form>
                <br />
                </div>
            </div>
        </div>

<?php endif;

get_footer(); ?>

Код выше работал. Решение найдено здесь: https://wordpress.stackexchange.com/questions/11749/why-when-i-submit-a-form-in-wordpress-it-loads-a-404-page-though-url-is-correct

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