2016-07-05 7 views
0

Ich arbeite an einer Wordpress-basierten Anwendung, wo ich den Status der aufgeführten Aufträge mit Ajax ändern müssen. Der folgende Code gibt mir die folgende Fehlermeldung: Fehler beim Laden der Ressource: Der Server antwortete mit einem Status von 500 (Interner Serverfehler)mysqli update query mit ajax in wordpress theme

Ich kann nicht herausfinden, warum das nicht funktioniert. Bitte hilf mir.

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 (am Ende der Datei, in der obigen HTML-Code ist):

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

Durchsuchen Sie das Fehlerprotokoll Ihres Servers und geben Sie den detaillierten Fehler ein – dimlucas

+0

Haben Sie Folgendes gemacht: http://stackoverflow.com/questions/1210380/500-internal-server-error? – PaulH

+1

@dimlucas das Fehlerprotokoll zu überprüfen half mir: 'PHP Schwerwiegender Fehler: Aufruf zu undefinierter Funktion wp_get_current_user()' Ich habe meinen Code geändert, so dass die Benutzeranmeldung von der wp-Seite an das Handler-Skript übergeben wird. – ucsendre

Antwort

0

Problem gelöst dank dem Kommentar von @dimlucas

Die Funktion wp_get_current_user() wurde in meinem PHP-Code nicht definiert. Ich habe einen Workaround gemacht, um zu vermeiden, diese Funktion dort zu verwenden.

Der Arbeitscode ist unten.

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; 

Thank you!