Alex89: Prbolem mit code im Gästebuch.

Also ich bin dabei ein Gästebuch zu schreiben.
Ich hab mir jetzt vorgenommen, dass wenn man bei dem Gästebuch auf Speichern klicken will, man vorher einen Code eingeben muss damit der Eintrag geaddet wird. Den Code hab ich auch schon eingebettet in das Script, sodass per zufall immer wieder ein anderer Code angezeigt wird.
Jedoch hab ich jetzt das Problem das dass Script wieder einen anderen Code auswählt wenn ich auf Senden klicke und nur abundzu mal ein Eintrag im Gästebuch landet.

Hier sind die 3 Datein die für den Gästebuchcode notwendig sind.
Es wird jedoch nicht alles angezeigt da dies direkt von meiner Homepage kommt:

gb_add.html

<h2 class="überschrift">Eintrag ins Gästebuch hinzufügen</h2>
<form action="index.php?section=gb_insert" method="post">
<table border="0" align="center" >
  <tr align="left">
    <td width="20%">Name:</td>
    <td width="70%"><input type="text" name="Name"/></td>
  </tr>
  <tr align="left">
    <td width="20%">e-mail:</td>
    <td width="80%"><input type="text" name="Email"/></td>
  </tr>
  <tr align="left">
    <td width="20%">Homepage:</td>
    <td width="80%"><input type="text" name="Homepage"/></td>
  </tr>
  <tr align="left">
    <td width="20%">Beitrag:</td>
    <td width="80%"><textarea name="Text" cols="50" rows="10"></textarea></td>
  </tr>
  <tr align="left">
    <td width="20%">Code:</td>
    <td width="80%"><input type="text" name="Code"/></td>
  </tr>
  <tr align="left">
    <td width="20%"></td>
    <td width="80%">
    <?
    echo "<img src="gbcodes/".$gbcode."">";
    ?>
  </td>
  </tr>
  <tr align="left">
    <td width="20%">&nbsp;</td>
    <td width="80%"> <input type="submit" name="submit" value="Speichern" />&nbsp;<input type="reset" name="submit" value="Zurücksetzen" /></td>
  </tr>
</table>
</form>
<br>

gbinsert.php

<?php
  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";
    }

$eintragcode = $_POST['Code'];

$code = array('code1.jpg' => "56TLD7",
              'code2.jpg' => "E32AD0",
              'code3.jpg' => "P8IFG3",);

if ($code[$gbcode] == "$eintragcode") {
     gb();
}else{
    echo "<P>Bitte geben sie den richtigen Code ein!";
}

?>

gbcode.php

<?php
    $codes = array("code1.jpg",
                   "code2.jpg",
                   "code3.jpg");
    mt_srand ((double)microtime()*100);
    $zahl = mt_rand(0,(count($codes) - 1));
    $gbcode = $codes[$zahl];
?>

  1. Du könntest entweder dem Formular ein input-Feld mit type='hidden' hinzufügen, welches den Code (oder eine Identifikation des Codes) enthält und dieses dann mit dem Feld 'Code' vergleichen, oder aber den Code in einer Session serverseitig speichern, falls es dir zu unsicher ist, den Code (oder eine Identifikation desselben) textuell in der Seite abzulegen.

    MfG
    GK

  2. Wieso bleibst du nicht in deinem Tread?

    Jedoch hab ich jetzt das Problem das dass Script wieder einen anderen Code auswählt wenn ich auf Senden klicke und nur abundzu mal ein Eintrag im Gästebuch landet.

    Klar, schliesslich wird bei jedem Scriptaufruf ein neuer Code ausgewählt, somit ist der Code, der vom User mitgeschickt wird, immer falsch.

    gb_add.html

    Du meinst wohl eher 'gb_add.php'?

    if(!isset($_POST['Name'], $_POST['Email'],
                  $_POST['Homepage'], $_POST['Text'])) {

    Was für ein Konstrukt soll denn das sein? Dass man der Funktion 'isset()' mehrere Parameter übergeben kann, ist mir neu.

    $eintragcode = $_POST['Code'];

    Hat keinen Sinn.

    $code = array('code1.jpg' => "56TLD7",
                  'code2.jpg' => "E32AD0",
                  'code3.jpg' => "P8IFG3",);

    if ($code[$gbcode] == "$eintragcode") {

    Vielleicht solltest du es dem User auch ermöglichen, den Code kleingeschrieben einzugeben. Wieso setzt du '$eintragcode' bei der Abfrage eigentlich zwischen "?

    mt_srand ((double)microtime()*100);

    Was machst du mit dem Wert, der von 'mt_srand()' zurückgeliefert wird? Weiters heißt es 'float' und nicht 'double'.

    mfg
    Rato

    --
    §§§
    Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
    §§§
    1. ZU Frage 1:
      Ich wusste nicht genau ob man im alten Threat noch mal nachschauen würde also hab ich einen neuen gemacht. Werde ich dann beim nächsten mal   im gleiche Threat bleiben sry.

      Zu Frage 2:
      ALso es funktioniert das man 'isset()' mehrere Parameter zuweisen kann. Steht glaub ich auch im Manual.

      Zu 3.
      Wollte ich nur der Übersicht etwas und der Schreibweise abkürzen.

      zu4.

      Das der User den Code auch kleinschreiben kann wollte ich später vlt mal ergänzen. Mir ist es erst wichtiger dass das Script überhaupt erst richtig funktioniert.

      zu5.
      Den letzten teil hab ich von der Webseite dr.web. Es Funktioniert ja schließlich auch dass die Codes gewechselt werden.

      Danke übrigens für die schnelle Antwort.

  3. Hallo.

    Eigentlich ein Doppelposting, und die sind unerwünscht und kontraproduktiv.

    Dein alter Thread:
    https://forum.selfhtml.org/?t=155953&m=1014800

    MfG, Kungschu.

    --
    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
    1. Ich entschuldige mich auch dafür.
      Wird in Zukunft nicht mehr vorkommen.