Problem mit Funktion im Formular

aleks

Mitglied
Hallo Zusamme,
ich hätte da so ein Problemchen.
Ich habe ein Formular einen Teil davon habe in eine andere Datei ausgelagert und über Include eingebunden. Hier erst mal der Code:

PHP:
<?php

 print_r($_POST);
 setlocale(LC_ALL, 'DEU');
  $allesok = false; 
if(isset($_POST['ueberpruefung'])) 
  {  
    $allesok = true;
  
   include('.\pruefung.php');
  check();
}
 // Hier wird die IF-Bedingung von ganz oben geschlossen.
  

 // Hier wird geprft ob allesok einen Wert hat. (1) Ist dies der Fall, k�nen die Variablen $_POST['name'] und $_POST['email'] weiter verarbeitet werden.
  if($allesok){
    

echo "Alle Ihre Daten wurden aufgenommen.";

  
  }

  // Ist der Wert 1 nicht vorhanden, zeige das Formular.
  else
  {
 

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
<title>Dreispaltiges Layout mit Kopf- und Fußzeile</title>

<link rel="stylesheet" href='css/formular_box.css' type="text/css" type='text/opera;charset=utf-8'>
</head>
<body>

<h1>CSS-basierte Layouts</h1>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >

<div class="raised"><b class="b1"></b><b class="b2"></b><b class="b3"></b><b class="b4"></b>
<div class="boxcontent">
<div class="inhalt">

<p>
<h4>Bitte alle Felder ausf&uuml;hlen!</h4><?php 
          echo $error['login'];
          echo $error['pass1'];
		  echo $error['pass2'];
		  echo $error['vorname'];
		  echo $error['nachname'];
		  echo $error['geburtstag'];
		  echo $error['strasse'];
		  echo $error['nummer'];
		  echo $error['land'];
		  echo $error['plz'];
		  echo $error['ort'];
		  echo $error['email'];
		  echo $error['gruppe'][0];
		  echo $error['gruppe'][1];

?>

</p> usw.
und hier die eingebunde Datei:
PHP:
<?php

function check()
{
  if(empty($_POST['login']))
 {
   
   $allesok = 0;
   $error[login]="Bitte Login eingeben <br>";
   $error2[login] = "<b><span style=\"color:red;\">*</span></b>";
 }
 if(empty($_POST['pass1'])&&($_POST['pass2']))
 {
   $allesok = 0;
   
   $error[pass1]="Bitte Password eingeben!<br>";
   $error[pass2]="Bitte Password noch mal eingeben!";
   $error2[pass1] = "<b><span style=\"color:red;\">*</span></b>";
   $error2[pass2] = "<b><span style=\"color:red;\">*</span></b>";
 }
 else
 {
   

    
    if(($_POST['pass1'])==($_POST['pass2']))
    {
	  $allesok = 0;
	  $error[pass1]="Bitte Password eingeben!<br>";
          $error[pass2]="Bitte Password noch mal eingeben!<br>";
   	  $error2[pass1] = "<b><span style=\"color:red;\">*</span></b>";
          $error2[pass2] = "<b><span style=\"color:red;\">*</span></b>";
     
	}
 
  }
  
 if(empty($_POST['vorname']))
 {
  $allesok = 0;
  $error[vorname]="Bitte Vorname eingeben!<br>";
  $error2[vorname] = "<b><span style=\"color:red;\">*</span></b>";
}
else
{
$_POST['vorname']=trim(stripslashes($_POST['vorname']));
$_POST['vorname'] = ucfirst($_POST['vorname']);
$Plotter = "/[a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/Us"; 
	if(!preg_match($Plotter,$_POST['vorname']))
	{
	  $allesok = 0;
	  $error[vorname]="Bitte Vorname eingeben!<br>";
	  $error2[vorname]="<b><span style=\"color:red;\">*</span></b>";
	}
}
  
  // Hier wird geprft ob Vorname leer ist. Ist dies der Fall, wird allesok auf 0 gesetzt (Kein Wert mehr) und ein Fehlertext erstellt, der im Formular ausgegeben wird.
 if(empty($_POST['nachname']))
 {
  $allesok = 0;

  $error[nachname]="Bitte Nachname eingeben!<br>";
  $error2[nachname] ="<b><span style=\"color:red;\">*</span></b>";
}

else
{
$_POST['nachname']=trim(stripslashes($_POST['nachname']));
$_POST['nachname'] = ucfirst($_POST['nachname']);
$Plotter = "/[a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/Us"; 
	if(!preg_match($Plotter,$_POST['nachname']))
	{
	  $allesok = 0;
	  $error[nachname]="Bitte Nachname eingeben!<br>";
	  $error2[nachname]="<b><span style=\"color:red;\">*</span></b>";
	}
}
 // Hier wird geprft ob Nachname leer ist. Ist dies der Fall, wird allesok auf 0 gesetzt (Kein Wert mehr) und ein Fehlertext erstellt, der im Formular ausgegeben wird.

 if(isset($_POST['tag'])&&($_POST['monat'])&&($_POST['jahr']))
 {
   if( @checkdate($_POST['monat'], $_POST['tag'], $_POST['jahr']) ) 
   {
            $timestamp = mktime(0, 0, 0, $_POST['monat'], $_POST['tag'], $_POST['jahr']);
           $timestamp=date('d.m.Y', $timestamp);  

   }  
		else 
		{
		  $allesok=0;
            $error[geburtstag]= "Bitte geben Sie ein korektes Datum an!<br>";
            $error2[geburtstag]="<b><span style=\"color:red;\">*</span></b>";
        }
    
 } 
 else
 {
    $allesok=0;
    $error2[geburtstag]="<b><span style=\"color:red;\">*</span></b>";
	$error[geburtstag]="Bitte ein Datum angeben!<br>";
}  
 
 if(empty($_POST['strasse']))
 {
  $allesok = 0;
  $error[strasse]="Bitte geben Sie eine Strasse ein!<br>";
  $error2[strasse] = "<b><span style=\"color:red;\">*</span></b>"; 
  
}
else
{
$_POST['strasse']=trim(stripslashes($_POST['strasse']));
$_POST['strasse'] = ucfirst($_POST['strasse']);
$Plotter = "/[a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/Us"; 
	if(!preg_match($Plotter,$_POST['strasse']))
	{
	  $allesok = 0;
	  $error[strasse]="Bitte geben Sie eine Strasse ein!<br>";
	  $error2[strasse]="<b><span style=\"color:red;\">*</span></b>";
	}
}
if(empty($_POST['nummer']))
{
  $allesok = 0;
  $error[nummer]="Bitte geben sie eine Hausnummer ein!<br>";
  $error2[nummer] = "<b><span style=\"color:red;\">*</span></b>";
  
}
if(empty($_POST['land']))
 {
  $allesok = 0;
  $error[land]="Bitte geben Sie ein Land ein!<br>";
  $error2[land] ="<b><span style=\"color:red;\">*</span></b>";
}
else
{
$_POST['land']=trim(stripslashes($_POST['land']));
$_POST['land'] = ucfirst($_POST['land']);
$Plotter = "/[a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/Us"; 
	if(!preg_match($Plotter,$_POST['land']))
	{
	  $allesok = 0;
	  $error[land]="Bitte geben Sie ein Land ein!<br>";
	  $error2[land]="<b><span style=\"color:red;\">*</span></b>";
	}
}
  // Hier wird geprft ob PLZ leer ist. Ist dies der Fall, wird allesok auf 0 gesetzt (Kein Wert mehr) und ein Fehlertext erstellt, der im Formular ausgegeben wird.
 if(empty($_POST['plz']))
 {
  $allesok = 0;
  $error[plz]="Bitte geben Sie eine PLZ ein!<br>";
  $error2[plz] = "<b><span style=\"color:red;\">*</span></b>";
  
}
else
{
  $plotter = "/^[0-9]{5}$/";
  if(!preg_match ($plotter,$_POST['plz'])) 
  {
    $allesok = 0;
  $error[plz]="Bitte geben Sie eine PLZ ein!<br>";
  $error2[plz] = "<b><span style=\"color:red;\">*</span></b>";
   
  }
}
  
   // Hier wird geprft ob Ort leer ist. Ist dies der Fall, wird allesok auf 0 gesetzt (Kein Wert mehr) und ein Fehlertext erstellt, der im Formular ausgegeben wird.
 if(empty($_POST['ort']))
 {
  $allesok = 0;
  $error[ort]="Bitte geben sie einen Ort an!<br>";
  $error2[ort] = "<b><span style=\"color:red;\">*</span></b>";
 }
 else
 {
 $_POST['ort']=trim(stripslashes($_POST['ort']));
$_POST['ort'] = ucfirst($_POST['ort']);
$Plotter = "/[a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/Us"; 
	if(!preg_match($Plotter,$_POST['ort'])) 
	{
	  $allesok = 0;
	  $error[ort]="Bitte geben sie einen Ort an!<br>";
	  $error2[ort]="<b><span style=\"color:red;\">*</span></b>";
	} 
 }


 //Hier wird geprft ob Email leer ist. Ist dies der Fall, wird allesok auf 0 gesetzt (Kein Wert mehr) und ein Fehlertext erstellt, der im Formular ausgegeben wird.
  if(empty($_POST['email']))
  {
  $allesok = 0;
  $error[email] = "Bitte Geben Sie eine E-Mail an!<br>";
  $error2[email] = "<b><span style=\"color:red;\">*</span></b>";
  }
  else
  {
    $Plotter="^([0-9a-z]+)([0-9a-z\.-_]+)@([0-9a-z\.-_]+)\.([0-9a-z]+)";
    if(eregi($Plotter,$_POST['email']))
    {

      return TRUE;
    }
    else
    {
        $allesok = 0;
  $error[email]="Bitte geben sie Ihre Email an!<br>";
  $error2[email] = "<b><span style=\"color:red;\">*</span></b>";
    }
  }
  
   if(empty($_POST['nutzbedingungen'][0])){ 
  $allesok = 0; 
  $error2[nutzbedingungen][0] = "<b><span style=\"color:red;\">*</span></b>"; 
  $error[nutzbedingungen][0] = "Sie m&uuml;ssen die Nutzungsbedingungen aktzeptieren!<br>";}
  
    if(empty($_POST['gruppe'][1])){ 
  $allesok = 0;  
  $error[gruppe][1] = "Sie m&uuml;ssen die AGBs aktzeptieren!<br>";
  $error2[gruppe][1] = "<b><span style=\"color:red;\">*</span></b>";
  }
}
?>
So jetzt zu meinen Problem ist:z.B. der User trägt nichts ins Formular ein, so sollte das Formular wieder erscheinen. Tut es aber nicht.:mad: Stattdessen wird der Text aus der Schleife if($allesok) ausgeben und das Formular wird nicht angezeigt. Wenn ich das alles in eine Datei packe ist alles ok.
Also was mache ich falsch beim Funktionsaufruf? Ich komme einfach nicht dahinter. Bitte hielft mir. Wollte noch sagen das ich so etwas in PHP noch nicht gemacht habe. Schon mal danke!
Gruß aleks
 
Nun das kann auch nicht gehen.
Du setzt die Variable $allesok auserhalb deiner Funktion check auf true.
Wenn du möchtest das sich der Wert von allesok ändert mußt du deine Funktion dahingehend ändern, das sie einen Rückgabewert liefert oder du übergibst deine Variablen als Referenz.

BSP. beim Aufruf
PHP:
f(isset($_POST['ueberpruefung']))  
  {   
    $allesok = true; 
   
   include('.\pruefung.php'); 
  check($allesok,$error); 
}

und deine Funtion erwartet
PHP:
function check(&$allesok,&$error) 
{ 
.
.
.
}

Auch empfehle ich dir beim arbeiten mit assioziativen Arrays bei den Namen Hochkommas zu verwenden
Bsp
PHP:
$error['pass2']="Bitte Password noch mal eingeben!";

und ganz sauber ist es wenn du innerhalb deiner Funktion $allesok im Fehlerfall auf

PHP:
$allesok=false;
setzt.
 
Hallo DerBär für deinen Tipp. Ist ein fast perfekter Vorschlag... habe einfach die Zeiger weg gelassen und siehe es funktioniert.:)
Auch empfehle ich dir beim arbeiten mit assioziativen Arrays bei den Namen Hochkommas zu verwenden
Könntest mal erklären warum man das machen muß.
und ganz sauber ist es wenn du innerhalb deiner Funktion $allesok im Fehlerfall auf

