Neue Seite mit PHP

strolch_007

Mitglied
Hallo,

ich habe zwei Seiten, nämlich Registrierung1 und Registrierung 2.
Registrierung1 ist wie folgt aufgebaut:

<?php Script
mit allen Fehlerprüfungen und Ausgaben für das Formular
?>

<!DOCTYPE
....
>
<body>

<form action="<?php $_SERVER['PHP_SELF']; ?>"...>

</body>
</html>

Sämtlche Fehlerprüfungen und Fehlermeldungen finden also im Registrierungsformular1 statt. Wie bewege ich nun PHP dazu automatisch auf Registrierungsformular2 zu springen wenn alle Eingaben korrekt sind?
Registrierungsformular2 soll alle Daten in die Datenbank schreiben und eine entsprechende Positivmeldung ausgeben und ist eine fertig programmierte Seite in php.

Gruß
Michael
PS: Bin neu hier und hoffe das dieses Thema nicht schon tausendmal beantwortet wurde. Hab nichts dazu gefunden.
 
PHP:
if(keineFehler())
{
  // leite auf Seite 2 weiter
}

Die Funktion für die Weiterleitung heißt [phpf]header[/phpf].

Du müsstest nur die $_POST Daten weitergeben, z. B. über eine Session.
 
hallo,

danke für die schnelle Antwort. Hat sofort funktioniert! War ja eigentlich gar nicht so schwer:-) Aber wenn ich so drüber nachdenke ist es doch sinnvoller bei

PHP:
if(keineFehler())
{
  // leite auf Seite 2 weiter
}

auch noch in die Datenbank einzutragen. - Und dann nur den Positivtextext auf einer neuen Seite ausgeben. Ist wohl Geschmackssache. Sorry hab jetzt nur laut gedacht:-)

Gibts bei header() irgendwelche Sicherheitsbedenken bzw -Lücken oder ist das problemlos anzuwenden? Lege nämlich auf Sicherheit großen Wert!
 
Bei dem Befehl [phpf]header[/phpf] erwartet laut RFC eine komplette URL, d. h. inkl. http und Domain. Es funktioniert auch ohne, aber da sollte man sich dran halten.

Nein, spontan fallen mir bei einer Weiterleitung per Header keine Gefahren ein, solange du das Ziel nicht aus Elementen der URL oder Formulardaten zusammenbaust.

Und ja, die Weiterleitung auf eine Erfolgsseite ist eleganter, da du so die Funktionsweisen eher von einander abkapseln kannst, was zu mehr Übersicht führt.
Die Erfolgsseite könnte dann sogar wiederverwendet werden.
 
hallo,

vielen Dank für die Antwort. Wollte mich auch nur mal vergewissern obs da nicht irgendwelche Sicherheitsbedenken gibt, die mir nicht einfallen. Nein und ich mache da keine "Spielchen". Halte mich strikt an die Syntax bzw. Erwartungen von Header damit da keine Fehler entstehen können.
Hab das mit der Erfolgsseite jetzt auch so gebaut. Ist wirklich viel besser.

Was mich bei dem Ganzen wurmt und ich zu keiner Lösung komme ist eigentlich wohl nichts bedrohliches aber ich würde es am liebsten eliminieren, weil ich gerne fehlerfrei arbeiten würde.

Man muß sich jetzt (wie im ersten Posting geschrieben) nur wieder den Aufbau meiner Refistrierung1 vor Augen führen.
Rufe ich nun im PHP über dem Doctype


PHP:
<?php
error_reporting(E_ALL); 

    			 $fehlermeldung = array();

?>

auf so ist in diesem PHP (ich nenne es jetzt mal Hauptphp) keine Fehlermeldung feststellbar. Soweit alles gut Aber
Im body findet sich ein Formular
HTML:
<form action="<?php $_SERVER['PHP_SELF'];?>" method="post" name="regformular">
  <input name="vorname" id="vorname" type="text" <?php if($fehlermeldung['vorname'] != ''){ echo ' class="error"';} ?> class="reg_form" maxlength="255" value="<?PHP echo $inhalt['vorname']; ?>" />
