php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.08.2007, 15:21  
Neuer Benutzer
 
Registriert seit: 02.08.2007
Beiträge: 6
Steusi
Steusi eine Nachricht über ICQ schicken
Standard Spamschutz - captcha, Zufallszahl verbirgt Fehler

Hi, ich habe gerade erst mit PHP angefangen bin also noch ein N00B in dem Bereich, aber ich hoffe ihr helft mir bei meinem Problem.
Ich bin gerade dabei einen SPAM-Schutz zu programmieren, aber es klappt einfach nicht.
Ich wollte es erstmal an einem einfachen Projekt versuchen, wo man seine HP eintragen darf
So ich habe 3 Dateien. 1. formular.php 2. index.php und 3. captcha.php

formular.php nur das Formular:

PHP-Code:
<form action="index.php" method="post">    
        <font color="#FF0000">*</font>
        URL: <input type="text" name="url" value="http://">    

        <font color="#FF0000">*</font>
        URLname: <input type="text" name="hpname" />

        <font color="#FF0000">*</font>
        Name: <input type="text" name="name" />

        Bannerlink: <input type="text" name="banner" />

        <font color="#FF0000">*</font>
        Beschreibung: <input type="text" name="beschreibung" />

        <?php
        
// Spamschutz
        
echo("
<img src=\"captcha.php?wert=\""
.$wert."\" />

"
);
        echo(
"<input type=\"hidden\" name=\"wert\" value=\"".$wert."\" />");
        echo(
"<font color=\"#FF0000\">* </font>
        <input type=\"text\" name=\"spam\" maxlength=\"4\" />
"
);
        
?> 
        Spamschutz: geben Sie bitte die Zahlenfolge ein 

        

<input type="submit" name="submit">    
        <input type="reset" value="Inhalt löschen" />                    
</form>
index.php
PHP-Code:
if((empty($_POST['name'])) OR (("http://") == ($_POST['url'])) OR (empty($_POST['url']))
    OR (empty(
$_POST['hpname'])) OR (empty($_POST['beschreibung'])) OR ($_POST['wert'] != $_POST['spam'])) 
{
    echo (
"Bitte füllen Sie alle Pflichtfelder aus!
"
);
    include(
"formular.php");
    }
    
    else {

    
MySQL Ausgabe ect.

    } 
Und zum Schluss die captcha.php

PHP-Code:
<?php
    
// Zufallswert erstellen
    
srand();
    
$wert rand(10009999);
    
// Erstellen eine 40 mal 100 px großen Bildes
    
$bild imagecreate(100,40);
    
// Farben definieren
    
$schwarz imagecolorallocate($bild,0,0,0);
    
$weiss imagecolorallocate($bild,255,255,255);
    
// Schrift einfügen
    
imagestring($bild,20,20,10,$wert,$weiss);
    
// Störlinien setzen
    
imageline($bild,0,30,100,15,$weiss);
    
imageline($bild,0,10,100,30,$weiss);
    
imageline($bild,30,0,85,40,$weiss);
    
// Type im Header definieren und Bild ausgeben
    
header("Content-Type: image/jpeg");
    
imagejpeg($bild);
    
// Bild löschen
    
imagedestroy($bild);
?>
So die Problemstellen sind:
PHP-Code:
echo("<img src=\"captcha.php?wert=\"".$wert."\" />"); 
PHP-Code:
echo("<input type=\"hidden\" name=\"wert\" value=\"".$wert."\" />"); 
PHP-Code:
if($_POST['wert'] != $_POST['spam']) 
PHP-Code:
include("formular.php"); 

Zu Anfang scheint alles OK zu sein, aber die Bedingung ist immer Falsch, sodass einem immer wieder das Formular vor die Nase gehalten wird und da sind 2 Notizen mit dem Inhalt „Undefined variable: wert“. Liegt es daran, dass ich die Zufallszahl im captcha.php erstellt habe?
Anstatt des includen könnte man ja auch eine Weiterleitung zum Formular anordnen oder!?
Trotzdem komme ich nicht mehr zu eigentlichen Seite (index.php)
PS: Habe die Suchfunktion genutzt, aber nicht wirklich das passende gefunden.
Hoffe Ihr könnt mir helfen, schon mal vielen Dank im Voraus für Eure Bemühungen.

Gruß Steusi
Steusi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.08.2007, 16:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Willkommen im Forum!

Wenn du die Variable $wert nicht in der Datei oder vorherigen include()s definierst, kannst du sie natürlich auch nicht verwenden.

Um Informationen über Seiten hinweg zu tragen, kannst du Sessions verwenden.
http://de.php.net/session
Dazu einfach am Beginn jeder Datei, die Zugriff auf verteilte Variablen haben sollen, ein session_start() stellen. Vor diesem Befehl darf nichts (kein HTML, kein PHP-echo oder PHP-print) an den Browser gesendet worden sein. Falls doch, wird dir "header already sent" über den Weg laufen. In der Fehlermeldung steht, wo bereits eine Ausgabe erfolgt ist (Datei:Zeile). Danach kannst du lesend und schreibend mittels $_SESSION['schluessel'] = 'wert'; auf die Session zugreifen.
Mehr dazu im Handbuch, siehe Link.

Ich weiß jetzt nicht, was bei dir in $wert stehen soll, aber denk dran, dass das, was in einem Captcha-Bild steht, niemals an den Browser geschickt werden darf, also auch nicht "versteckt" im HTML-Quelltext als <img src> wert=Lösung

Schön übrigens, dass du dein Error-Reporting freiwillig oder unfreiwillig auf E_ALL gesetzt hast, Hinweise/Notices sind sehr wichtig bei der Entwicklung, ignoriere sie nie, es sei denn du weißt was du tust.
Zergling-new ist offline  
Alt 06.08.2007, 16:38  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 243
mAy^daY
Standard

