Variable weiter geben

Pott-Taucher

Mitglied
Hallo zusammen...

Aufgrund von Spam Attacken auf mein Gästebuch muss ich nun ein kleinen Schutz einbauen. Man muss je Beitrag einen generierten Code eingeben. (Ne IP Sperre habe ich schon selbst gebaut und die t auch).

Die Code Generierung funktioniert auch soweit ganz gut:

PHP:
<?

$buchstaben = array("a", "b", "c");
$zahlen     = array("1", "2", "3");
$laenge = 5;


for($i=0, $code=""; strlen($code)<$laenge; $i++)
{
if(rand(0, 2)==0 && isset($buchstaben))
{
$add = $buchstaben[rand(0, count($buchstaben))];
$code.=$add;
if($add<>""){
echo "
<img src='guestbook/$add.jpg'>
";
}
}
elseif(rand(0, 2)==1 && isset($zahlen))
{
$add = $zahlen[rand(0, count($zahlen))];
$code.=$add;
if($add<>""){
echo "
<img src='guestbook/$add.jpg'>
";
}
}
}
?>

Ich beschreibe nun kurz die Funktionsweise des Gästebuches:

Zunächst wird das Formular generiert. In das Formular wird der aus Bildern bestehende Code eingeblendet. Dieser wird aus der externen Datei genommen. Als Referenz dient $code aus dieser Datei zum Abgleich.

Sobald das Formular abgeschickt wird soll dann diese Variable weiter gegeben werden:

PHP:
<form action='index2.php?main=guestbook/guestbook&check=1&nr=$zaehler&code=$code'  method='post'>

Im Formular wird nach $check_code gefragt.

Eine if-Schleife wird aktiviert wenn check == 1 ist und es kommt zum eigentlichem Eintrag und dem Abgleich $check_code = $code.


Die Var $code wird aber leider nicht weiter gegeben. Könnt ihr mir so helfen?
Ich habe leider nicht sooo viel Ahnung von php und frickel mir das immer zu recht. Aber diesmal bin ich mit meinem Latein am Ende. :rolleyes:

Sicherlich ist die Lösung für euch super simpel .... oder ich habe einfach nen Black Out ...

Vielen Dank!

Timo

Hier der Link zum Gästebuch:

http://potttaucher.po.ohost.de/index2.php?main=guestbook/guestbook
 
Hi,

so, wie Du das übergibst, müsstest Du wohl mit $_GET['code'] darauf zugreifen können. Ich halte das allerdings für nicht gut, die Lösung Deines "Captchas" mit in das Formular zu schreiben (und den Parameter dann auch noch "code" zu nennen). Oder habe ich das jetzt falsch verstanden?

LG
 
Danke zunächst für deine Rückmeldung.

Ab und zu haben irgendwelche Werbe Bots in mein Gästebuch geschrieben. Das will ich nun unterbinden.

Ich habe den Code mal auf das wesentliche runtergebrochen:

http://potttaucher.po.ohost.de/index2.php?main=guestbook/test

PHP:
if ($check <> 1){
echo "
<form action='index2.php?main=guestbook/test&check=1' method='post'>
<table>
<tr>
<td><font size = '2'>Code</td>
<td>
";

include("code.php");

echo "
$code</td>
<td><input type='Text' name='check_code' size='5' maxlength=''></td>
</tr>
<tr>
<td><input type='Submit' name='eintragen' value='Eintragen'></td>
<td></td>
<td><input type='reset'></td>
</tr>
</table>
</form>

";
}elseif($check == 1){
$tmp_code = $_GET['code'];
echo "
Generierter Code: $tmp_code
<br>
Eingegebener Code: $check_code
";
}

?>

Habe jetzt mal versucht den durch die Datein code.php Wert $code an $tmp_code durch deinen Befehl zu übergeben. Aber das klappt nicht ...
 
Hi,

jetzt übergibst Du das ja auch nirgends mehr. OK, ich habe Dir gesagt, dass das nicht gut ist, aber dann kannst Du das natürlich auch nicht auslesen. So etwas macht man mit einer Session. Dort speicherst Du die Lösung, bevor Du das Formular ausgibst. Wird das Formular abgesendet, vergleichst Du den gesendeten Code mit dem in der Session gespeicherten. So bekommt der Client die Lösung nicht zu sehen. ;)

LG
 
Hmmm ... ok :-)

Wie geht das mit so ner Session - das habe ich glaube ich noch nicht gemacht. Gibts nen Link wo das kurz und bündig erklärt ist?
 
Hi,

so etwa:

PHP:
<?php
session_start();
if(isset($_POST['code_eingabe'])) {
   if($_SESSION['code'] == $_POST['code_eingabe']) {
      eintragen();
   } else {
      display_stinkefinger();
   }
} else {
   $_SESSION['code'] = generiere_neuen_code();
   formular_mit_neuem_code_ausgeben();
}

LG
 
Danke für deine Hilfe - Werde ich morgen mal probieren. Habe für heute die Schnauze voll :-)

Falls ich Fragen habe weiß ich ja wo ich dich finde :suspekt:

Schönen Abend noch :D
 
Zurück