1.7k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von novator Mitglied (121 Punkte)
Hallo zusammen,
bin gerade bei meinen ersten Schritten mitt OOP.
Könnt ihr mir bitte einen Hinweis geben, warum das nicht läuft:
(Warning: mysqli::real_escape_string(): invalid object or resource mysqli in...)


public static function checkGet()
{
if(!empty($_GET)){
$mysqli = new mysqli();
foreach ($_GET as $key => $value)
{$sd[$key] = $mysqli->real_escape_string(htmlspecialchars($value)); }
}
}



Und ist das überhaupt eine schlaue Idee oder eher ein Sicherheitsrisiko oder aus anderen Gründen Mumpitz? :-)

Ich denke, die Idee geht hervor: Ich möchte nicht jeden einzelnen Wert, der mit Post reinkommt, einzeln durch die Funktion schicken, sondern das automatisieren und in einem eigenen Array ablegen.

vielen Dank im Voraus!
lg

6 Antworten

0 Punkte
Beantwortet von novator Mitglied (121 Punkte)
...bzw. in diesem Fall halt Get ;-)
0 Punkte
Beantwortet von
Hallo, warum machst du es nicht mit MySQL PDO?

Gruß
0 Punkte
Beantwortet von novator Mitglied (121 Punkte)
Hallo mysqlpdo,

damit bin ich bisher noch gar nicht in Berührung gekommen.
Welche Vorteile hat denn MySQL PDO?

lg
0 Punkte
Beantwortet von
{$sd[$key] = $mysqli->real_escape_string(htmlspecialchars($value)); }
Ist nicht mehr nötig, gegen SQL-Injection.
Und viele andere Sachen die neu definiert oder teilweise restlos gestrichen wurden.
Wenn du dabei bist PHP und MySQL zu erlernen, dann schaue dir mal das an.
Es ist ja die nächste Stufe, also mysql->msqli->mysql-pdo.
Du kannst ja per info.php (Code unten) schauen, ob bei dir PDO installiert ist.
<?php
phpinfo();
?>
Und nachher im Browser per [Strg] + [F] nach pdo suchen lassen.

(Warning: mysqli::real_escape_string(): invalid object or resource mysqli in...)
Dein eigentliches Problem, wenn du schon eine Fehlermeldung angibst, dann gebe auch die vollständige Fehlerausgabe an.
Beim PHP ist die Fehlerausgabe etwas verwirrend, da nicht immer die angegeben Zeile gemeint ist , sondern oft eine Zeile die auf Grund des Fehlers so und so reagiert.
Gemeint ist, es wird eine { oder ; vergessen und irgendwann später "... in der Zeile 402" angegeben wird und auf der 402 ?> steht.
Aber bei deinem Code sollte es kein Problem sein.
Deinen Code habe ich mir nicht so genau angehen, du willst eine DB-Verbindung herstellen, wenn GET leer ist...
Ich glaube bei einer Anfrage nach einem Fehler im Code sollte schon das verfolgte Ziel etwas beschrieben werden.
0 Punkte
Beantwortet von
wenn GET leer ist... - nicht leer ist, habe "!" übersehen.
0 Punkte
Beantwortet von novator Mitglied (121 Punkte)
Hallo mysqlpdo,

vielen Dank für deine Antwort.

Bei meiner Fehlermeldung fehlt nur der Pfad zur Datei sowie die Zeilenangabe, die uns hier wohl nicht weiter hilft.
Die Klassiker mit fehlenden Zeichen habe ich schon durchschaut ;-) und wie du richtig meinst, bei der Codelänge ist das wirklich kein Problem.

Es wäre aber nett, wenn du dir auch den ganzen Text durchliest, bevor du vorschnell schießt.
Mein Ziel ist 1. beschrieben (siehe letzter Absatz meines ersten Posts) und zweitens NICHT die Herstellung einer Datenbankverbindung bei leerem Post-Array.

Zu deiner Begründung
...nicht mehr nötig gegen SQL-Injection...
: Meinst du wegen der prepared Statements? Die gibts ja auch schon in mysqli. Oder meinst du das anders?
Generell folge ich gerne deinem Rat, mir quasi den nächsten Evolutionsschritt anzueignen.
Nachdem was ich bisher gefunden habe, ist einfach weniger Code bei gleicher oder besserer Funktionalität notwendig. Das wär ja schon was. Da bleibe ich jedenfalls dran.

Ich wäre dennoch dankbar, wenn ich auf meine ursprüngliche Frage noch eine Antwort bekommen könnte :-).
Nochmal zum Nachlasen:

- warum kommt die Fehlermeldung
-
...Und ist das überhaupt eine schlaue Idee oder eher ein Sicherheitsrisiko oder aus anderen Gründen Mumpitz? :-)

- und dann noch mal die Beschreibung meines Ziels:
Ich denke, die Idee geht hervor: Ich möchte nicht jeden einzelnen Wert, der mit Post reinkommt, einzeln durch die Funktion schicken, sondern das automatisieren und in einem eigenen Array ablegen.


Vielen, vielen Dank im Voraus!
lg
...