我是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中做这些事情吗?稍加调整
最合适的回答,由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
-类似语法。
表单页面和表单处理例程上述所有内容都是处理表单数据所必需的。
但是,您还需要:
放置表单的“页面”放置表单处理例程的“位置”在WordPress中,我们可以区分两类表单:属于前端的表单和属于后端的表单。
对于frontent表单,您可能会将所有HTML放在其中一个模板中,就是这样。
对于后端表单,有许多可能性。
如果要存储发布到帖子的值,可能需要add a metabox 然后在那里放置一个表单。实际上,在这种情况下,您不使用“完整”表单,而只使用成为整个后期编辑表单一部分的表单输入。
可以采用相同的方法,使用特定的“挂钩”,添加字段以编辑/创建分类法、用户等的表单。这个网站和整个网站都有关于这方面的例子和指导。
如果您要存储的数据与任何WordPress核心“实体”完全无关(例如,您将为自定义插件构建一个选项页),您可能希望register an admin page 然后把表格放在那里。
表单处理如何处理来自表单的数据取决于您打印表单的方式。
如果您使用任何一种方式向现有WordPress表单添加字段,您不能只使用自己的例程,而是必须挂接现有例程并处理数据。
例如,如果您添加了一个post metabox,那么您的字段将添加到post edit/creation表单中,并且需要挂接save_post
或any 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_Plugins将表格发送至admin-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网友: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(); ?>