我正在开发基于wordpress的应用程序,我需要使用ajax更改列出的订单的状态。 以下代码给出了以下错误: 无法加载资源:服务器响应状态为500(内部服务器错误)
我无法弄清楚为什么这不起作用。请帮帮我。
HTML:
<select id="status-<?php echo $order_id[$xx]; ?>" name="status-<?php echo $order_id[$xx]; ?>" onChange="return statuschange(this, '<?php echo $order_id[$xx]; ?>');">
<option value="0"<?php if ($status_code[$xx] == 0){ echo' selected="selected"'; }; ?>>incoming</option>
<option value="1"<?php if ($status_code[$xx] == 1){ echo' selected="selected"'; }; ?>>processing</option>
<option value="2"<?php if ($status_code[$xx] == 2){ echo' selected="selected"'; }; ?>>processed</option>
<option value="3"<?php if ($status_code[$xx] == 3){ echo' selected="selected"'; }; ?>>packing</option>
<option value="4"<?php if ($status_code[$xx] == 4){ echo' selected="selected"'; }; ?>>ready</option>
<option value="5"<?php if ($status_code[$xx] == 5){ echo' selected="selected"'; }; ?>>posted</option>
<option value="6"<?php if ($status_code[$xx] == 6){ echo' selected="selected"'; }; ?>>received</option>
<option value="7"<?php if ($status_code[$xx] == 7){ echo' selected="selected"'; }; ?>>returned</option>
<option value="8"<?php if ($status_code[$xx] == 8){ echo' selected="selected"'; }; ?>>deleted</option>
</select>
JS(在上面的HTML代码所在文件的末尾):
function statuschange(element, orderid){
var oldValue = element.defaultValue;
var newValue = element.value;
var admincomment = prompt("Change order status?\n\nAdd comment:", "");
if (admincomment != null) {
var newValueecn = encodeURI(newValue);
var admincommentenc = encodeURI(admincomment);
var orderidenc = encodeURI(orderid);
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { element.defaultValue = newValue; location.reload(true); console.log(xmlhttp.responseText); } }
xmlhttp.open("GET", "http://www.mydomain.tld/wp-content/themes/mycustomtheme/changestatus.php?newstatusz=" + newValueecn + "&comment=" + admincommentenc + "&orderid=" + orderidenc, true);
xmlhttp.send(); }
} else {
element.value = element.defaultValue; } };
PHP(changestatus.php):
function cleaninput($input){
$input = trim($input);
$input = stripslashes($input);
$input = htmlspecialchars($input);
return $input;
}
if(isset($_GET['newstatusz'])){
$newstatusz = cleaninput($_GET['newstatusz']);
} else { exit; }
if(isset($_GET['comment'])){
$comment = cleaninput($_GET['comment']);
} else { exit; }
if(isset($_GET['orderid'])){
$orderid = cleaninput($_GET['orderid']);
} else { exit; }
$current_user = wp_get_current_user();
$userloggedin = $current_user->user_login;
$mysqli1 = new mysqli("localhost", "myuser", "mypass", "mydatabase");
if ($mysqli1->connect_error){ die("DB connect error: " . $mysqli1->connect_error); };
$mysqli1->set_charset("utf8");
$newstatusz = $mysqli1->real_escape_string($newstatusz);
$userloggedin = $mysqli1->real_escape_string($userloggedin);
$comment = $mysqli1->real_escape_string($comment);
$mysqli1->query("UPDATE poszter_admin SET statusz_kod = '$newstatusz', user = '$userloggedin', comment = '$comment' WHERE order_id = '$orderid'");
$mysqli1->close();
exit;
答案 0 :(得分:0)
由于@dimlucas的评论
,问题解决了我的PHP代码中没有定义wp_get_current_user()函数。 我已经做了一个解决方法,以避免在那里使用这个功能。
工作代码如下。
JS:
function statuschange(element, orderid){
var oldValue = element.defaultValue;
var newValue = element.value;
var userlogin = document.getElementById('userloggedin').innerHTML;
var admincomment = prompt("Change order status?\n\nAdd comment:", "");
if (admincomment != null) {
var newValueecn = encodeURI(newValue);
var admincommentenc = encodeURI(admincomment);
var orderidenc = encodeURI(orderid);
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { element.defaultValue = newValue; location.reload(true); console.log(xmlhttp.responseText); } }
xmlhttp.open("GET", "http://www.mydomain.tld/wp-content/themes/mycustomtheme/changestatus.php?newstatusz=" + newValueecn + "&comment=" + admincommentenc + "&orderid=" + orderidenc + "&userloggedin=" + userlogin, true);
xmlhttp.send(); }
} else {
element.value = element.defaultValue; } };
PHP(changestatus.php):
function cleaninput($input){
$input = trim($input);
$input = stripslashes($input);
$input = htmlspecialchars($input);
return $input;
}
if(isset($_GET['newstatusz'])){
$newstatusz = cleaninput($_GET['newstatusz']);
} else { exit; }
if(isset($_GET['comment'])){
$comment = cleaninput($_GET['comment']);
} else { exit; }
if(isset($_GET['orderid'])){
$orderid = cleaninput($_GET['orderid']);
} else { exit; }
if(isset($_GET['userloggedin'])){
$userloggedin = cleaninput($_GET['userloggedin']);
} else { exit; }
$mysqli1 = new mysqli("localhost", "myuser", "mypass", "mydatabase");
if ($mysqli1->connect_error){ die("DB connect error: " . $mysqli1->connect_error); };
$mysqli1->set_charset("utf8");
$newstatusz = $mysqli1->real_escape_string($newstatusz);
$userloggedin = $mysqli1->real_escape_string($userloggedin);
$comment = $mysqli1->real_escape_string($comment);
$orderid = $mysqli1->real_escape_string($orderid);
$mysqli1->query("UPDATE poszter_admin SET statusz_kod = '$newstatusz', user = '$userloggedin', comment = '$comment' WHERE order_id = '$orderid'");
$mysqli1->close();
exit;
谢谢!