2012-03-29 6 views
2

Я пытаюсь присвоить значение массива с помощью этой формы (в account.html):

<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> 

Но когда я пытаюсь вызвать их здесь (в регистре. PHP):

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

Я просто:

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 

Может кто-нибудь пролить некоторый свет на то, почему форма не размещая переменные?

Вот полный register.php файл:

<?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'); 

?> 

Вот полный account.html файл:

<!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

Есть ли что-нибудь присутствующее в сообщении вообще? какие результаты вы запускаете var_dump ($ _ POST)? из кода, который вы опубликовали, это должно работать нормально. – GSto

+0

Вы получаете доступ к этому коду '$ username = $ _POST [" username "]; $ password1 = $ _POST ["password1"]; $ password2 = $ _POST ["password2"]; 'in' register.php' файл? –

+0

Работает ли это с изменением $ _POST на $ _GET и method = "post" на метод = "get"? –

ответ

0

Хм ... так пусто на представить? Попробуйте добавить это в верхней части файла PHP:

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

Хорошо, теперь проверить ваш php.ini (\ XAMPP \ PHP \ php.ini):

post_max_size = 8M 
variables_order = "EGPCS" 

Вы нужны эти два правила там. Если это не так, добавьте их и перезапустите xampp.

+0

Thanks Matthew. variables_order не был в моем файле php.ini, поэтому я вставил его и перезапущен XAMPP. Я добавил, что блок кода в самом верху register.php. Еще нет изменений в поведении ... –

+0

Можете ли вы опубликовать весь файл контроллера PHP (один прием $ _POST)? –

+0

Также пройдите тест, чтобы убедиться, что ваши другие формы $ _POST все еще работают, как вы сказали, он работает в другом месте. –

0

Это может быть проблема, вызванная изменением файла php.ini. Если у вас есть эта строка в файле: post_max_size = "10MB" (должно быть 8M), это может быть проблемой.

Некоторые версии PHP могут интерпретировать 10MB как 0, что делает массив пустым.

Подробнее об этой проблеме:

+0

Я изучил обе статьи, и я немного смущен насчет $ data = file_get_contents ('php: // input'); Когда я пытаюсь выполнить echo $ data, я ничего не получаю, он просто не отображается в уведомлениях. –

+0

Если вы протестируете пример из второй статьи, все равно скажите «array (0)», когда вы отправляете форму? – afaf12

+0

И имеет ли файл php.ini эту строку post_max_size = 10MB? Или это 8M? – afaf12

3

Я попробовал ваш код и он работает.

Ваша проблема, возможно, здесь: (! Password1 = password2)

header("location:register.php"); 

Если я отправить форму правильно (имя пользователя < 30 и password1 == password2) СТОЛБ это хорошо, но, но, если я представить с заголовок будет перенаправлен обратно на ту же страницу (register.php), и POST будет пустым.

Try делает

var_dump($_POST); 
die(); 

здесь

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

Вы увидите, что она работает.

Кроме того, перед подключением к БД вы должны добавить дополнительные проверки.Вы должны проверить $ _POST для имени пользователя, password1 и password2 isset, и вам следует избегать всего, чтобы избежать некоторых распространенных атак, таких как SQL Injection и XSS (межсайтовый скриптинг).

Надеюсь, что это поможет

Смежные вопросы