在数据库中存储文本框值

时间:2014-10-09 作者:lost_in_magento

我是WordPress新手,但我擅长PHP编程,如果我想从文本框中获取值并将其存储在WordPress的数据库中,我能做什么?

对于ex

form1.html

<form name="form" method="post" action="value_get.php">
<input type="text" id="t1" name="t1">
<input type="submit" value="submit">
</form>

value_get.php

<?php

$firstname = mysqli_real_escape_string($con, $_POST[\'tb1\']);

$con=mysqli_connect("localhost","root","","wordpress");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"INSERT INTO wp_exTable (FirstName)
VALUES (\'$firstname\')");


if (!mysqli_query($con,$sql)) {
  die(\'Error: \' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>
我可以在WordPress中做这些事情吗?稍加调整

5 个回复
最合适的回答,由SO网友:gmazzap 整理而成

从PHP到WordPress,如果您有编程和PHP方面的经验,那么您知道保存来自表单的数据基本上包括以下步骤:

验证(validation)和清理(Sanitation)与数据库的连接(connection to database)将值存储在数据库中(store value in database),即使“普通”PHP对所有这些都适用,WordPress也有帮助程序和特定的最佳实践。

验证这是WordPress对您帮助不大的唯一部分。PHP是您在这里的朋友。

消毒

WordPress有不同的消毒助手。

对于来自表单的数据,有不同的sanitize\\u*函数,如sanitize_text_field() 您可以使用的。找到他们here. 请注意,并非链接中的所有函数都对作用域有用。

连接到数据库在WordPress上下文中,您不连接到数据库。您可以让WordPress这样做,然后使用数据库API对数据库执行查询。

WordPress数据库API总结在wpdb 对象,在全局$wpdb 变量

没有别的事可做了。WordPress还将在必要时负责关闭连接。

在数据库中存储值global $wpdb API可用here. 正如你所看到的,有很多方法。

最有用的可能是积垢的帮手:

  • get_results() / get_row() / get_col() / get_var()
  • insert()
  • update()
  • delete()sanitize_* 上述函数在保存到数据库之前,应使用特定于数据库的方法进行转义。

    对于范围,有一种方法prepare() 它提供了一种使用sprintf-类似语法。

    表单页面和表单处理例程上述所有内容都是处理表单数据所必需的。

    但是,您还需要:

    放置表单的“页面”放置表单处理例程的“位置”

    对于frontent表单,您可能会将所有HTML放在其中一个模板中,就是这样。

    对于后端表单,有许多可能性。

    如果要存储发布到帖子的值,可能需要add a metabox 然后在那里放置一个表单。实际上,在这种情况下,您不使用“完整”表单,而只使用成为整个后期编辑表单一部分的表单输入。

    可以采用相同的方法,使用特定的“挂钩”,添加字段以编辑/创建分类法、用户等的表单。这个网站和整个网站都有关于这方面的例子和指导。

    如果您要存储的数据与任何WordPress核心“实体”完全无关(例如,您将为自定义插件构建一个选项页),您可能希望register an admin page 然后把表格放在那里。

    表单处理如何处理来自表单的数据取决于您打印表单的方式。

    如果您使用任何一种方式向现有WordPress表单添加字段,您不能只使用自己的例程,而是必须挂接现有例程并处理数据。

    例如,如果您添加了一个post metabox,那么您的字段将添加到post edit/creation表单中,并且需要挂接save_postany other hook fired when WordPress save a post, 检查来自表单字段的数据并对其进行处理。

    如果您的表单来自前端,或者您在后端创建了一个全新的表单,您可能会尝试创建一个处理表单的文件。

    这不会真正起作用,因为您将使用WordPress环境(记住$wpdb 对象?)因此,您需要手动引导WordPress,不建议重新启动。

    相反,您可以:

    将表单发送到包含表单的同一页面,并将处理代码放在标记的顶部。实际上并不建议这样做,因为混合处理代码和标记代码很难维护admin-ajax.php (完整URL通过admin_url(\'admin-ajax.php\')) 然后使用"admin_ajax_{$action}" / admin_ajax_nopriv_{$action} 来完成你的日常工作。看见Codex about AJAX_in_Pluginsadmin-post.php (完整URL通过admin_url(\'admin-post.php\')) 然后使用"admin_post_{$action}" / admin_post_nopriv_{$action} 使用REST API 要注册自定义路由,然后在数据结构上的REST路由处理程序中处理表单,WordPress有自己的表和特定的数据结构。

    使用dbDelta 函数,您可以创建自定义表$wpdb 对象仍然能够对这些对象进行操作,但应尽可能避免这种情况。

    原因是WordPress中的自定义表维护起来很麻烦(WP缺少迁移或固定装置之类的东西),而且使用自定义表时,如果您将数据放入WordPress核心“实体”,您就无法使用许多WordPress API。

    例如,如果您的数据与帖子相关,则可以使用分类法或帖子元来存储它们。

    如果数据是与用户相关的数据,则可以使用user meta或terms meta来表示与分类术语相关的数据。

    对于“通用”数据,您可以使用选项,或者在特定于主题的混淆情况下使用主题修改。

    如果这样做,当您需要检索/存储数据时,而不是使用wpdb 方法,您可以使用特定的API。

    Taxonomies, post meta, term meta, user meta, options, theme modifications... 提供在更高级别与数据交互的方法,简化对数据的访问,并提供其他好处,如缓存、可过滤性、与core其他部分的兼容性(如customizer和REST API)、与插件的兼容性。。。

SO网友:Ram Shengale

在数据库中存储值的一个简单解决方案是使用WordPress\'add_option() 作用它将值存储在wp_options 数据库中的表。

$firstname = mysqli_real_escape_string( $con, $_POST[ \'tb1\' ] );
add_option( \'first_name\' , $firstname );
echo "1 record added";
然后,您可以随时使用get_option( \'first_name\' ).

如果要运行更多自定义查询,请使用$wpdb->query(). 阅读ẁpdb 有关更多详细信息,请参阅Codex页。

SO网友:Arpita Hunka

要在前端显示文本框并在数据库中存储数据,请执行以下步骤:

在激活的主题文件夹中创建一个php文件,并输入以下代码:enter image description here

现在使用后端的页面菜单在Wordpress中创建一个页面,在添加新页面部分,您将获得页面右侧的“页面属性”部分,现在从模板下拉列表中选择您的模板页面并发布页面。

现在查看页面,您将在页面上找到文本框。

填写值并保存,值将保存到自定义表中的数据库中

SO网友:Daniel Garcia Sanchez

而不是使用本机PHP函数,如mysqli_connect 你应该利用WordPress提供的可能性来做同样的事情。出于兼容性和可维护性的原因,这会更好。即您可以使用wpdb class, 它不仅可以用于WordPress自己的数据库表,还可以用于外部数据库表。要添加新条目,可以使用insert() 类的方法-有关更多信息,请参阅INSERT rows 关于wpdb 法典第页。下面是一些示例代码:

global $wpdb;
$fname  = $_POST[ \'txt_fname\' ];
$lname  = $_POST[ \'txt_lname\' ];
$tbl    = \'wp_exTable\';
$others = $_POST[ \'txt_email\' ];
$wpdb->insert(
    \'wp_exTable\',
    array(
        \'first_name\' => $fname,
        \'last_name\'  => $lname,
        \'email\'      => $others
    ),
    array(
        \'%s\',
        \'%s\',
        \'%s\'
    )
);
最后但并非最不重要的一点是,如果你真的需要一张额外的桌子,你可能应该考虑一下这个事实。例如,您可以像@RamShengale建议的那样使用post-meta。

SO网友:ABHISHEK GUPTA

请尝试使用此代码在wordpress中更新数据库中的记录。为此,首先创建file.php 在选定的wordpress文件夹中,然后将此文件用作模板。这段代码将非常有效,如果有人知道验证名称的正确正则表达式,请建议我。谢谢大家。

<?php /* Template Name: your template name */ ?>
<style>
.error {color: #FF0000;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"
        type="text/javascript"></script>
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css"
        rel="Stylesheet" type="text/css" />
<script type="text/javascript">
    $(document).ready(function() {
            //this calculates values automatically 
            $("#name").keypress(function() {
            validate();
            });
            });
function validate() {

            /*=============== Validate The Name ======================*/
                var fname =document.forms["abc"]["name"].value; 
                var name_regex = /^[a-z A-Z]+$/;
            if(fname == 0||fname==null )
            {
                    document.getElementById(\'nameErr\').innerHTML = "* Please fill your name";
                    return false;
            }
            else
            {
                    if (!fname.match(name_regex)) {
                    document.getElementById(\'nameErr\').innerHTML = "* Name should be alphabet";
                    return false;
                    }
                    else{
                                document.getElementById(\'nameErr\').innerHTML = "";
                    }
            }
}

        <?php get_header(); ?>
        <?php
        if (!empty($_POST)) {
        global $wpdb;
            $table = wp_tablename;
            $data = array(
                \'firstname\' => $_POST[\'yourname\']
            );
            $format = array(
                \'%s\'
            );
            $success=$wpdb->insert( $table, $data, $format );
            if($success){
            echo \'Thanks for submitting your information soon we will contact to you\'; 
        }
        }
        else   {
        ?>
        <div class="container">
            <div class="row">
                <form method="post" class="form-horizontal" id="abc" onsubmit="return validate(this)">
                <div class="col-md-3">Full name: </div><div class="col-md-8"> <input type="text" name="yourname" class="form-control" id="name"><span class="error" id="nameErr"></span></div>

                <div class="col-md-6"><input type="reset" name="reset" class="btn btn-danger"></div><div class="col-md-6"><input type="submit" value="Register" class="btn btn-success"></div>
                </form>
            </div>
        </div>
        <?php }  ?>

<?php get_footer(); ?>

结束