Problem mit _POST[] Variablen

Nerolein

Mitglied
Hallo,

ich habe das Problem, das einige POST Variablen immer leer sind, obwohl er mit Inhalt "aufgefüllt" wurde. Dieses Problem besteht komischerweise auch nur auf einem von meinem Servern.

Beispielcode:

formular.php
Code:
<form action="index.php?module=register_save" method="post">
<div id="table_head"><br><b>Registrierung - Accountinformation</b></div>
<div id="table_content"><br><table width="80%">
	<tr>
		<td>Benutzername</td>
		<td><input class="<?php echo $errorClass['user']; ?>" value="<?php echo $_POST['user']; ?>" type=text name=user></td>
	</tr>
	<tr>
		<td>E-Mail</td>
		<td><input class="<?php echo $errorClass['mail']; ?>" value="<?php echo $_POST['mail']; ?>" type=text name=mail></td>
	</tr>
	<tr>
		<td>E-Mail (Wdh)</td>
		<td><input class="<?php echo $errorClass['mail1']; ?>" value="<?php echo $_POST['mail1']; ?>" type=text name=mail1></td>
	</tr>
	<tr>
		<td>Passwort</td>
		<td><input class="<?php echo $errorClass['passwd']; ?>" value="<?php echo $_POST['passwd']; ?>" type=password name=passwd></td>
	</tr>
	<tr>
		<td>Passwort (Wdh)</td>
		<td><input class="<?php echo $errorClass['passwd1']; ?>" value="<?php echo $_POST['passwd1']; ?>" type=password name=passwd1></td>
	</tr>
</table></div>
<div id="table_footer"></div>

register_save.php
PHP:
<?php

print_r($_POST);

$errorFields = array('user',
					 'mail',
					 'mail1',
					 'passwd',
					 'passwd1');

$error = FALSE;					 
foreach($errorFields as $key => $value) {
	if(empty($_POST[$errorFields[$key]])) {
		$error = TRUE;
		$errorClass[$value] = 'errorField';
		$errorMessage = 'ist leer';
	}
}

if($error == TRUE) {

	include("html/regerror.html");
	include("html/registrieren.html");
} else {

	if(md5(strtoupper($_POST['captcha'])) == $_SESSION['captcha']) {
	
	if(!empty($_POST['user']) && !empty($_POST['mail']) && !empty($_POST['mail1']) && !empty($_POST['passwd']) && !empty($_POST['passwd1'])) {
	
		if($_POST['passwd'] == $_POST['passwd1'] || $_POST['mail'] == $_POST['mail1']) {

Das heißt, mein Problem liegt darin, das jede 2te Variable leer ist.
Das Problem hatte ich am Anfang schoneinmal.
Ich habe einfach "<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">" aus meiner index.php gelöscht und es ging. Aber nun fängt es wieder an das jede 2te Variable leer bleibt.
An was könnte es liegen?
 
ich vermute, dass die beiden felder mail1 und passwd1 nicht ankommen, weil der browser da irgendwelche probleme mit den ziffern hat.
Könnte das Problem darin liegen, dass deine <input name> attribute ohne anführungszeichen sind?

versuch mal, die zeile
HTML:
<input class="..." type=text name=mail1>
durch
HTML:
<input class="..." type="text" name="mail1">
zu ersetzen; entsprechend beim feld passwd1

keine ahnung, obs daran liegt, aber ich würds mal probieren.
 
Hallo,
so wie ich deinen Code verstehe, fragst Du bei

Code:
 $errorClass[$value] = 'errorField';

Auf den Wert ab den der Besucher in dein Formular eingibt

Versuch es mal mit
Code:
 $errorClass[$key] = 'errorField';

Um auf deine Feldnamen abzufaragen
 
Ganz grundsätzlich verwendet man User-input nicht direkt zur Weiterverarbeitung, sowas muss man auf Inhalt prüfen, nicht nur ob leer.
Mal angenommen ein User tippt als Usernamen

"MeinName"

ein.
Ohne weitere Prüfung landet dann im HTML vom Formular:

<input ...... value=""MainName"">

oder auch value="" denn der Rest ist ausserhalb der Anführungszeichen.

Darüber hinaus würde ich sehr aufpassen, mit Variablennamen die möglicherweise vom System verwendet werden, da kommen die irrsinnigsten Fehler bei raus, insbesondere wenn man sehr nachlässig mit Anführungszeichen im Code ist.
$key, $value, $user, oder Feldnamen wie name=user sind alles so Kandidaten, wo ich schon auf Verdacht lieber was anderes verwende, im Zweifelsfalle einfach My voranstellen oder Gross-/Kleinschreibung mischen.
$MyKey oder $_POST[''MyUser'] gibt es sicher nicht im System.
 
Hallo,

es lag tatsächlich an dem fehlendem "". Man sollte nicht so schnell über seine Scripte drüber schauen. =)

Code:
 $errorClass[$value] = 'errorField';
Erfüllt in dem Sinne seine Zweck so wie es soll. Die Felder werden als Leer angezeigt wenn sie es tatsächlich auch sind, weil im den Fall $key als $value umgeändert wird durch die foreach.

Und ja natürlich ist es nicht schlau die datensätze einfach ohne Überprüfung in die Datenbank zu speichern, allein wegen schädliche angriffe.
Normal verwende ich

Code:
mysql_real_escape_string

um Buchstaben, Zeichensätze oder sonstiges rauszubekommen, was dort nichts zu suchen hat.
Dies habe ich nur noch nicht umgesetzt gehabt, weil ich den andern Fehler im Script nicht gefunden hatte.

Da sieht man mal wieder wie aus einer Mücke ein Elephant wird =)

Danke euch!
 
Zurück