</form>

Wie man sieht habe ich $fehlermeldung als array im Hauptphp definiert. Ich bekomme aber für alle inputs im Formular "Undefined variable: fehlermeldung", also wird $fehlermeldung als undefinierte Variable gekennzeichnet. Wie kann ich diesen Fehlerhinweis korrigieren. bzw. die Variablen als definiert hin bekommen? require_once ist wohl eher der falsche Ansatz. Ich hoffe man kann mein Anliegen nachvollziehen.
 
Zuletzt bearbeitet:
Ja, der Array ist definiert, aber nicht das Feld was du versuchst aufzurufen.

Benutze dafür [phpf]empty[/phpf].
 
@strolch

Ein Vorschlag zum Aufbau des ganzen in nur EINER Seite:
PHP:
<?php
    
    if(count($_POST) > 0){

        if(!preg_match('...',$_POST['feld'])) $_fehler['feld'] = '....';

        ... weitere Fehlerkontrollen ...

            if(!isset($_fehler)){

                ...Eintrag in DB

?>
HTML von Erfolgsseite
<?php

                die;
            }
        }
    }
?>
HTML Formular
....
<input type="text" name="feld" value="<?php if(isset($_POST['feld'])) echo htmlspecialchars($_POST['feld']); ?>">
<?php if(isset($_fehler['feld'])) echo 'Fehler: '.$_fehler['feld']; ?>
....
 
Zuletzt bearbeitet:
hallo,

dank für die wieder mal sehr schnellen Antworten. Das mit dem isset funktioniert wunderbar. Allerdings nur bei input Feldern.
empty() war mir vorher schon geläufig und ich hab es auch angewendet (bei >select.....<<optin>. Danke trotzdem! empty() funktionert allerdings nur, wenn ich Variablen abfrage. Ich habe aber auch z.B. ein array definiert. Da funktioniert das mit empty() nicht.
Kurz damit man nachvollziehen kann warum ich das alles so "umständlich mache.

Man stelle sich einfach ein Formular vor und fülle dieses jetzt in Gedanken aus. Aus igrend welchen Gründen gibt man etwas wider der php Prüfung ein und erhält einen Fehlerhinweis. Mein Script ist nun so aufgebaut das es sich zum einen die ausgefüllten Felder, drop-downs und angeklickten Checkboxen "merkt". Soll heißen man fängt nicht wieder von vorne an wegen dem einen dummen Fehler das ganze Formular auszufüllen. Zum anderen werden alle fehlerhaften inputs und drop-down rot umrandet. Da es beim Internet Explorer keine Umrandung für drop-downs gibt sind die Fehlerfelder rot eingefärbt.. Wie gesagt das Formular funktioniert einwandfrei. Es geht mir nur noch um die nicht definierten Felder (inputs sind mit eurer Hilfe dankenswerter Weise gelöst), konkret jetzt um <option> und Checkboxen (Abfrage is_array und in_array)
So sieht das dann bis jetzt aus:

HTML:
   <label class="registerform" for="anrede">Anrede:<span class='font_red_reg'> *</span></label> 

<!-- Einfärbung bzw. Umrahmung per PHP  -->

  		  <select name='anrede' id='anrede' <?php if ($fehlermeldung['anrede'] != ''){ echo ' class="error_drop"';} ?> class='register_drop_short_01'>
      
<!-- empty in option stelt falsch dar   -  empty() = Wertabfrage  -->

    <option value="" <?PHP if (empty($_POST'anrede'])) echo 'selected'; ?> selected="selected">-----</option>
    <option value="Frau" <?php if (empty($_POST['anrede']) == 'Frau') echo 'selected'; ?>>Frau</option>
	<option value="Mann" <?php if (empty($_POST['anrede']) == 'Mann') echo 'selected'; ?>>Herr</option>
	

  </select>

emty() in <option> gibt immer "Mann" als Vorgabewert aus (immer den letzten Wert aus Option). Ohne emty funktioniert das wunderbar. isset() hilft hier auch nicht wirklich weiter.

