Error 500 from sql query

@Taifun

Hallo Taifun,

ich versuche deine Anleitung unter App Inventor Tutorials and Examples: MySQL | Pura Vida Apps umzusetzen.

Ich erhalte dabei stets den Fehler "error 500".

Im Beitrag Seit Heute Fehler 500 bei SQL-Abfrage (error 500 from SQL query since today) war die Lösung das Zurücksetzen auf die PHP-Version 7.4.

Ich benutze die PHP Version 8.1.

Liegt es daran, dass ich den Fehler 500 erhalte?

Was muss ich ändern, damit deine Anleitung auch unter PHP 8.1 funktioniert?

Gruss Frank

Welchen Provider verwendest du denn? Strato eventuell?

Taifun

Nein, Alfahosting.

Die Verbindung aus dem Post MySQL. PHP. Table in WebViewer with JavaScript funktioniert unter PHP 8 und MySQL 5.7 und 8.0 bei Alfahosting.

Somit gehe ich davon aus, dass es nicht am Provider liegt.

was passiert, wenn du dein Script mit einem Browser aufrufst?
hast du das Script dementsprechend abgeändert wie hier erwähnt

Taifun

Hallo Taifun,

ich habe beide Varianten, also MySQL 5.7 und 8.0 mit den beschriebenen Änderungen getestet.

Im Browser erscheint bei beiden Varianten die Meldung Bad Request.

Bad request sollte angezeigt werden wenn du es mit dem Browser aufrufst...
Magst du eventuell dein komplettes Script hier posten?

Taifun

Habe dir die Dateien per PM gesendet.

Siehe hier

Wie bereits vorher erwähnt solltest du dieselben Einstellungen verwenden, die wie du hier geschrieben hast MySQL. PHP. Table in WebViewer with JavaScript - #8 by Frank-HRO funktionieren

$servername = "127.0.0.1:3307";
$username = "testuser-ai2";
$password = "testuser-ai2";
$database = "test-ai2";

Ausserdem soltest du das if statement mit den magic quotes im php Script ersatzlos streichen

if(get_magic_quotes_gpc()){
$query=stripslashes($query);
}

Taifun

Hallo Taifun,

der Test mit der PHP Version 8 und mit 2 Datenbanken (eine MySQL 5.7 und eine MySQL 8.0) verliefen nach Streichung der magic quotes im php-Script erfolgreich.

Ein Problem bleibt noch. Die Schaltfläche "Insert 1" kann nur einmal benutzt werden, da beim zweiten Benutzen versucht wird die id nochmals mit 1 zu beschreiben, was bei autoincrement ja nicht funktioniert - es erscheint error 500. Soweit so klar.

Aber der Befehl
INSERT INTO employer (name, address, phone, lat, lng) VALUES ('case1', 'inside', '1234', -37.773250, 175.230230)
sollte meiner Meinung nach funktionieren (ohne id), bringt aber ebenfalls den error 500.
Was mache ich da falsch? Oder können beliebige SQL Befehle nicht mittels php Script gesendet werden?

Gruß Frank

Ok, du hast nun das korrekte Script, sehr gut

Nein, denn normalerweise würde dir die Datenbank einen Fehlertext zurückgeben

Hast du die Fehlerprotokollierung aktiviert, wie hier beschrieben?

Was kannst du deinem Server Fehler Log entnehmen? Wenn du nicht weißt, wo du diesen findest, frag mal bei deinem Anbieter nach. .

Taifun

Anfrage beim Provider ist raus. Mal schauen wie schnell ich eine Antwort bekomme.

Nur zu meinem Verständnis:
Das Benutzen der Schaltfläche "Insert 1" kann nur einmal fehlerfrei verwendet werden´, richtig?
Beim 2. Betätigen würde ja versucht werden die id auf nochmals 1 zu setzen, was bei autoincrement ja nicht geht, also Fehler der Datenbank.

Kannst du das Scipt so ändern, dass man den befehl INSERT INTO ohne den Wert id sendet, der ja automatisch vergeben wird (autoincrement)

Nachtrag Fehlermeldung:

[Wed Apr 24 16:36:18.186875 2024] [proxy_fcgi:error] [pid 4098362:tid 140013912057600] [client 94.zzz.bbb.yyy:15636] AH01071: 
Got error 'PHP message: Array\n(\n    [key] => secret\n    [query] => 
INSERT+INTO+employer+VALUES+%285%2C+%27case1%27%2C+%27inside%27%2C+%274321%27%2C+-37.7234360%2C+175.215846%29\n)\n
PHP message: PHP Fatal error:  Uncaught mysqli_sql_exception: Duplicate entry '5' for key 'employer.PRIMARY' 
in /var/www/vhosts/zzzz.web144.alfahosting-server.de/yyyy.de/mysql-php/mysql.php:61\nStack 
trace:\n#0 /var/www/vhosts/zzzz.web144.alfahosting-server.de/yyyy.de/mysql-php/mysql.php(61): 
mysqli->query('INSERT INTO emp...')\n#1 {main}\n  thrown in /var/www/vhosts/zzzz.web144.alfahosting-server.de/yyyy.de/mysql-php/mysql.php on line 61'

Gruß Frank

Ja

die Beispiel Tabelle arbeitet ohne autoincrement

das hat nichts mit dem Script zu tun, einfach das CREATE TABLE statement und deine SELECT statements entsprechend anpassen

Ich habe das Script abgeändert sodass nun auch unter php8 Fehler korrekt zur App zurückgegeben werden sollten, siehe deine PM und hier App Inventor Tutorials and Examples: MySQL | Pura Vida Apps

Taifun

Hallo Taifun,

danke für die Änderung des Scriptes.

Es funktioniert mit korrekten Fehlermeldungen.

Eine Frage bleibt noch offen:

Bei mir habe ich die Spalte id mit autoincrement erstellt.

Ich habe es mit folgenden Befehlen probiert, ohne Erfolg:
INSERT INTO employer (name, address, phone, lat, lng) VALUES ('case5', 'inside', '4321', -37.7234360, 175.215846)
INSERT INTO employer VALUES ('', 'case5', 'inside', '4321', -37.7234360, 175.215846)
INSERT INTO employer VALUES (NULL, 'case5', 'inside', '4321', -37.7234360, 175.215846)

Wie muss der SQL-Befehl lauten, damit das PHP-Script ohne die Angabe der id funktioniert?

Gruß Frank

siehe auch

  1. alte Tabelle löschen wie folgt

DROP TABLE employer

  1. neue Tabelle erzeugen wie folgt

CREATE TABLE IF NOT EXISTS employer (id INTEGER AUTO_INCREMENT PRIMARY KEY, name TEXT, address TEXT, phone TEXT, lat FLOAT, lng FLOAT);

  1. Datensatz einfügen (oder auch mehrere) wie folgt

INSERT INTO employer (name, address, phone, lat, lng) VALUES ('case5', 'inside', '4321', -37.7234360, 175.215846)

  1. Ergebnis anzeigen wie folgt

SELECT * FROM employer

siehe auch

oder

Taifun

Hallo Taifun,

so klappt es wunderbar. Dankeschön.

Warum es bei mir nicht lief, keine Ahnung.
Nach dem Löschen der Tabelle und neuem Anlegen läuft es jetzt.

Gruß Frank

Ich schließe hiermit diesen Thread. Bei neuen Fragen einen neuen Thread erstellen. Danke.