Данные не вставляются в базу данных WordPress - PullRequest
1 голос
/ 10 января 2020

Я использую приведенный ниже код для вставки данных в мою базу данных WordPress. Этот код не работает должным образом, когда я вставляю данные, он показывает ту же страницу, и данные не вставляются в базу данных.

<?php get_header(); ?>
<div class="content">
    <form>
        Job Title: <input type="text" name="jtitle"><br><br>
        Job Link: <input type="text" name="jlink"><br><br>
        Job Last date: <input type="text" name="jld"><br><br>
        <input type="submit" value="Add Job" name="insert"><br><br>
    </form>
    <?php
    if (isset($_POST['insert'])) {
        $jt=$_POST['jtitle'];
        $jl=$_POST['jlink'];
        $jld=$_POST['jld'];

        global $wpdb;
        $sql=$wpdb->insert("wp_job",array("jtitle"=>$jt,"jlink"=>$jl,"jld"=>$jld));
        if ($sql==true) {
            echo "<script>alert('New Job Added')</script>";
        }
        else {

            echo "<script>alert('New Job Not Added!')</script>";
        }
    }
?>
</div><!-- .content /-->

Ответы [ 4 ]

3 голосов
/ 10 января 2020

Если вы работаете в WordPress, вам нужно обрабатывать POST-запросы по WordPress Way

From:
<form> 

To:
<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" 
method="post">

/* add this line somewhere in between the <form> tag. */
   <input type="hidden" name="action" value="job_form">

/* Open up functions.php of your current theme and add these lines in: */

function addNewJob() {
 /**
* At this point, $_GET/$_POST variable are available
 * eg: $jld = $_POST['jld'];
 *
* We can do our normal processing here
 */ 

}
add_action( 'admin_post_nopriv_job_form', 'addNewJob` );
add_action( 'admin_post_job_form', 'addNewJob` );
3 голосов
/ 10 января 2020

Вы отправляете форму без указания атрибута метода, вы должны определить method = "post" для получения данных по isset ($ _ POST ['insert']) или вы также можете получить все данные, используя $ _REQUEST , но я рекомендовал вам определить action и method attribute .

Здесь вы также можете видеть, что по умолчанию используется метод формы GET Что такое метод HTTP по умолчанию для формы?

Удачи, спасибо

1 голос
/ 10 января 2020

Вам необходимо добавить атрибут «action» со значением «Post» в тег формы

<div class="content">
<?php
    if (isset($_POST['insert'])) {
        global $wpdb;
        $wp_job = $wp_prefix.'job';
        $jt = $_POST['jtitle'];
        $jl = $_POST['jlink'];
        $jld = $_POST['jld'];
        $sql = $wpdb->insert( $wp_job , array( "jtitle"=>$jt, "jlink"=>$jl, "jld"=>$jld ) );
        if ($sql==true) {
            echo "<script>alert('New Job Added')</script>";
        }
        else {
            echo "<script>alert('New Job Not Added!')</script>";
        }
    }
?>
<form method="post" action="">
    Job Title: <input type="text" name="jtitle"><br><br>
    Job Link: <input type="text" name="jlink"><br><br>
    Job Last date: <input type="text" name="jld"><br><br>
    <input type="submit" value="Add Job" name="insert"><br><br>
</form>
</div><!-- .content /-->

Протестировано и работает. Спасибо

1 голос
/ 10 января 2020

Вы отправляете данные формы, используя метод HTTP GET по умолчанию, а не метод POST. Поскольку ваш тег формы HTML не указывает метод отправки, по умолчанию используется GET, а не POST.

Либо измените тег формы в HTML на, либо в вашем PHP измените значения $ _POST на $ _GET.

Вот еще немного документации для HTML 5 формы, если вам нужно https://html.spec.whatwg.org/#attr -fs-action

PS: вам не нужно проверять переменная $ _POST ['insert'], установлена ​​ли она для отправки. Вы можете просто выполнить isset ($ _ POST), чтобы увидеть, были ли отправлены какие-либо данные формы.

Удачи!

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