ich habe ein PHP-Script, welches ich per AJAX aufrufe um Daten zu Speichern.
Habe ich irgendeine Möglichkeit im Script darauf zu prüfen, ob selbiges durch einen AJAX-Request aufgerufen wurde oder die Adresse des Skripts einfach in die Adresszeile eingegeben wurde, bzw kann ich letzteres irgendwie verbieten?
Man soll einfach keinen Schabernack mit dem Skript treiben dürfen.
Die Daten, die gespeichert werden, bestehen aus XML. Oder kann ich den String in PHP darauf prüfen, dass er nur gültiges XML enthält?
Wie soll denn das gehen mit den Sessionabfragen?
Wenn ich auf der Hauptseite (die den AJAX-Request macht) ne Session eröffne und dann das Script direkt aufrufe is die Session doch immernoch gültig und hat die gleichen Werte, als wenn das nen AJAX-Request macht.
Dann hat er halt genau die gleichen Daten, die sein Browser sonst „hintenrum“ angefordert hätte, jetzt direkt vorliegen - und das vermutlich noch in einem nicht besonders verständlichen Format.
Und wo ist jetzt das Problem? Ich sehe keins.
Falls du dich entschieden haben solltest, per AJAX Daten zum Client zu transportieren, die aber vor dem Nutzer geheim bleiben sollen - dann liegt dein Fehler schon an dieser Stelle im Konzept.
Ja dann lies meinen ersten Beitrag vielleicht nochmal genau.
Das Script liefert keine Daten, sondern es speichert welche. Und es soll nur die Daten speichern, die die Seite liefert und nicht welche die irgendwer per Direktaufruf dem Script übermittelt.
Egal, woher extern Daten kommen - du hast ihnen immer zu misstrauen, und sie immer erst nach gründlicher Prüfung anzunehmen. Ob dabei AJAX im Spiel ist, oder auch überhaupt nur so etwas wie ein „Browser“, ist vollkommen unerheblich.
Jo das is ja auch das was ich wissen wollte. Das hab ich mir auch so gedacht aber hätt ja sein können, dass es da vielleicht doch ne Möglichkeit gibt das zu checken.
Dann muss ich sehen wie ich das validiert bekomme.
Jo bin mitlerweile auch davon ab, das auf die Weise zu lösen.
Jetzt muss ich aber im Script darauf testen, dass der übergebene String ein valides xml ist.
Hab bis jetzt mit ner RegExp auf erlaubte Zeichen geprüft. Aber das sagt mir ja noch lang nicht, ob es ein valides XML ist. Da hab ich noch keine vernünftige Lösung für gefunden. Muss ich wohl leider ne komplexere Prüfung draus machen.
Danke für den Tip, den hab ich aber schon in nem anderen Forum gelesen und das Problem bei dem is, dass dann nicht nur die Funktion false zurückgibt, sondern auch ein PHP-Error (oder Warning oder was auch immer) rausgeschmissen wird.
Mal abgesehen davon, dass die Funktion nicht dafür gedacht is.
PHP bietet nun mal nicht an allen Stellen die Möglichkeit, Fehler „still“ zu bearbeiten - manche Funktionen geben auch dann Rückmeldung, wenn alle denkbaren Fehler im Script abgefangen werden.
Und da ist es dann auch legitim, im Einzelfalle mal eine eventuelle Meldung mittels @ zu unterbinden.
(Wobei man im Produktivbetrieb Fehler idR. sowieso nicht an den Client ausgeben, sondern serverseitig loggen lässt. Das bietet einem über die Zeit immer noch die Möglichkeit, sich die Stellen, an denen evtl. öfter datenbezogene Fehler auftreten, anzuschauen und zu überlegen, ob es vielleicht ausgereifterer Maßnahmen bedarf, um eine spezielle Fehlerursache zu unterbinden.)
Da hast du meinetwegen recht. Aber wie chrisb schon gesagt hat, liefert man die Fehlermeldungen nicht an den Client aus, sondern Logt sie.
Zudem ist eine E_Warning-Meldung auch keine Fehlermeldung, sondern eine Warnung. Die du aus meiner Sicht nun mal nicht einfach so unterdrücken kannst, da in deinem Falle der Sinn des Parsen des XML-Strings nun mal auch der ist, zu überprüfen, ob er einen Fehler enthält. Von mir aus darfst du dir gerne etwas aufwändiges coden, dass dir das selbe ergebnis liefert, wie wenn du da einfach n @ vorne hin machst.
Aber auf meine Hilfe musst du in dem Falle verzichen