Variable wird nicht übergeben!

andy_tz

Mitglied
Hallo,

ich verzweifel irgendwie an einem "kleinen" Problem. Das Formular (register.php) wird an die Datei process_register.php übergeben und ausgewertet. Bei einer Fehlermeldung soll diese wieder in der register.php ausgegeben werden.

Es werden keinerlei Fehlermeldungen angezeigt!

register.php
PHP:
<?php

if (isset($_GET['error'])) {
	echo '<div class="alert alert-error">'.$_GET['error'].'</div>';
}
	
?>

process_register.php
PHP:
<?php

include 'db_connect.php';
include 'functions.php';

sec_session_start();

if(isset($_POST['username'], $_POST['email'], $_POST['p'], $_POST['password2'])) {
	
	$username = $_POST['username'];
	$email = $_POST['email'];
	$password = $_POST['p'];
	$password2 = $_POST['password2'];
	
	$error = array();
	
	// Validierung der Benutzereingaben
	if(empty($username)) {
		$error[] = '<p>Bitte geben Sie einen Benutzernamen ein!</p>';
	}
	
	if(!get_magic_quotes_gpc()) {
 		$username = addslashes($username);
 	}
	
 	$query = $mysqli->query("SELECT username FROM members WHERE username = '$username'");
 	$check = $query->num_rows;

	if($check != 0) {
 		$error[] = '<p>Sorry, der Benutzername '.$username.' ist bereits vergeben!</p><br>';
	}
	
	if(empty($email)) {
		$error[] = '<p>Bitte geben Sie eine E-Mail Adresse ein!</p>';
	}
	
	if($email || !preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $email)) {
		$error[] = '<p>Das ist keine gültige E-Mail Adresse!</p><br>';
	}
	
	if($password != $password2) {
 		$error[] = '<p>Die eingebenen Passwörter stimmen nicht überein!</p><br>';
 	}
	
	if(count($error) == 0) {
		echo 'Registrierung erfolgreich!';
	
	} else {

		header('Location: ./register.php?error');

	}
}

?>

Kann mir jemand weiterhelfen und erklären warum die Variable nicht übergeben wird?

Vielen Dank
Andy
 
Du solltest beim header() die Fehlermeldung auch mitgeben
Da es ein Array ist, musst du ihn noch in ein String bringen.
Ungetestet: Die get-Übergabe per JSON
PHP:
header('Location: ./register.php?error=' .json_encode($error, true));
PHP:
if (isset($_GET['error'])) { 
    $errors = json_decode($_GET['error'], true);
}
 
Soweit ich weiß kann man ein Array nicht als GET-Parameter übergeben.

Entweder musst du jeden Fehler einzeln anhängen (finde ich nicht so gut) oder du arbeitest mit einer $_SESSION-Variablen.

process_register.php:
PHP:
<?php
session_start();

if (empty($email)) {
    $_SESSION['error'][] = '<p>Bitte geben Sie eine E-Mail Adresse ein!</p>';
}
// und so weiter
?>

register.php
PHP:
<?php
session_start();

if (isset($_SESSION['error'])) {
    // Fehler ausgeben
}
?>
 
Hallo,

danke für die schnelle Antworten, wie muss die $_SESSION-Variablen in der register.php / process_register.php genau weitergeben bzw. ausgeben?

Habe mich für die Session-Variante entschieden, läuft aber gar nicht.

Egal welche Variaten ich wähle, habe jetzt mehrere ausprobiert******
 
Na so wie ich es im Grunde oben schon geschrieben habe.

In der process_register.php:

PHP:
<?php
session_start();

// Validierung der Benutzereingaben
if(empty($username)) {
// bisher
//	$error[] = '<p>Bitte geben Sie einen Benutzernamen ein!</p>';

// jetzt mit Session
	$_SESSION['error'][]  = '<p>Bitte geben Sie einen Benutzernamen ein!</p>';
}

if($check != 0) {
// bisher
//	$error[] = '<p>Sorry, der Benutzername '.$username.' ist bereits vergeben!</p>';

// jetzt mit Session
	$_SESSION['error'][] = '<p>Sorry, der Benutzername '.$username.' ist bereits vergeben!</p>';
}

if(empty($email)) {
// bisher
//	$error[] = '<p>Bitte geben Sie eine E-Mail Adresse ein!</p>';

// jetzt mit Session
	$_SESSION['error'][] = '<p>Bitte geben Sie eine E-Mail Adresse ein!</p>';
}

// usw.
?>

In der register.php:

PHP:
session_start();

// an der entsprechenden Stelle
if (isset($_SESSION['error'])) {
	for ($errors = 0; $errors < count($_SESSION['error']); $errors++) {
		echo $_SESSION['error'][$errors];
	}
	unset($_SESSION['error']);
}

Ansonsten sag uns einfach mal genauer was du versucht hast, was genau nicht klappt und welche Fehlermeldung ausgegeben wird.
 
Hallo tombe,

nochmals Danke für deine Antwort. Ich werde es später versuchen... Noch die Frage, bleibt die Anweisung in der process_register.php weiterhin so bestehen?

PHP:
if(count($error) == 0) { 
        echo 'Registrierung erfolgreich!'; 
     
} else { 

        header('Location: ./register.php?error'); 

}

Gruß Andy
 
Nein.
Die Variable $error wird, wenn du es so machst, komplett durch $_SESSION['error'] ersetzt und die Prüfung müsste dann so aussehen:

PHP:
if(!isset($_SESSION['error'])) {
        echo 'Registrierung erfolgreich!';
} else { 
        header('Location: ./register.php');
}
 
Soweit ich weiß kann man ein Array nicht als GET-Parameter übergeben.


Du kannst jeden Datentyp als String darstellen. Du musst diesen Serialisieren und dann wieder zurückführen. (Stichwort: JSON [Yaslow])
Ist aber unpraktikabel, da bestimmte Grenzen für URLs gibt (früher irgendwie 255 Zeichen oä, keine Ahnung wie es im Moment ist).

Bei der Ausgabe der Sessionfehlermeldung sollte man diese danach löschen, sonst werden die jedes mal ausgegeben.
 
Hallo,

ich habe mich entschieden die Validierung der Benutzereingaben mit jquery zu realisieren. Die Validierung funktioniert auch ohne Probleme.

Ich frage mich jetzt nur, wie ich die process_register.php bearbeiten muss, sodass zwar eine Auswertung und die Registrierung ohne eine Fehlermeldung ausgegebén wird!

Gruß
Andy
 
Zurück