PHP-Code:
$allesok=false;
setzt.
Was für ein Fehler und wo sollte ich die den einsetzen?

Gruß Aleks
 
Nun bei assioziativen Arrays sollten die keys(Schlüssel) Zeichenketten sein. Und Zeichenketten gehören unter Hochkoma.
So wie du das machst ist der Schlüssel eine undefinierte Konstante.
Es macht im Grunde keinen Unterschied und wird so denke ich solange du keine Konstante die den Namen einens Schlüssels hat zu keinen Problemen führen.
Ich denke nur das es wichtig ist den Unterschied zu wissen.

$allesok=false
Das gehört innerhalb deiner Funktion immer da wo ein Fehler auftritt.

Bsp:
PHP:
if(empty($_POST['vorname'])) { 
  $allesok = false; 
  $error['vorname']="Bitte Vorname eingeben!<br>"; 

}

Jetzt kannst Du nach deinem Funktionsaufruf den Wert von $allesok Abfragen

Bsp:
PHP:
if(isset($_POST['ueberpruefung']))   
  {    
    $allesok = true;  
    
   include('.\pruefung.php');  
  check($allesok,$error);  
} 

if($allesok){
 echo "Alle Ihre Daten wurden aufgenommen."; 
}
else{
 foreach(array_keys($error) as $k){
  echo $error[$k].'<br />';
 }
}
 
Zurück