Alex89: funktion mit php erstellen.

Ich habe einge Frage
Kann ich so eine funktion erstellen?
Wenn nein wie könnte ich das script umschreiben damit es funktioniert?
Zu Ergenzung. Hierbei handelt es sich um ein Gäastebuch. Jedoch bekomme ich viel spam und möchchte einen Code ins gästebuch bringen den jeder eintragen muss bevor er die Nachricht abschicken kann.

function gb() {
    if(!isset($_POST['Name'], $_POST['Email'],
              $_POST['Homepage'], $_POST['Text'])) {
        die("Bitte Benutzen sie das Formular aus dem Gästebuch\n");
    }

if(trim($_POST['Name']) == "") {
        die("Bitte geben sie einen Namen ein");
    }
    if(trim($_POST['Text']) == "") {
        die("Bitte geben sie einen Text ein");
    }

$sql = "INSERT INTO gaestebuch
                (Name, Email, Homepage, Inhalt, Datum)
            VALUES
                ('".addslashes(htmlspecialchars($_POST['Name']))."',
                '".addslashes(htmlspecialchars($_POST['Email']))."',
                '".addslashes(htmlspecialchars($_POST['Homepage']))."',
                '".addslashes(htmlspecialchars($_POST['Text']))."',
                NOW())";

mysql_query($sql) OR die(mysql_error());

echo "<p>Vielen Dank für ihren Eintrag.</p>\n";
    echo "<p><a href="index.php?section=gaestebuch">Zurück ins Gästebuch</a></p>\n";
    }

