【问题标题】:Does SQL query() Method Affects Wordpress in Any Way?SQL query() 方法是否会以任何方式影响 Wordpress?
【发布时间】:2019-10-22 19:43:11
【问题描述】:

编辑: 我忘了要求 WP-Load.php 包含 $wpdb() 函数。

我在 wordpress 中创建了一个页面,其中包含一个表单。 现在表单通过这个 javascript 代码将数据发送到 PHP 文件

<script>
$(document).ready(function() {
$("#sbmit").click(function() {
var episode = $("#text1").val().split("\n");
var server1 = $("#text2").val().split("\n");
var server2 = $("#text3").val().split("\n");
var server3 = $("#text4").val().split("\n");
if (server1 != undefined || server2 != undefined || server3 != undefined ) { $.post("/submit.php", {
episode1: JSON.stringify(episode),
server11: JSON.stringify(server1),
server21: JSON.stringify(server2),
server31: JSON.stringify(server3),}, function(data) {alert(data);}
);
}});
});
</script>

Submit.php 文件将数据上传到单独的 MYSQL 数据库,因为我使用 wordpress 我知道 $wpdb 是在数据库中插入数据的推荐方式但是当我使用 $wpdb 控制台日志给出 500 Error 所以我将 wpdb 更改为 new sqli 方法和成功了。

几分钟后,当我尝试更新我的任何帖子时,它说更新失败但无论如何都更新了我的帖子,然后当我打开 PHPmyAdmin 时出现数百个错误,我的全部数据是,当我打开我的 wp-admin 时,它启动了 wordpress从安装页面就像我刚刚安装了 wordpress 并且还说 wordpress 数据库错误

所以我在问“mysqli 方法是否会影响 Wordpress?”

下面是 Submit.PHP 代码,但是当我点击提交时,我得到 500 错误。

<?php
// Create connection
$conn = new wpdb($username, $password, $dbname, $servername);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$Episode2=json_decode($_POST['episode1'], true); // Fetching Values from URL
$Server12=json_decode($_POST['server11'], true);
$Server22=json_decode($_POST['server21'], true);
$Server32=json_decode($_POST['server31'], true);


for ($x = 0; $x < count($Episode2); $x++) {

if ($Episode2[$x] != "") {

$sql = "SELECT Episode FROM DBZ WHERE Episode='".$Episode2[$x]."'";
$result = $conn->get_results($sql);

if (mysqli_num_rows($result) > 0) {

    echo "Episode $Episode2[$x] Server ";
if($Server12[$x] != "") {$sql = "UPDATE DBZ SET Server1 = '".$Server12[$x]."' WHERE Episode = '".$Episode2[$x]."' ";    $result = $conn->get_results($sql); echo "1, ";}

if($Server22[$x] != "") {$sql = "UPDATE DBZ SET Server2 = '".$Server22[$x]."' WHERE Episode = '".$Episode2[$x]."' ";    $result = $conn->get_results($sql);   echo "2, ";}

if($Server32[$x] != "") {$sql = "UPDATE DBZ SET Server3 = '".$Server32[$x]."' WHERE Episode = '".$Episode2[$x]."' ";    $result = $conn->get_results($sql); echo "3 ";}

echo "Updated \n";

} else {

$sql = "INSERT INTO DB VALUES ('".$Episode2[$x]."','".$Server12[$x]."', '".$Server22[$x]."','".$Server32[$x]."')";

$result = $conn->get_results($sql);

echo "Episode $Episode2[$x] is Added in Database \n";

}

} else { echo "Episode Number is Blank";}
}
$conn->close(); // Connection Closed.
?>

【问题讨论】:

  • 这是非常不安全的。研究 SQL 注入,你不应该这样模板。对于500 Error,请检查您服务器的错误日志。
  • 错误的实际原因是缩进不佳。您有三个未封闭的对照组。

标签: php sql wordpress-theming


【解决方案1】:

Mysqli 不会“影响”wordpress。但是,你做错了。

您无需创建新连接即可使用 $wpdb。只需声明全局,直接使用即可。

GLOBAL $wpdb;
$sql = "SELECT Episode FROM DBZ WHERE Episode='".$Episode2[$x]."'";

$results = $wpdb->get_results($sql);

另外,请尝试使用准备语句来防止 sql 注入。

【讨论】:

  • 这不会解决问题,也不会解决其他问题。
猜你喜欢
  • 2013-01-22
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2017-12-08
  • 2016-12-23
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多