Diskussion:Affenformular

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 14 Jahren von Tobiask in Abschnitt PHP-Code Beispiel 2
Zur Navigation springen Zur Suche springen
[Quelltext bearbeiten]

Bei mehreren automatisierten Botläufen wurde der folgende Weblink als nicht verfügbar erkannt. Bitte überprüfe, ob der Link tatsächlich down ist, und korrigiere oder entferne ihn in diesem Fall!

--Zwobot 17:48, 21. Jan 2006 (CET)

Habe den Link rausgenommen, aber leider noch kein anderes brauchbares Beispiel in Perl gefunden. --ThomasMielke Talk 19:27, 21. Jan 2006 (CET)
Habe hier ein anderes Beispiel eingestellt: http://wiki.perl-community.de/cgi-bin/foswiki/view/Wissensbasis/AffenFormular c a p f a n < a t > g m x . d e (nicht signierter Beitrag von 79.206.121.112 (Diskussion | Beiträge) 16:03, 27. Sep. 2009 (CEST)) Beantworten

wozu?

[Quelltext bearbeiten]

Aus dem Einleitungsabschnitt wird mir nicht deutlich, wozu das eigentlich gut sein soll. --mst 15:29, 15. Sep 2006 (CEST)

Habe die Einleitung etwas überarbeitet. So besser? --ThomasMielke Talk 15:55, 15. Sep 2006 (CEST)
ja, der Gültigkeitstest ist ein nicht unwesentliches Detail :-) Gruß, mst 16:06, 15. Sep 2006 (CEST)
Da hast Du wohl recht. Man sollte sich seine Artikel ab und zu ruhig noch einmal mit etwas Abstand durchlesen und versuchen, dabei die Betriebsblindheit abzuschalten ;-) --ThomasMielke Talk 16:15, 15. Sep 2006 (CEST)
Habe noch einen Satz hinzugefügt ("Vorteil:..."). Stefan@freimark.de 12:04, 6. Dez. 2006 (CET)Beantworten

Kategorie Algorithmus?

[Quelltext bearbeiten]

Was hat das mit einem Algorithmus zu tun? Sieht eher nach einer Art Design-Pattern aus. --Chiccodoro 15:56, 31. Mär. 2008 (CEST)Beantworten


PHP-Code Beispiel

[Quelltext bearbeiten]

Im Artikel steht folgendes Code-Beispiel:

if(empty($_POST['textfeld']))
{
    $fehler = 1;
}
else
{
    header("Location: $redirect_url");
    exit;
}

Dieses halte ich in der Form für ein wenig verwirrend. Bei einem Affenformular will man in der Regel doch gerade nicht auf eine andere Seite weiterleiten. Ich wäre dafür, das Beispiel entweder ausführlicher bzw. überhaupt zu kommentieren oder einfach zu löschen. So wie es nun ist hilft es wohl den wenigsten wirklich weiter sondern, sorgt im Gegenteil nur für Verwirrung unter Anfängern. Gibt es eigentlich eine Vorgabe bezüglich "Einrückungsstile" für PHP in der Wikipedia? -- Götz 18:25, 22. Apr. 2008 (CEST)Beantworten

In der Tat - das Beispiel ist nichtssagend. Die Trennung in zwei Codeblöcke läßt den Kontext Affenformular nicht mehr erkennen, das erste ist auch kein HTML Code. Vor allem die Zuweisung einer 1 zu $error ohne weiteren Bezug darauf ist für Einsteiger nur verwirrend. Die Form der Verarbeitung (Weiterleitung, Include, direkte Notation) sollte m.E. durch eine abstrakte Notation (z.B. den Kommentar // Hier erfolgt die Verarbeitung) ersetzt werden. --nik

falsche Parameterbehandlung

[Quelltext bearbeiten]

Das sehe ich ähnlich wie mein Vorredner! Ich tendiere als Basiscode eher zu:

<?php

## Datenübernahme

if(!isset ($_POST['textfeld']) or !is_string($_POST['textfeld')) ## es könnte unerlaubterweise auch ein Array sein
{
    $_POST['textfeld'] ='';
}

## hier ggf. Datenprüfung einfügen
## ...
## und Fehlerwerte setzen

## Datenausgabe per HTML vorbereiten

$_htmlout['textfeld'] = htmlspecialchars($_POST['textfeld']);

?>

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
    <input type="text" name="textfeld" value="<?php echo $_htmlout['textfeld']; ?>">
    <input type="submit" name="speichern" value="eintragen">
</form>

Der nimmt nämlich auch auf den Erst-Request, der üblicherweise per GET ohne Parmeter kommt, Rücksicht. Der im aktuellen Beispiel veröffentlichten Code kann hingengen NICHT per GET als Affenformular funktionieren.

Grüße Tom vom Berg (nicht signierter Beitrag von Bitman (Diskussion | Beiträge) 18:25, 7. Okt. 2009 (CEST)) Beantworten

Infinite Monkey Theorem

[Quelltext bearbeiten]

Habe mal die wahrscheinliche ethymologische Herkunft des Artikelnamens als Link angefügt. mfg Captainsurak 00:01, 4. Okt. 2009 (CEST)Beantworten

PHP-Code Beispiel 2

[Quelltext bearbeiten]

Das aktuelle Beispiel ist immer noch nicht korrekt. Als Optionen nach der Validierung stehen Weiterleitung oder Ausgabe der Fehler als Liste zur Verfügung. Aber: Die Liste würde einen kompletten Dokumentkopf vor der Ausgabe benötigen, die Weiterleitung dagegen darf keinen Dokumentkopf (genauer: keinerlei Ausgabe) vor dem Aufruf gesetzt sehen. Ausgabe des Headers vor der Liste geht auch nicht, weil dann im Initfall der Header vor dem Form fehlt oder im Refill-Fall doppelt vorkommt. Fazit:

<?php

// Eingabeprüfung - Verarbeitung nur bei abgesendetem Formuler starten

if (!empty($_POST)) {
 
    $fehler = array();
 
    // Inhaltsprüfungen
    
    if(empty($_POST['textfeld'])) {
        $fehler['textfeld'] = 'Textfeld darf nicht leer sein';
    }

    // weitere Prüfungen hier einfügen
 
 
    if (empty($fehler)) {
        // Verarbeitung war erfolgreich
        // Weiterleiten beispielsweise zu einer Dankesseite
        header("Location: http://example.com/danke.php");
        exit;
    }
}
?>
<html>
  <head>
    <title>Affenformular</title>
  </head>
  <body>
    <?php
    if (! empty($fehler)) {
    
        // Ausgabe der gesammelten Fehlermeldungen
        
        echo "<ul class='errors'>\n";
        foreach ($fehler as $feldname => $meldung) {
            printf("<li>%s</li>\n", htmlspecialchars($meldung));
        }
        echo "</ul>\n";
    }
    ?>
    <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
        <input type="text" name="textfeld"
            value="<?php echo isset($_POST['textfeld']) ? htmlspecialchars($_POST['textfeld']) : ''; ?>" />
        <input type="submit" name="submit" value="Absenden" />
    </form>
  </body>
</html>

wäre mein Vorschlag --nik --85.178.224.204 22:13, 28. Apr. 2010 (CEST)Beantworten

das mag ja (bis auf den fehlenden Doctype) richtig sein - aber das führt imho zu weit, und im Artikel steht ja in dem Satz vor dem Beispiel auch, dass das nur die notwendigen Codeschnipsel sind - davon dass das eine vollständige Seite ist steht da nichts. --Tobiask 17:05, 30. Apr. 2010 (CEST)Beantworten