Zunächst mal, so wie ich das sehe rufst du dein Captcha-Img mit dem Parameter auf der dort angezeigt wird. Genau diesen Fragst du dann ab, das ist von daher relativ sinnfrei weil man hier ja einfach im Quelltext nachschaun kann was der korrekte Wert ist.

Aber gut, davon abgesehen sagt die Fehlermeldung doch schon relativ viel aus: "Undefined variable: wert"

Der Knackpunkt ist einfach das du zwar in captcha.php die Variable $wert definierst, diese aber in deiner formular.php verwendest. Somit ist $wert nur für captcha.php definiert.

Eine mögliche Lösung wäre z.B. include

// edit, zu langsam
mAy^daY ist offline  
Alt 06.08.2007, 22:41  
Neuer Benutzer
 
Registriert seit: 02.08.2007
Beiträge: 6
Steusi
Steusi eine Nachricht über ICQ schicken
Standard

@ Zergling woher weis du das ich error_reporting(E_ALL) eingegeben habe, habe ich doch nirgents geschrieben oder?
Na egal ich danke Euch jedenfalls werde mir das mit $_SESSION mal angucken!

@ mAy^daY, nein im Quelltext wird der Inhalt nicht angegeben, da steht ein leerer String
Steusi ist offline  
Alt 07.08.2007, 00:04  
Erfahrener Benutzer
 
Registriert seit: 23.12.2003
Beiträge: 243
mAy^daY
Standard

Ich bin von dieser Zeile ausgegangen:
PHP-Code:

// ...
echo("<input type=\"hidden\" name=\"wert\" value=\"".$wert."\" />"); 
// ... 
Das hier $wert nichts enthält, wurde ja bereits gesagt. Google einfach mal nach Captcha Tutorials, da findest du ne Menge hilfreiches, bzw. wenn du dich mit Sessions auseinandergesetzt hast kommst du bestimmt auch ohne Tutorial drauf.
mAy^daY ist offline  
Alt 07.08.2007, 13:37  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Steusi
@ Zergling woher weis du das ich error_reporting(E_ALL) eingegeben habe, habe ich doch nirgents geschrieben oder?
Na egal ich danke Euch jedenfalls werde mir das mit $_SESSION mal angucken!
Zitat:
Zitat von Steusi
und da sind 2 Notizen mit dem Inhalt „Undefined variable: wert“
Notices sind das niedrigste Fehlerlevel, um sie zu sehen ist üblicherweise E_ALL eingestellt.
Zergling-new ist offline  
Alt 07.08.2007, 15:49  
Neuer Benutzer
 
Registriert seit: 02.08.2007
Beiträge: 6
Steusi
Steusi eine Nachricht über ICQ schicken
Standard

@ mAy^daY, da hast du recht die habe ich jetzt gelöscht, auch bei
PHP-Code:
<?php echo("<img src=\"captcha.php?wert=\"".$wert."\" />");
habe ich $wert entfernt, dann es geht auch anders ohne das!

@ Zergling, sehr clever!

Ich habe eine Zufallsvariable erstellt und möchte sie in 2 Dateien verwenden.
Die Variable brauch bei meinem Formular.php gar nicht vorkommen, aber unter index.php!
Die Variable ist in captcha.php deklariert, soll aber auch unter index.php zu Verfügung stehen. Wie bewältige ich das Problem?
Includen hat nicht funktioniert, da 2 verschiedene Zufallszahlen erstellt wurden, kann man nicht nur die erstellte Variable includen? Dann könnte man unter index.php so was wie include(„captcha.php?$wert“); schreiben, aber das ist in so einer Ähnlichen Art nicht möglich oder?
Mit $_SESSION soll es möglich sein, ich verstehe aber nicht wie?
Kann mir einer kurz erklären, wie ich die Variable abspeichere, versende und weiter verwenden kann. Das wäre nett.

session_start();
$_SESSION[‚wert’] = $wert;

<form action="index.php?wert" method="post">
</form>

Transparente URL Parameter waren noch komplizierter.
Oder wie soll das alles funktionieren ich steig da nicht hinter, das muss ich mal im tutorial lernen!
Steusi ist offline  
Alt 07.08.2007, 15:56  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich hab dir bereits erklärt wie es geht und unter dem Session-Link wird es auch erklärt. Lesen musst du aber schon selbst.
Zergling-new ist offline  
Alt 24.08.2007, 14:56  
Neuer Benutzer
 
Registriert seit: 02.08.2007
Beiträge: 6
Steusi
Steusi eine Nachricht über ICQ schicken
Standard

Habe bei Captcha.php

PHP-Code:
session_start();
$_SESSION['wert'] = $wert
Und beim anderen:
PHP-Code:
$wert $_SESSION['wert']; 
nimmt er aber nicht.
Steusi ist offline  
Alt 24.08.2007, 17:17  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Bei letzterem fehlt session_start(), was steht denn in $wert selbst?
var_dump($wert, $_SESSION);
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
[Erledigt] mysql fehler PHP Tipps 2004 2 03.11.2004 00:32
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
zufallszahl captcha, undefined index: captcha-wert in, captcha zufallszahl, submit namen eine zufällige zahl geben, $session anderst wie klasse, formulare spam zufallszahl hidden, php captcha mit zufallszahlen, undefined variable captcha.php, spamschutz, captcha php im formular, zufallszahlen für captcha, spamschutz zufallszahlen, undefined index: var captcha color, zufallszahl catchpa php, zufallszahl captcha php, random zahl als captcha nutzen php, php zufallszahlen captcha, datei suchen mit zufallszahl als name php, spamschutz programmieren, usability spamschutz

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.