2012-03-29 28 views
2
zu arbeiten

Ich versuche Werte in das Array (in account.html) mit diesem Formular zuzuordnen:

<form name="register" action="register.php" method="post"> 
    <label for="username">Username:</label> <input type="text" name="username"    class="textb" maxlength="30"/><br /><br> 
    Password : <input type="password" name="password1" class="textb"/><br /><br> 
    Re-Type Password: <input type="password" name="password2" class="textb"/><br /><br> 

    <br> 
    <input type="submit" name="Create Account" value="Create Account" class="texta" /> 
</form> 

Aber wenn ich versuche, sie hier zu nennen (im Register. php):

$username = $_POST["username"]; 
$password1 = $_POST["password1"]; 
$password2 = $_POST["password2"]; 

bekomme ich nur:

Notice: Undefined index: username in C:\xampp\htdocs\register.php on line 3 

Notice: Undefined index: password1 in C:\xampp\htdocs\register.php on line 4 

Notice: Undefined index: password2 in C:\xampp\htdocs\register.php on line 5 

Kann jemand etwas Licht, warum Das Formular wird die Variablen nicht veröffentlichen?

ist die vollständige register.php Datei:

<?php 

$username = $_POST["username"]; 
$password1 = $_POST["password1"]; 
$password2 = $_POST["password2"]; 

if($password1 != $password2) 
header("location:register.php"); 

if (strlen($username) > 30) 
header("location:register.php"); 
$dbhost = 'localhost'; 
$dbname = 'test'; 
$dbuser = 'root'; 
$dbpass = ''; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
mysql_select_db($dbname, $conn); 
$username = mysql_real_escape_string($username); 
$query = "INSERT INTO members (username, password) 
    VALUES ('$username', '$password1');"; 
mysql_query($query); 
mysql_close(); 
header('Location: index.php'); 

?> 

Hier wird die volle account.html Datei:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Video for Education Log In</title> 
<link rel="stylesheet" type="text/css" href="style1.css" /> 
</head> 

<body> 
<div id="wrapper"> 
<div id="header"> 
<div id="logo"> 
    videoedu.edu </div> 
<div id="menu"> 
    <ul> 
     <li><a href="index.html" class="menua">Home</a></li> 
     <li><a href="about.html" class="menua">About Us</a></li> 
    </ul> 
</div> 
</div> 
<br><br><br><br> 
<div id="page"> 




<div id="content"> 
<h2>Create an Account. It's free and lets you share and watch streamed educational   video content.</h2> 
<h3>Simply fill out the form below.....</h3> 
<div class= "form"> 
<form name="register" action="register.php" method="post"> 
    <label for="username">Username:</label> <input type="text" name="username"  class="textb" maxlength="30"/><br /><br> 
    Password : <input type="password" name="password1" class="textb"/><br /> <br> 
    Re-Type Password: <input type="password" name="password2" class="textb"/>  <br /><br>  
    <br> 
    <input type="submit" name="Create Account" value="Create Account"    class="texta" /> 
</form> 
</div> 
</div> 
</div> 
</div> 
</body> 
</html> 
+3

Gibt es irgendetwas in der Post überhaupt vorhanden? Was sind die Ergebnisse, wenn Sie var_dump ($ _ POST) ausführen? von dem Code, den Sie gepostet haben, sollte dies gut funktionieren. – GSto

+0

greifen Sie auf Ihren folgenden Code zu: $ username = $ _POST ["username"]; $ passwort1 = $ _POST ["passwort1"]; $ passwort2 = $ _POST ["passwort2"]; 'in' register.php' Datei? –

+0

Funktioniert es, $ _POST zu $ ​​_GET und method = "post" zu method = "get" zu ändern? –

Antwort

0

Hmm ... so ist es leer auf einreichen? Versuchen Sie, diese Zugabe zu Anfang Ihrer PHP-Datei:

if(empty($_SERVER['CONTENT_TYPE'])) 
{ 
    $_SERVER['CONTENT_TYPE'] = "application/x-www-form-urlencoded"; 
} 

Okay, jetzt überprüfen Sie Ihre php.ini (\ xampp \ php \ php.ini):

post_max_size = 8M 
variables_order = "EGPCS" 

Sie müssen diese beiden Regeln in Dort. Wenn nicht, füge sie hinzu und starte xampp neu.

+0

Dank Matthew. Variablen_order war nicht in meiner php.ini-Datei, also habe ich es eingefügt und Neustart xampp Ich habe diesen Code-Block ganz oben in der register.php hinzugefügt Noch keine Änderung im Verhalten ... –

+0

Können Sie Ihre gesamte PHP-Controller-Datei (die mit dem $ _POST)? –

+0

Gehen Sie auch, um sicherzustellen, dass Ihre anderen $ _POST-Formulare immer noch funktionieren, wie Sie sagten, dass es anderswo funktioniert. –

0

Dies könnte ein Problem sein, das durch eine Änderung in der php.ini-Datei verursacht wird. Wenn Sie diese Zeile in der Datei haben: post_max_size = "10MB" (sollte 8M sein), könnte das das Problem sein.

Einige PHP-Versionen können 10MB als 0 interpretieren, wodurch das Array leer wird.

Mehr zu diesem Thema:

+0

Ich habe beide Artikel studiert und bin etwas verwirrt über $ data = file_get_contents ('php: // input'); Wenn ich versuche, $ Daten zurückzugeben, bekomme ich nichts zurück, es erscheint einfach nicht in den Mitteilungen. –

+0

Wenn Sie das Beispiel aus dem zweiten Artikel testen, sagt es immer noch "array (0)", wenn Sie das Formular absenden? – afaf12

+0

Und hat die Datei php.ini diese Zeile post_max_size = 10MB? Oder ist es 8M? – afaf12

3

habe ich versucht, den Code und es funktioniert.

Ihr Problem ist möglicherweise hier: (! Password1 = password2)

header("location:register.php"); 

Wenn ich das Formular korrekt (Benutzername < 30 und password1 == password2) legt die POST ist in Ordnung, aber, aber wenn ich mit einreichen Der Header wird auf die gleiche Seite (register.php) umgeleitet und der POST wird leer sein.

Versuchen Sie, eine

var_dump($_POST); 
die(); 

hier tun

$username = $_POST["username"]; 
$password1 = $_POST["password1"]; 
$password2 = $_POST["password2"]; 
var_dump($_POST); 
die(); 

Sie werden sehen, dass es funktioniert.

Sie sollten auch weitere Validierungen hinzufügen, bevor Sie eine Verbindung zur DB herstellen.Sie sollten den $ _POST für Benutzername, Passwort1 und Passwort2 überprüfen und Sie sollten alles entkommen, um einige häufige Angriffe wie SQL Injection und XSS (Cross Site Scripting) zu vermeiden.

Hoffe, das hilft