Formular prüfen innerhalb einer Funktion

strukturart

Erfahrenes Mitglied
Hallo,

mit folgendem Script prüfe ich ob Formularfelder nicht leer sind,
wenn alles okay ist soll der User auf eine Seite umgeleitet werden.

Das das mit der Umleitung klappt(Header) muss die Prüfung ganz ob stehen
<?php
.
.
.
?>
<Html>
<Head>
.
.
-
Jetzt habe die Prüfung in eine Funktion gepackt um sie später innerhalb der Html auszuführen,
leider klappt das nun nicht mehr mit der Umleitung.
Wie mach ich das denn richtig?

PHP:
<?php
function check(){
 if(isset($_POST['submit'])){
 	if (empty($first_name)){
	$text = "Bitte Vorname eingeben.";
echo $text;
}
else if (empty($last_name)){
	$text = "Bitte Name eingeben";
echo $text;

}}
else{header('Location: http://www.test.ch/');
}
 	}
?>

HTML:
<input type="submit" name="submit"  formtarget="_shelf" value="reservieren" />
</form>
<?php
check();
?>
 
Hi,

du kannst nicht [phpf]header[/phpf] aufrufen, wenn du bereits Daten zum Browser geschickt hast (also dein HTML).

Der einfachste Weg wäre jetzt, wenn du ganz oben [phpf]ob_start[/phpf] einfügst.
Ansonsten wäre es aber eleganter, wenn du die Funktion schon am Anfang des Skriptes aufrufst, die Variable $text aber nicht in der Funktion ausgibst, sondern im HTML per <?php echo $errorMsg; ?>.
 
So wird aber sofort die Verweis Adresse aufgerufen.

PHP:
<?php
	ob_start(); 
function check(){
 if(isset($_POST['submit'])){
 	if (empty($first_name)){
	$text = "Bitte Vorname eingeben.";
echo $text;
}
else if (empty($last_name)){
	$text = "Bitte Name eingeben";
echo $text;

}}
else{header('Location: http://www.test.ch/');
}
 	}
?>
 
Du rufst die Funktion check jedesmal beim Laden der Seite auf

HTML:
<?php
check();
?>

Innerhalb der Funktion gelangst du zwingenderweise zum else-Zweig mit header(), weil die entsprechenden Variablen natürlich noch leer oder gar nicht gesetzt sind.

Du müsstest die Funktion erst nach Submit aufrufen:
PHP:
if(isset($_POST['submit'])){
  check();
}

function check(){
  $error = false;
  $text = '';
  if (empty($first_name)){
    $text .= "Bitte Vorname eingeben.";
    $error = true;
  }
  if (empty($last_name)){
    $text .= "Bitte Name eingeben";
    $error = true;
  }
  if($error) echo $text;
  else header('Location: http://www.test.ch/');
}

Die restlichen Änderungen sind nur als Vorschlag zu sehen.
 
hmh hackt immer noch wo?

hab das jetzt so:

HTML:
<?php
ob_start();
function check(){
 $error = false;
 $text = '';
 if (empty($first_name)){
   $text .= "Bitte Vorname eingeben.";
   $error = true;
 }
 if (empty($last_name)){
   $text .= "Bitte Name eingeben";
   $error = true;
 }
 if($error) echo $text;
 else header('Location: http://www.test.ch/');
}
?>

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
 <meta charset="utf-8" />
</head>
<body>

<form   method="post">
<input type="text" name="first_name" class="feld" required="required" placeholder="Vorname"/><br />
<input type="text" name="last_name" class="feld"  required="required" placeholder="Nachname"/><br /> 
<input type="email" name="email" class="feld"  required="required" placeholder="Mailadresse"/><br /> 
<input type="tel"  name="tel" class="feld" placeholder="Telefonnummer"/><br />
<input type="radio" required="required" id="cb" name="cb" value="Vegi"> Vegetarisch <input type="radio" required="required" id="cb" name="cb" value="Fleisch"> Fleisch <br />
<input type="submit" name="submit"  formtarget="_shelf" value="reservieren" />
</form>
<br>
<?php
 if(isset($_POST['submit'])){
check();
}
?>
</body>
</html>

Die Ziel Url wird nicht aufgerufen es wird nur die Seite nochmals in einem neuen Tab geöffnet.
 
Die Variablen $first_name und $last_name sind auch niemals definiert*.
Folgendes müsste klappen:
PHP:
function check(){
 $error = false;
 $text = '';
 if (empty($_POST['first_name'])){
   $text .= "Bitte Vorname eingeben.";
   $error = true;
 }
 if (empty($_POST['last_name'])){
   $text .= "Bitte Name eingeben";
   $error = true;
 }
 if($error) echo $text;
 else header('Location: http://www.test.ch/');
}

*Außer du nutzt eine alte PHP-Version und hast die Option register_globals aktiviert.
 
Also das mit der Prüfung der Felder funktioniert schon,
jedoch bleibt es wieder beim Header stecken es wird
"Bitte Namen angeben" ausgegeben.

Hab versucht es ganz einfach zu halten:

PHP:
<?php

function check(){

if (empty($_POST['first_name'])){
 echo "Bitte Vorname eingeben.";
 
}
else if (empty($_POST['$last_name'])){
  echo "Bitte Name eingeben";
 
}

else {echo "warum nur.";}
}
?>

Aber bis zu "warum nur" stösst das script nicht vor,
verstehe nicht ganz warum das nicht funktioniert****
 
PHP:
$_POST['$last_name']

Nimm mal das zweite $ da weg...
Und für das weitere Testen könntest du

PHP:
ini_set('display_errors', true);

error_reporting(E_ALL);

am Anfang des Scripts setzen, das sollte dich dann auf solche Fehler aufmerksam machen.
 
Zuletzt bearbeitet:
Dank das mit Weiterleitung funktioniert jetzt,
jedoch kommen "drüben" keine Daten mehr an.
Das liegt vermutlich an dem ob_start() so wie ich es
verstanden haben kann man die gepufferten Daten mit
ob_end_flush() senden.

Wo bring ich den die Funktion an besten an.
Alles vor den Header Aufruf verursacht einen Fehler und danach
zeigt keine Wirkung.


PHP:
<?php
ob_start();
ini_set('display_errors', true);
error_reporting(E_ALL); 
function check(){

if (empty($_POST['first_name'])){
 echo "Bitte Vorname eingeben."; 
}
else if (empty($_POST['last_name'])){
echo "Bitte Name eingeben";
}
else {
	header('Location: http://www.cantinemobile.ch/reservierung.php/');
	ob_end_flush();
}
}
?>
 
Verschiebe [phpf]ob_end_flush[/phpf] nach ganz unten im Skript.


PS: Das mit dem unnötigen Dollarzeichen war ich, Sorry ;)
 
Zurück