首页 > 解决方案 > 如何返回 POST 值并在网站上打印?(wordpress)

问题描述

这是 page-user-form.php

            <form action="<?php echo esc_attr( admin_url('admin-post.php') ); ?>" method="POST" id="userForm">
    <input type="hidden" name="action" value="user_form2">
    <p><label for="form-title">pass name:
            <input type="text" name="pass" id="form-title">
    </label></p>
    <input type="submit" value="submit">
</form>

这是wordpress中的functions.php文件

function user_form() {
  check_admin_referer( 'user_form2' );
  global $wpdb, $inputValue;
  $inputValue = $_POST['pass'];
  $query = $wpdb->prepare("SELECT * FROM wp_kboard_board_content WHERE title = %s", $inputValue);
  $query_result = $wpdb->get_results($query);

    if($inputValue){
    wp_redirect( esc_url( home_url( '/wordpress/result/' )));
    exit;
}
return $query_result;
}
//user_form();
add_action( 'admin_post_nopriv_user_form2', 'user_form' );
add_action( 'admin_post_user_form2', 'user_form' );


add_shortcode('my_db_print','my_db_print_function');
function my_db_print_function(){
ob_start();
$results =  user_form();
echo "<table border='1'><tr><th>title</th><th>content</th><th>date</th><th>category1</th></tr>";
foreach ( $results as $result ) 
{
echo"<tr>";
echo"<td>".$result->title."</td>";
echo"<td>".$result->content."</td>";
echo"<td>".$result->date."</td>";
echo"<td>".$result->category1."</td>";
echo"<tr>";
}
echo"</table>";
return ob_get_clean(); */
}

我想根据用户输入的值输出特定的数据库数据(mysql)。($_POST['pass'])但即使有数据,结果也是 NULL。

我不知道哪一部分是错的。有人请帮帮我!!!

标签: phpwordpressweb

解决方案


我从我的评论中做出了回答,因为它似乎是正确的解决方案:

我可以看到调用 user_form 的两种不同情况。

a) 当表单 #userForm 被实际提交时。add_action-lines 应该触发它。它返回裸数据,但不生成任何输出。看看https://developer.wordpress.org/reference/hooks/admin_post_action/

b) 完全不相关,它是从 my_db_print_function 调用的,它是一个短代码解析器。这意味着,如果在帖子中有一个短代码[my_db_print],则内容将被函数的结果替换。

但是在显示帖子的这一点上,里面有什么$_POST吗?很可能不是;除了提交的结果页面#userForm正在显示帖子。但是如果你稍后再看帖子,$_POST就会是空的。简而言之:存在一个概念性错误。从那里打电话my_db_print_function而不是反过来。


推荐阅读