php Formularcheck

Bash, Shell, PHP, Python, Perl, CGI
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

php Formularcheck

Post 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?
arty
Userprojekt
Userprojekt
Posts: 729
Joined: 2002-06-12 10:11

Re: php Formularcheck

Post by arty »

Hi,

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

bye
arty
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: php Formularcheck

Post 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....
Last edited by blnsnoopy26 on 2004-02-09 17:08, edited 1 time in total.
arty
Userprojekt
Userprojekt
Posts: 729
Joined: 2002-06-12 10:11

Re: php Formularcheck

Post by arty »

Hi,

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

bye
arty
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: php Formularcheck

Post 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?
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: php Formularcheck

Post 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
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: php Formularcheck

Post 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.
preacher
Posts: 24
Joined: 2003-12-10 18:57

machs so:

Post 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
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: php Formularcheck

Post 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 ;)
preacher
Posts: 24
Joined: 2003-12-10 18:57

bauerntrick

Post 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
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: php Formularcheck

Post 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
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: php Formularcheck

Post 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 :(
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: php Formularcheck

Post 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
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: php Formularcheck

Post 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 :) :)
deanwickert
Posts: 77
Joined: 2003-05-13 23:20
Location: Lahnstein

Re: php Formularcheck

Post 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

:!:
suntzu
Posts: 669
Joined: 2002-12-20 19:47
Location: Mönchengladbach

Re: php Formularcheck

Post by suntzu »

Hi,

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