$code = $_POST['Code'];
$bildcode = $bilder[$zahl];
switch ($bildcode) {

case 'bild1.jpg' : if ($code == "1") { gb(); } else { "Bitte geben sie den korrekten Code ein"; } break;
case 'bild2.jpg' : if ($code == "2") { gb(); } else { "Bitte geben sie den korrekten Code ein"; } break;
case 'bild3.jpg' : if ($code == "3") { gb(); } else { "Bitte geben sie den korrekten Code ein"; } break;
}

  1. Hi

    Klar, schreiben kannst du die Funktion natürlich so. Nett wäre auf jeden Fall zu wissen, was du für ein Problem hast.

    Was mir jetzt bei rübergucken aufgefallen ist, ist, das du die $bilder nie iwo eingeführt hast, wodurch der $bildcode natürlich nicht zustande kommen wird ausser du hast register_globals auf on. Auf jeden Fall ist es Code, der so nicht ganz sauber ist.

    Auch wäre gut zu wissen, was du mit der switch-case-anweisung am Ende bezwecken willst.

    Gruß
    Moe

    1. Also die Bilder kommen aus einer ganz anderen Datei. Include steht dort nicht, weil dies ein Code von meiner Homepage ist und woanders steht.
      Übrigends mein Problem ist, ich hab es total vergessen zu schildern :-)sry, dass es irgendwie nicht funktioniert. Der Server benutz diese Funktion gar nicht. Also er zeigt mir nichts an. Das Gästebuch funktionier einwandfrei also liegt es schon mal da nicht dran.

  2. Kann ich so eine funktion erstellen?

    Warum sollte diese Funktion denn nicht funktionieren?

    $code = $_POST['Code'];

    Diese Anweisung ist unnötig

    $bildcode = $bilder[$zahl];

    Woher bekommst du '$zahl'?

    switch ($bildcode) {

    case 'bild1.jpg' : if ($code == "1") { gb(); } else { "Bitte geben sie den korrekten Code ein"; } break;
    case 'bild2.jpg' : if ($code == "2") { gb(); } else { "Bitte geben sie den korrekten Code ein"; } break;
    case 'bild3.jpg' : if ($code == "3") { gb(); } else { "Bitte geben sie den korrekten Code ein"; } break;
    }

    Als Kriterium dieser Mehrfachabfrage könntest du doch auch '$zahl' verwenden, oder? Schliesslich ergibt sich die Variable '$bildcode' aus der Variable '$zahl'. Weiters könntest du die Mehrfachabfrage weglassen und das ganze kompakter machen. In einem Array stehen die möglichen Werte von '$zahl' als Schlüssel und der Wert, den '$code' haben soll, als Wert. Dann brauchst du statt der Mehrfachabfrage nur noch:

    if($code == $array_mit_zahl_und_code[$zahl])
      gb();
    else
      die("Bitte geben Sie den korrekten Code ein");

    mfg
    Rato

    --
    §§§
    Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
    §§§
    1. Danke für die schnelle Antwort.
      Ich werd es mal mit einem Array versuchen.
      Übrigends werden manche Daten includet. Steht dort leider nicht weil dies direkt von meiner Homepage kommt.

      So bekommte ich übrigends '$zahl' :

      1.
      <?php
          $bilder = array("bild1.jpg","bild2.jpg","bild3.jpg");
          mt_srand ((double)microtime()*1000000);
          $zahl = mt_rand(0,(count($bilder) - 1));
      ?>

      2.
      <?php
          echo "<img src="bilder123/".$bilder[$zahl]."">";
      ?>

    2. Lieber Mäusemelker,

      ich wäre mit dieser Aussage extremst vorsichtig:

      $code = $_POST['Code'];

      Diese Anweisung ist unnötig

      Wenn PHP sinnvoll konfiguriert ist, dann ist diese Anweisung absolut unumgänglich. Da ich mich in meinen Scripts nie auf so fragwürdige Einstellungen wie register_globals verlasse, ist diese Anweisung sogar überlebenswichtig! Dazu sollte dann vielleicht sogar noch eine Prüfung geschehen, die sicherstellt, dass in $code auch nur das steht, was darin stehen darf...

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. echo $begrüßung;

        ich wäre mit dieser Aussage extremst vorsichtig:

        $code = $_POST['Code'];
        Diese Anweisung ist unnötig
        Wenn PHP sinnvoll konfiguriert ist, dann ist diese Anweisung absolut unumgänglich. Da ich mich in meinen Scripts nie auf so fragwürdige Einstellungen wie register_globals verlasse, ist diese Anweisung sogar überlebenswichtig!

        Sie ist verzichtbar. Du kannst ebenso gut auf $_POST['Code'] zugreifen, an den Stellen, an denen du im weiteren Verlauf auf $code zugreifen würdest.

        Dazu sollte dann vielleicht sogar noch eine Prüfung geschehen, die sicherstellt, dass in $code auch nur das steht, was darin stehen darf...

        Und auch diese Prüfungen kann man mit $_POST['Code'] durchführen. Man muss es dazu ebenfalls nicht in eine andere Variable kopieren. Was anderes ist, wenn man den Wert verändern möchte und sich den geänderten Wert in einer Variable speichert.

        Die überflüssige Kopieranweisung ist weniger eine Frage der Performance. PHP legt dabei intern zunächst nur eine neue Variablenkontrollstruktur an, die auf den Inhalt der alten Variable zeigt. Erst wenn einer der Werte geändert wird, bekommt er einen eigenen Speicherplatz. Das "Problem" ist eine unnötige Codezeile, eine neue Variable, und die Verschleierung der Herkunft ihres Inhalts. Ein Eintrag in $_POST ist immer eine unvertrauenswürdige Benutzereingabe. Einer "normalen" Variable sieht man das nicht mehr auf den ersten Blick an. Bei weniger umfangreichen Scripts mag das kein Problem sein, doch je umfangreicher ein Projekt wird, desto klarer sollte man es gestalten.

        echo "$verabschiedung $name";

        1. Lieber dedlfix,

          Ein Eintrag in $_POST ist immer eine unvertrauenswürdige Benutzereingabe. Einer "normalen" Variable sieht man das nicht mehr auf den ersten Blick an. Bei weniger umfangreichen Scripts mag das kein Problem sein, doch je umfangreicher ein Projekt wird, desto klarer sollte man es gestalten.

          wieder etwas dazu gelernt. Danke! :-)

          Liebe Grüße aus Ellwangen,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)