Mehrere Parameter an Ajax übergeben
bearbeitet von
Moin!
> Doch bisher geschieht nix beim Aufruf dieser Funktion:
> $.ajax({
> type: "POST",
> url: "SaveView.php",
> data: {ID:ID, db:DBName, table:Table, View:0},
> success: function() {}
>
> und in die empfangende Datei schreibe ich:
> $ID = utf8_decode ($_REQUEST['ID']);
> $table = utf8_decode ($_REQUEST['table']);
> $db = utf8_decode ($_REQUEST['db']);
> $View = utf8_decode ($_REQUEST['View']);
>
> $verbindung=mysql_connect(ini_get("mysqli.default_host"), "root", "") or
> die("Error: <br>".mysql_error());
> mysql_select_db($db, $verbindung)
> // Anfrage an DB-Server
> $Ergebnis = mysql_query("INSERT INTO `$table` WHERE ID = $ID SET Sub = $View ") OR die("Error: <br>".mysql_error());
Man gut, dass es noch nicht funktioniert - du baust dir da gerade eine riesige SQL-Injection-Sicherheitslücke ein.
Deine Intention ist, dass du per AJAX an fast jede beliebige Stelle deiner Datenbank schreiben kannst. Sowas ist konzeptuell sehr schwer abzusichern (nicht unmöglich, aber auf dem Abstraktionsgrad "ich schreibe in die DB" dieses Interfaces deutlich schwerer, als mit abstrakteren Methoden).
Selbst wenn also das Injection-Sicherheitsproblem behoben wäre (auch nicht ganz simpel, denn du übergibst einen Tabellennamen, und bei denen hilft mysql_real_escape_string() nichts), hättest du immer noch das Problem, dass ein Angreifer durch Analyse der existierenden Requests feststellt, dass du einen Datenbank- und Tabellennamen übergibst. Den kann man auch verändern, und damit Schreibzugriffe auf andere Datenbanken und andere Tabellen machen.
Abgesehen davon: Die MYSQL-Extension in PHP ist TOT! In PHP 7 ist sie nicht mehr enthalten, in PHP 5 ist sie seit zehn Jahren als "deprecated" (mißbilligt - steht auf der Abschussliste) markiert.
Benutze bitte MYSQLi - das i am Ende ist der wichtige Unterschied. Ansonsten wirst du sehr bald deinen gesamten DB-Code umschreiben dürfen, weil du keinen Hoster mehr findest, der noch MySQL unterstützt. In den meisten Fällen ist das "nur" ein schlichtes Suchen nach "mysql_" und Ersetzen mit "mysqli_", aber bei einigen Funktionen haben sich die Parameter etwas geändert.
Besser, du änderst das jetzt, wenn noch wenig Code existiert, als später.
Grüße
Sven