ZeuZ: Formular mit <input type='image'> - wie am einfachsten und sichersten?

Hallo Leute,
ich will mein PHP-Newssystem grafisch ein bisschen aufbessern und statt den Standardbuttons <input type='image' src='./blubb'> benutzen!

Wie kann ich das Formular am einfachsten und sichchersten funktionsfähig machen?

mit dem üblichen PHP-Code (vereinfacht):
---------------------------------------------------------------

if($isset($show_preview))
{
// preview hier dann
}
else if($isset($add_news))
{
mysql_query(blabla) // news halt adden
}

echo "<form action='$PHP_SELF?include=self' method='post'>
<input type='text' name='titel' value='$titel'>
<textarea name='inhalt'>$inhalt</textarea>
<input type='image' name='add_news' src='submit.gif'>
<input type='image' name='show_preview' src='preview.gif'>
</form>";

---------------------------------------------------------------

... funktioniert es nicht, und ich bin nicht sooo erfahren mit diesen Dingen, weil ich ganz einfache Sachen bis jetzt nur gemacht habe!

Hoffe auf nützliche Informationen! Danke

MfG ZeuZ aKa Stefan

  1. Hello,

    bau Dir ein Empfangsformular zum Debuggen.
    Das sollte dann alle übertragenen Paramter anzeigen.

    Die einfachste Variante dafür wäre

    <?php   ### info.php ###

    phpinfo();

    ?>

    Da wird dann sicher auch vieles angezeigt, was für Dein momentanes Problem irrelevant ist, aber alle GET, POST, COOKIE-Parameter usw. sind ablesbar.

    Du kannst dann sehen, wie <input type="image" ...> im Script ankommt von den unterschiedlichen Browsern

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. sorry, aber ich weiß net was mir das bringen soll!

      ich will einfach wissen, wie man es macht, in diesem Formular am einfachsten ein Preview oder einen Eintrag zu erreichen! Allerdings soll dabei das Script nicht angreifbar sein, mein Freund hat nämlich irgendetwas davon gesagt, dass das leicht angreifbar wäre!

      1. Hi ZeuZ,

        sorry, aber ich weiß net was mir das bringen soll!

        Warum probierst du es nicht einfach aus? In einem Abschnitt der PHP Info Datei siehst du dann, was das Script für $_POST, $_GET Daten usw. bekommen hat - dann kannst du Debugging betreiben.

        ich will einfach wissen, wie man es macht, in diesem Formular am einfachsten ein Preview oder einen Eintrag zu erreichen! Allerdings soll dabei das Script nicht angreifbar sein, mein Freund hat nämlich irgendetwas davon gesagt, dass das leicht angreifbar wäre!

        Ob und wie das Script angreifbar ist, kommt ganz alleine darauf an, wie du es programmiert hast und was du für Schutz-Mechanismen eingebaut hast.

        Ein Fehler, den mir direkt aufgefallen ist ist dieser hier:

        if($isset($show_preview))

        Wenn du irgendwo davor NICHT so einen Code stehen hast: $show_preview = $_POST['show_preview'], dann ist dein Script an dieser Stelle angreifbar - zumindest dann, wenn auf deinem Server register_gobals auf on steht, und das ist bei vielen Massenhostern leider immer noch der Fall (aus Kompatibilitätsgründen).

        Deshalb solltest du auf solche Formularvariablen immer per $_GET['show_preview'] oder $_POST['show_preview'] zugreifen, je nachdem, ob dein Formular method get oder method post verwendet.

        Denn bei dem Fall oben (jetzt davon ausgegangen, dass register_globals auf on steht), brauche ich an die URL nur ein ?show_preview=1 dranhängen, und schon existiert die Variablen, ein isset($show_preview) liefert also true zurück.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Man sollte nie aufhören zu fragen (Alber Einstein)
        ... aber natürlich erst, nachdem man sämliche FAQ's und Archive durchgelesen hat :-P
        1. hm.. joah, das hat mir auf jeden Fall auch schonmal geholfen!
          Allerdings mit dem Hauptproblem ist mir immernoch nicht geholfen, und zwar, wie ich am besten mit dem Formular übergeben kann, welches if(isset($) ausgeführt werden soll!
          Könnt ihr mir da noch helfen?

          MfG

          1. Hi ZeuZ,

            Könnt ihr mir da noch helfen?

            Hast du mittlerweile die entsprechenden Abschnitte auf if(isset($_POST['show_preview'])) und elseif(isset($_POST['add_news'])) geändert?

            Wenn ja und es klappt immer noch nicht: Was gibt ein print_r($_POST) aus?

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Auf viele Fragen weiß auch Wikipedia eine Antwort.
            1. Hallo Dennis

              Hast du mittlerweile die entsprechenden Abschnitte auf if(isset($_POST['show_preview'])) und elseif(isset($_POST['add_news'])) geändert?

              Ja habe ich, hat aber nicht geklappt

              Wenn ja und es klappt immer noch nicht: Was gibt ein print_r($_POST) aus?

              Array ( [titel] => Titel *blubb* [inhalt] => hullo, das ist der Inhalt :D:D:D [add_x] => 2 [add_y] => 1 )
              Das gibt das aus... was sind das für Zahlen?

              MfG, Dennis.

              MfG ZeuZ aKa Stefan

              1. Ich glaube, ich weiß jetzt was das ist...
                Das sind die Koordinaten der Buttons, die ich treffe. Es weil diese Buttons keinen "value" haben, wird nicht der Name als Variable benutzt, sondern die x bzw y Koordinate. Dementsprechend muss ich dann auch danach fragen, sprich:

                if(isset($_POST['add_x']) AND isset($_POST['add_y']))

                ???
                danke für deine Hilfe, dennis, auf jeden Fall schonmal ;)

                MfG ZeuZ aKa Stefan

                1. Hi ZeuZ,

                  Ich glaube, ich weiß jetzt was das ist...
                  Das sind die Koordinaten der Buttons, die ich treffe.

                  Richtig :-)

                  Es weil diese Buttons keinen "value" haben, wird nicht der Name als Variable benutzt, sondern die x bzw y Koordinate.

                  So scheint es zu sein - ich hatte es allerdings etwas anders in Erinnerung, ich dachte, es würde ein Array mit dem Namen des Buttons übergeben, in dem die Variablen "x" und "y" sind - dann hätte nämlich die erste Methode funktionieren müssen ;-)

                  Dementsprechend muss ich dann auch danach fragen, sprich:

                  if(isset($_POST['add_x']) AND isset($_POST['add_y']))

                  Richtig. Heißt dein Button eigentlich mittlerweilse nur noch "add" oder immer noch "add_news"?

                  danke für deine Hilfe, dennis, auf jeden Fall schonmal ;)

                  Bitte, du sieht also, wenn man entsprechendes Debugging betreibt, kommt man meistens selber auf die Lösung ;-)

                  Kleiner Tipp noch: Wenn du statt print_r($_POST); besser echo "<pre>"; print_r($_POST); echo "</pre>"; schreibst, kriegst du die Ausgabe noch viel übersichtlicher im Browser dargestellt.

                  MfG, Dennis.

                  --
                  Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                  Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)