HTML:
      <label for="newsletter"></label> 

				<input type='checkbox' id="newsletter" name='newsletter[]' value="Newsletter" <?php echo is_array($_POST['newsletter']) && in_array('Newsletter', $_POST['newsletter']) ?  'checked="checked"' : '';?> />

Mit obigen hab ich, naja es ist ja auch schon ca. 2.30 Uhr, etwas den Durchblick verloren:-)
Alles auf einer Seite darzustellen ist übrigens auch ein interessanter Vorschlag!
 
<option value="" <?PHP if (empty($_POST'anrede'])) echo 'selected'; ?> selected="selected">-----</option>

Da ist kein "selected" nowendig, da die erste Option so oder so gewählt wird, falls keine andere mit "selected" markiert ist.

<select name="select" ....>
<option value="..."></option>
<option value="..."<?php if(isset($_POST['select']) AND $_POST['select'] == '...') echo ' selected'; ?>></option>
</select>

<input type="checkbox" name="check" value="..."<?php if(isset($_POST['check'])) echo ' checked'; ?>>

Keine Ahnung, was Du hier mit is_array() und in_array() willst. Um zu überprüfen, ob eine Variable gesetzt wurde, gibt es isset() und um zu überprüfen, ob die Variable auch gefüllt ist, gibt es empty() oder ein simpler Vergleich (... == '').
 
Zuletzt bearbeitet:
Hallo,

scheint ja doch nicht ganz soi einfach zu sein wie ich anfangs dachte:-)
Es geht darum das die angeklickte Option auch beim nochmaligen drücken des Buttons Registrieren erhalten bleibt. Ich habe Frau angeklickt, drücke Registrieren und das Frau bleibt bestehen. Ich drücke Mann und dann Registrieren. Nun bleibt Mann bestehen. Egal wie oft ich Registrieren drücke. Die gemachte Eingabe Frau, Mann oder was auch immer bleibt erhalten!

Der einzige Code-Schnipsel der mir das gewünschte Ergebnis liefert ist

HTML:
<option value="Frau"<?php if($inhalt['select'] AND $inhalt['select'] == 'Frau') echo 'selected'; ?>>Frau</option>
<option value="Mann"<?php if($inhalt['select'] AND $inhalt['select'] == 'Mann') echo 'selected'; ?>>Mann</option>
<option value="Kind"<?php if(isset($inhalt['select']) AND $inhalt['select'] == 'Kind') echo 'selected'; ?>>Kind</option>

Allerdings mit dem Problem der undefinierten Variablen! - Und darum gehts ja eigentlich :-)

Bei folgendem

HTML:
    <option value="Frau" <?php if(isset($inhalt['anrede']) == 'Frau') echo 'selected'; ?>>Frau</option>
	<option value="Mann" <?php if(isset($inhalt['anrede']) == 'Mann') echo 'selected'; ?>>Mann</option>
	<option value="Kind" <?php if(isset($inhalt['anrede']) == 'Kind') echo 'selected'; ?>>Paar</option>

wird, egal was ich anklicke, immer Kind gemerkt! - Sprich das letzte Optionsfeld
Mit isset() ist zwar das Problem mit den undefinierten Variablen gelöst, dafür ist die "Merkfunktiion" dahin.

Bei dem Vorschlag

HTML:
<option value="..."<?php if(isset($_POST['select']) AND $_POST['select'] == '...') echo ' selected'; ?>></option>

wird beim drücken von Registrieren nichts gemerkt. Es erscheint immer "-----" (Vorgabewert aus selectet....)

Ich hab lange rum gebastelt und probiert. Aber bin scheinbar zu doof des zu lösen. Ich denke trotzdem das es relativ einfach ist, wenn man weiß wie:-)
- Und klar das mit dem php in select war mal wieder der totale Übereifer:-) Habs raus genommen, auch wenn doppelt besser hält:-)
das mit is_array ´kommt dann noch. Finds grad erst mal spannend wie das mit den Optionsfeldern hier weiter geht.
 
Zurück