Page 1 of 1

php Formularcheck

Posted: 2004-02-09 16:12
by blnsnoopy26
Hi,

Ich habe hier ein script was auf einen arry basierend ist, was ja kein Problem darstellt. Das Problem taucht erst auf, wenn man jetzt z.b ein Feld leer lässt , dann gibt es einen totalen murks und zerstört die cfg datei.

Hier mal der php code:

Code: Select all

$fp = fopen($settings, "w+");
                        $i = 0;
                        while ($i < count($settings))
                                {
                                fwrite($fp, "".$settings[$i]." "".$configarray[$i].""n");
                                $i++;
                                }
                        fwrite($fp, "");
                        fclose($fp);
Und ich hatte es so versucht mit einer ifschleife zur überprüfung,aber haut irgendwie nicht hin, sondern schreibt die datei trotzdem, obwohl das Feld leer ist:

Code: Select all

$fp = fopen($settings, "w+");
                        $i = 0;
                        while ($i < count($settings))
                                {
                                if($configarry[$i]=="")
                                {
                                echo "Alle Felder ausfüllen Bitte";
                                } else {
                                fwrite($fp, "".$settings[$i]." "".$configarray[$i].""n");
                                }
                                $i++;
                                }
                        fwrite($fp, "");
                        fclose($fp);
Wie kann ich das lösen? Und zwar soll er erst in die datei schreiben, wenn alle felder von configarry[] gefüllt sind, aber bisher blieb ich da erfolglos.

weiss da einer eine lösung?

Re: php Formularcheck

Posted: 2004-02-09 16:23
by arty
Hi,

überprüfe die übergebenen Variablen: http://de2.php.net/manual/de/function.isset.php

bye
arty

Re: php Formularcheck

Posted: 2004-02-09 17:01
by blnsnoopy26
Hi,

Das habe ich auch schon probiert und zwar so:

Code: Select all

$fp = fopen($settings, "w+"); 
                        $i = 0; 
                        while ($i < count($settings)) 
                                { 
                                if (!isset($configarry[$i]) 
                                { 
                                echo "Alle Felder ausfüllen Bitte"; 
                                } else { 
                                fwrite($fp, "".$settings[$i]." "".$configarray[$i].""n");  
                                $i++; 
                                } 
                        fwrite($fp, ""); 
                        fclose($fp);
                                } 
Aber Ohne erfolg.
Komme leider nicht dahinter die schleife so zu gestalten das er ein break macht, wenn configarry nicht gefüllt ist. Das Problem hatte mich schon ein ganzes WE beschäftigt.

Kennst du oder ein anderer eine beispiellösung die ich da mal testen könnte?

Habe auch mal die verschiedenen samples ausprobiert aber ohne erfolg bisher....

Re: php Formularcheck

Posted: 2004-02-09 17:05
by arty
Hi,

die Funktion ist auch recht nützlich: http://de2.php.net/manual/de/function.empty.php

bye
arty

Re: php Formularcheck

Posted: 2004-02-09 17:20
by blnsnoopy26
Funktioniert leider alles nicht :cry: :cry:
hast du da nicht eine idee wie der code aufgebaut werden kann damit es geht?

Mir gehen die Ideen langsam aus.
Hab es es im code an verschiedenen stellen versucht,aber ohne erfolg.

kennt sich da keiner aus, der da helfen könnte den code richtig zu setzen?

Re: php Formularcheck

Posted: 2004-02-09 17:42
by wgot
Hallo,

zwei Schleifen. In der ersten Schleife das Configarray durchsuchen ob alles da ist.

nein --> Fehlermeldung

ja --> Datei öffnen und bearbeiten.

So wie Du es jetzt hast, sind eventuell schon Ã?nderungen an der Datei erfolgt, bevor Du merkst daß ein Wert fehlt.

Gruß, Wolfgang

Re: php Formularcheck

Posted: 2004-02-09 17:53
by blnsnoopy26
Ja genau das ist eingetreten, aber ich bekomme das einfach nicht gebacken und ich grübel wie gesagt schon mehr als nur einen Tag an dem verdamten kleinen script rum und es will einfach nicht funktionieren :(

Kennst mir jemand behilflich sein, den code richtig zu stellen, weil bin da echt schon am verzweifeln.

machs so:

Posted: 2004-02-09 22:58
by preacher
meine gute tat für heute ;-)

Code: Select all

<?
// die datei in die geschrieben werden soll
$settingsDatei = "test.txt";

// die werte, die geschrieben werden sollen (rvalue)
$configarray[0] = "23";
$configarray[1] = "Roger Wilco";
$configarray[2] = "Boing 737";
$configarray[3] = "2323";
$configarray[4] = "klare Sicht";

// die bezeichnungen der felder (lvalue)
$settings[0] = "Anzahl";
$settings[1] = "Pilot";
$settings[2] = "Flugzeug";
$settings[3] = "Zeit";
$settings[4] = "Sichtverhaeltnisse";


$fehler = 0; // wenn fehler 0 bleibt ist alles ok
for ($i=0; $i < count($configarray); $i++)
{
	if (empty($configarray[$i]))
	{
		$fehler++; // leeres elem entdeckt -> fehleranzahl plus 1
	} // if
} // for i

if ($fehler < 1) // wenn keine fehler
{
	// erstmal sicherungskopie der config-datei erzeugen
	// das @ unterdrückt fehler... sollte nachher weg gemacht werden
	@copy($settingsDatei, $settingsDatei.".bak");

	// öffne datei
	$fp = fopen($settingsDatei, "w+");

	// gehe alle array-einträge durch
	for ($i=0; $i < count($configarray); $i++)
	{
		fwrite($fp, "".$settings[$i]." "".$configarray[$i].""n");
	} // for i

	fclose($fp);
}
else // wenn fehler
{
	$meldung = "Leider sind nicht die Angaben nicht vollstaendig.<br />n";
	$meldung .= "Es fehlen ".$fehler." Array-Eintraege.";
	echo $meldung;
} // if
?>
ciao,
preacher

Re: php Formularcheck

Posted: 2004-02-10 03:47
by blnsnoopy26
Funktioniert erste Sahne das teil - danke erst einmal :)
Es hat leider einen kleinen schönheitsfehler und zwar kann ich in keinem Formularfeld nur eine 0 eingeben, weil dann sagt er mir das nicht alle Felder ausgefüllt sind und bricht ab.

