Frank: 404er erzeugen wenn MySQL-Abfrage = 0

Hallo,
ich würde gern wissen, wie ich vorsätzlich Fehlerausgaben erzeugen kann.

Ich habe eine klassische detail.php?mit=QUERY_STRING.

Der QUERY_STRING bestimmt die Datenbankabfrage.

Nun kann man leider jeden Plünnen im Query eintragen,
die detail.php gibt auf jeden Fall Header und Kopfzeile aus,
auch wenn die Datenbankabfrage kein Ergebnis liefert.
( die Ausgabe findet leioder VOR der MySQL-Abfrage statt )

Kann ich unter diesen Bedingungen noch eine Fehlerseite ausgeben (ich fürchte nein),
oder muss ich die scripte komplett dahin ändern,
dass jedwede Ausgabe erst nach erfolgreicher Datenbankabfrage geschieht ? (ich fürchte ja, *würg*)

Vielleicht gibt's ja 'nen Trick ...

Besten Dank, Frank

  1. Mahlzeit,

    ich würde gern wissen, wie ich vorsätzlich Fehlerausgaben erzeugen kann.

    header();

    Nun kann man leider jeden Plünnen im Query eintragen,
    die detail.php gibt auf jeden Fall Header und Kopfzeile aus,
    auch wenn die Datenbankabfrage kein Ergebnis liefert.
    ( die Ausgabe findet leioder VOR der MySQL-Abfrage statt )

    Wargs! Wie wär's mit EVA?

    Kann ich unter diesen Bedingungen noch eine Fehlerseite ausgeben (ich fürchte nein),

    Nein, umleiten kannst du den Browser nur, wenn noch keine Ausgabe erfolgt ist.

    oder muss ich die scripte komplett dahin ändern,
    dass jedwede Ausgabe erst nach erfolgreicher Datenbankabfrage geschieht ? (ich fürchte ja, *würg*)

    Ja. Ist generell sinnvoll. Einerseits für sinnvolle Strukturierung der Skripte (EVA-Prinzip, Trennung von Verarbeitung und Ausgabe usw. - sorgt auch für mehr Übersichtlichkeit) und andererseits auch, um - wie in diesem Fall - auf Fehler angemessen reagieren zu können.

    Vielleicht gibt's ja 'nen Trick ...

    AFAIK nein. Aber du machst sicher nix falsch, wenn du deine Skripte überarbeitest. Du selbst wirst es dir in Wochen, Monaten oder Jahren danken, wenn du sie dann nach langer Abstinenz mal wieder in die Hand nimmst - und sofort verstehst, was sie tun. :-)

    MfG,
    EKKi

    1. Hi EKKi

      Danke *schnief*, Frank

    2. Hello,

      Vielleicht gibt's ja 'nen Trick ...

      AFAIK nein. Aber du machst sicher nix falsch, wenn du deine Skripte überarbeitest. Du selbst wirst es dir in Wochen, Monaten oder Jahren danken, wenn du sie dann nach langer Abstinenz mal wieder in die Hand nimmst - und sofort verstehst, was sie tun. :-)

      Soweit ich weiß, schon.
      Voraussetzung ist, dass der nicht schon benutzt wird.

      Autoprepend-File mit Ob_start()und Autoappend-File mit ob_end_flush() benutzen
      Dann kannst Du innerhalb des bisherigen Scriptes Deine Header noch solange manipulieren, wie es Dir Spaß macht.

      Die Auto-*-Files kannst Du mit .htaccess festlegen, sodass sie nur für bestimmte Scripte benutzt werden.

      Wenn Du Kontrolle über das Script hast, kannst Du die Output-Bufferung natürlich auch im Script selber festlegen.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. Hello,

    Der QUERY_STRING bestimmt die Datenbankabfrage.

    ich kann nur hoffen, dass du weißt was du tust...

    ( die Ausgabe findet leioder VOR der MySQL-Abfrage statt )

    damit scheidet ein Serverseitiger redirect leider aus...

    dass jedwede Ausgabe erst nach erfolgreicher Datenbankabfrage geschieht ? (ich fürchte ja, *würg*)

    muss es denn ein 404 sein? Reicht nicht einfach eine Ausgabe, dass keine Daten gefunden wurden?

    MfG
    Rouven

    --
    -------------------
    Death is nature's way of telling you to slow down.
    1. Hi Rouven

      muss es denn ein 404 sein? Reicht nicht einfach eine Ausgabe, dass keine Daten gefunden wurden?

      Nee, reicht leider nicht (das passiert auch schon).
      Menschen kommen damit klar, aber gierige Robots leider nicht.

      Ich muss google ja irgendwie beibringen,
      dass der eine oder andere Artikel nicht mehr da ist.

      Ausserdem legt er den URL auch gern codiert ab,
      und aus jedem & wird dann ein & etc.

      Da gibt's die selbe Seite dann schnell mal doppelt und dreifach ...

      Danke, Frank

      1. Hello,

        Nee, reicht leider nicht (das passiert auch schon).
        Menschen kommen damit klar, aber gierige Robots leider nicht.

        verstehe ich das richtig, dass du eine Seite hast, bei der ich einen Querystring einfach so spezifizieren kann? Ich kann nur hoffen, dass ich dich missverstanden habe, sonst - na ja - stell dir vor da wäre ein Jäger und vor ihm würden alle Hirsche herumspringen mit einem Schild um den Hals "Erschieß mich" - dein Server ist einer dieser Hirsche.

        MfG
        Rouven

        --
        -------------------
        He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
        1. Hi

          verstehe ich das richtig, dass du eine Seite hast, bei der ich einen Querystring einfach so spezifizieren kann? Ich kann nur hoffen, dass ich dich missverstanden habe, sonst - na ja - stell dir vor da wäre ein Jäger und vor ihm würden alle Hirsche herumspringen mit einem Schild um den Hals "Erschieß mich" - dein Server ist einer dieser Hirsche.

          Da hätte ich keine Idee, wie ich das vermeiden könnte.

          Natürlich kannst Du erstmal alles Mögliche im Query an den Server senden.
          Und der wird dann auch erstmal mit Abarbeiten anfangen.

          Auch logisch, dass Du ihn mit 'ner Flut lahmlegen kannst.

          Aber wie willst Du das vermeiden oder das Risiko reduzieren ?
          Das kannste imho nur, indem Du ein schnelles exit erzeugst und möglichst wenig Traffic rausgibst.

          Grüsse, Frank

          1. Hello,

            Aber wie willst Du das vermeiden oder das Risiko reduzieren ?
            Das kannste imho nur, indem Du ein schnelles exit erzeugst und möglichst wenig Traffic rausgibst.

            ich hoffe immer noch, dass wir uns missverstehen...
            Es geht hier nicht um Performance oder Traffic. Es geht darum, dass der Benutzer dein Query zwar parametrisieren, aber nicht ändern darf. D.h. er darf an dich senden "prozessor", wenn er Artikel zum Thema Prozessor sucht, er darf aber nicht an dich schicken "SELECT * FROM artikel WHERE keywords LIKE '%prozessor%'".

            MfG
            Rouven

            --
            -------------------
            Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
            1. Hi Rouven

              ich hoffe immer noch, dass wir uns missverstehen...
              Es geht hier nicht um Performance oder Traffic. Es geht darum, dass der Benutzer dein Query zwar parametrisieren, aber nicht ändern darf. D.h. er darf an dich senden "prozessor", wenn er Artikel zum Thema Prozessor sucht, er darf aber nicht an dich schicken "SELECT * FROM artikel WHERE keywords LIKE '%prozessor%'".

              Das wäre ja übel, aber das geht nicht.

              Es geht um prozessor, was Du natürlich aber auch als prozesor oder brozessor senden kannst.
              Kriegst dann halt keine vernünftige Ausgabe, aber kannste erstmal senden.

              Und wenn Du sagen wir 10.000 Seiten hast, aber google hat 30.000 indexiert,
              weil er die selbe Seite mit Bsp.: &key=prozessor und &key=prozessor
              (und in Folge &key=prozessor) aufgenommen hat,
              dann kommt beim Googlebot-Aktualisieren schon eine Menge sinnloser Traffic zustande.

              (wobei ich dieses Prob mit 'nem Redirect gelöst habe)
              (oder hab ich da ein charset-Header-Problem, dass er sowas überhaupt macht)

              Es geht mehr drum, ihm beizubringen, dass es hier ab jetzt keine prozessoren mehr gibt.

              Grüsse, Frank

          2. Hi,

            stell dir einfach vor er schickt folgende Query:

            DROP DATABASE (SELECT DATABASE());

            ... syntaxmässig sicherlich verbesserungswürdig, aber vielleicht funktioniert das ja trotzdem ;)

            Was dann?

            Gruss, Frank