Welche änderung müsste ich vornehmen, damit ich auch nur eine 0 eintragen kann, weil die Zahl null brauche ich auch als eingabe :)

Ansonsten good work ;)

bauerntrick

Posted: 2004-02-10 08:36
by preacher
schreib doch einfach eine -1 rein und lass nachher alle -1 zu 0 umwandeln.

Code: Select all

...

for ($i=0; $i < count($configarray); $i++)
{
   if (empty($configarray[$i]))
   {
      $fehler++; // leeres elem entdeckt -> fehleranzahl plus 1
   } // if

    // hier die umwandlung ! ! ! !
   if ($configarray[$i] == -1)
   {
       $configarray[$i] = 0;
   } // if

} // for i 

...
ciao,
preacher

Re: php Formularcheck

Posted: 2004-02-10 12:59
by wgot
Hallo,

Code: Select all

if (empty($configarray[$i]))
prüft auf vorhanden, nicht 0, nicht Leerstring.

Code: Select all

if (!isset($configarray[$i]))
prüft nur auf vorhanden.

Gruß, Wolfgang

Re: php Formularcheck

Posted: 2004-02-10 14:30
by blnsnoopy26
Hi,

Also dieser Code liefert das selbe wie der erste:

Code: Select all

$fehler = 0; // wenn fehler 0 bleibt ist alles ok
                        for ($i=0; $i < count($configarray); $i++)
                        {
                        if (empty($configarray[$i]))
                        {
                        $fehler++; // leeres elem entdeckt -> fehleranzahl plus 1
                        } // if

                        // hier die umwandlung ! ! ! !
                        if ($configarray[$i] == -1)
                        {
                        $configarray[$i] = 0;
                        } // if
                        } // for i

                        if ($fehler < 1) // wenn keine fehler
                        {
                        // erstmal sicherungskopie der config-datei erzeugen
                        // das @ unterdrückt fehler... sollte nachher weg gemacht werden
                        @copy($settingsDatei, $settingsDatei.".bak");

                        // öffne datei
                        $fp = fopen($settingsDatei, "w+");

                        // gehe alle array-einträge durch
                        for ($i=0; $i < count($configarray); $i++)
                        {
                        fwrite($fp, "".$settings[$i]." "".$configarray[$i].""n");
                        } // for i

                        fclose($fp);
                        }
                        else // wenn fehler
                        {
                        $meldung = "Leider sind nicht die Angaben nicht vollstaendig.<br />n";
                        $meldung .= "Es fehlen ".$fehler." Array-Eintraege.";
                        echo $meldung;
                        } // if
wenn ich eine 0 ins textfeld schreibe, dann sagt er mir das noch 2 arrys ausgefüllt werden sollen und das sind genau die wo nur eine 0 drin steht.

Bei der Alternative mit isset da gibt eine garkeine überprüfung mehr.
Wenn da ein Feld leer bleibt, dann wird es dennoch gespeichert :(

Habe da auch schon stunden gefummelt, um es selbst hinzubekommen, aber irgendwie funzt das ganze leider nicht :(

Re: php Formularcheck

Posted: 2004-02-10 14:43
by wgot
Hallo,

sorry, isset war ein Denkfehler :oops:

Code: Select all

if ($configarray[$i]=='')
(die Zeichen hinter == sind zwei Hochkomma und nix dazwischen)

prüft genau auf leeres Feld.

Gruß, Wolfgang

Re: php Formularcheck

Posted: 2004-02-10 14:58
by blnsnoopy26
wgot wrote:Hallo,

sorry, isset war ein Denkfehler :oops:

Code: Select all

if ($configarray[$i]=='')
(die Zeichen hinter == sind zwei Hochkomma und nix dazwischen)

prüft genau auf leeres Feld.

Gruß, Wolfgang
Mein Held :)
Jetzt funktioniert es auch und ich kann auch eine 0 verwenden *strahl*

Mit schleifen habe ich es noch nicht so und insbesondere for schleifen :oops: Bisher kam ich immer mit einfachen if und while schleifen zurecht oder kombiniert.

Aber nun geht alles :)
Vielen Dank noch einmal für die mühe.
Hatte da echt schon ewig gegrübelt, warum es nicht so wollte wie ich und nun wurde ich erlöst.

1000000000 Dank :) :)

Re: php Formularcheck

Posted: 2004-02-10 19:10
by deanwickert
Also ich würde eher mit den $_GET und $_POST Variablen arbeiten. Außerdem würde ich alle Eingaben auch auf Korrektheit prüfen und nicht nur, ob überhaupt was eingegeben wurde.

Hier ein paar Beispiele:
http://www.php-faq.de/q/q-security-variablen.html

:!:

Re: php Formularcheck

Posted: 2004-02-10 19:13
by suntzu
Hi,

ich empfehle für Formulare HTML_QuickForm aus dem PEAR:
http://pear.php.net/package/HTML_QuickForm