[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с получением данных из формы
goodguy
Всем доброго времени суток,

Возникла проблема с получением данных из формы, нагуглить ответ не удалось. В общем, дело в следующем:
написал файл register.php с таким содержинием:
<?php 
require_once 'commonparts/header.php';
require_once 'additional/vars.php';
?>

<div id="container">
<
form id='register' action='register.php' method='post' accept-charset='UTF-8'>
<
fieldset>
<
legend><?php echo lang::$reg_user ?></legend>
<
input type='hidden' name='submitted' id='submitted' value='1'/>

<
label for='name' ><?php echo lang::$reg_form_name ?><span class="asterisk">*</span>: </label><br>
<
input type='text' name='name' id='name' maxlength="50" /><br>

<
label for='lastname' ><?php echo lang::$reg_form_lastname ?><span class="asterisk">*</span>: </label><br>
<
input type='text' name='lastname' id='lastname' maxlength="50" /><br>

<
label for='email' ><?php echo lang::$reg_form_email ?><span class="asterisk">*</span>:</label><br>
<
input type='text' name='email' id='email' maxlength="50" /><br>

<
label for='password' ><?php echo lang::$reg_form_pass ?><span class="asterisk">*</span>:</label><br>
<
input type='password' name='password' id='password' maxlength="<?php echo $MAX_PASS_LENGTH ?>" /><br>

<
label for='password2' ><?php echo lang::$reg_form_pass2 ?><span class="asterisk">*</span>:</label><br>
<
input type='password' name='password2' id='password2' maxlength="<?php echo $MAX_PASS_LENGTH ?>" /><br>

<
label for='phone' ><?php echo lang::$reg_form_phone ?><span class="asterisk">*</span>:</label><br>
<
input type='text' name='phone' id='phone' maxlength="12" /><br>

<
label for='organization' ><?php echo lang::$reg_form_organization ?><span class="asterisk">*</span>:</label><br>
<
input type='text' name='organization' id='organization' maxlength="100" /><br>

<
label for='city' ><?php echo lang::$reg_form_city ?>:</label><br>
<
input type='text' name='city' id='city' maxlength="20" /><br>

<
input type='submit' name='Submit' value='<?php echo lang::$reg_form_submit?>' /><br>
</
fieldset>
</
form>

<
img alt="ok" src="images/ok.png" width="236" height="465">

</
div>

<?php


if ($_POST['submitted']) {

$name = $_POST['name'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$phone = $_POST['phone'];
$org = $_POST['organization'];
$city = $_POST['city'];

$alright = true;

echo "NAME: " . $_POST['name']; // выдает пустую строку

if (!isset($name) OR strlen($name) < 2) {
nameProblem();
}
if (!isset($lastname) OR strlen($lastname) < 2) {
lastnameProblem();
}
if (!isset($email) OR strlen($email) < 7) {
emailProblem();
}
if (!isset($email) OR strlen($email) < 2) {
emailProblem();
}
if (isset($password)) {
if (strlen($password) < $MIN_PASS_LENGTH) {
echo "PASSWORD IS TOO SHORT";
exit;
} elseif (strlen($password) > $MAX_PASS_LENGTH) {
echo "PASSWORD IS TO LONG";
exit;
}
if ($password != $password2) {
echo "PASSWORDS ARE NOT EQUAL";
exit;
}
}
else {
passwordProblem();
}
if (!isset($phone) OR strlen($phone) < 5) {
phoneProblem();
}


if (!registerUser($name, $lastname, $password, $email, $phone, $org, $city)) {
echo "FAILED TO REGISTER USER";
exit;
}
}


function passwordProblem() {
echo "PASSWORD PROBLEM";
exit;
}
function nameProblem() {
echo "NAME PROBLEM";
exit;
}
function lastnameProblem() {
echo "LAST NAME PROBLEM";
exit;
}
function emailProblem() {
echo "EMAIL PROBLEM";
exit;
}
function phoneProblem() {
echo "PHONE PROBLEM";
exit;
}
function organizationProblem() {
echo "ORG PROBLEM";
exit;
}

?>


<?php

require_once 'commonparts/footer.php';
?>


Из этой формы, как не сложно догадаться, мне нужны введенные данные. Но они, по какой-то причине всегда оказываются пусты. Только пароль приходит нормально.
Что в этой форме не так?



Спустя 11 минут, 16 секунд (27.06.2012 - 12:17) Гость_Гость написал(а):
а если if ($_POST['submitted']) заменить на if ($_POST['Submit'])

Спустя 7 минут, 17 секунд (27.06.2012 - 12:24) goodguy написал(а):
Зачем? huh.gif

Спустя 4 минуты, 12 секунд (27.06.2012 - 12:29) sergeiss написал(а):
Цитата (goodguy @ 27.06.2012 - 13:24)
Зачем?

С такими вопросами лучше вообще программированием не заниматься :)

Это надо затем, чтобы правильно принять данные. А еще лучше
if( isset( $_POST['Submit'] ) )....

Спустя 6 минут, 24 секунды (27.06.2012 - 12:35) goodguy написал(а):
Я задал вопрос "Зачем?", потому что проверил этот вариант и это ничего не дало, совершенно. Данные формы так же остаются пусты.


Цитата

С такими вопросами лучше вообще программированием не заниматься smile.gif

Честно говоря, после трех лет программирования на нормальных языках, PHP со своими заморочками кажется дико корявым и неудобным. Но, к сожалению, иногда приходится писать на нем кое что, увы.

Спустя 23 минуты, 22 секунды (27.06.2012 - 12:58) sergeiss написал(а):
Цитата (goodguy @ 27.06.2012 - 13:35)
потому что проверил этот вариант и это ничего не дало, совершенно.

Ты можешь показать, где у тебя находится элемент с именем submitted?

Цитата (goodguy @ 27.06.2012 - 13:35)
Честно говоря, после трех лет программирования на нормальных языках, PHP со своими заморочками кажется дико корявым и неудобным.

Исключительно дело привычки smile.gif Мне после С++ он тоже показался неудобным. Но теперь привык и даже "ловлю кайф" от тех преимуществ, что он дает.

PS. И еще. Попробуй заменить 'name' на другое имя. Например, на 'name_'.

Спустя 4 минуты, 41 секунда (27.06.2012 - 13:03) goodguy написал(а):
Цитата
Ты можешь показать, где у тебя находится элемент с именем submitted?

4 строка после дива container
<input type='hidden' name='submitted' id='submitted' value='1'/>


п.с. если добавить к каждому полю ввода value=" " то везде воявится лишний пробел (что логично), но если его стереть и вписать туда новое значение, то данные из этого поля прийдут нормально

Спустя 2 минуты, 20 секунд (27.06.2012 - 13:05) Kuliev написал(а):
Цитата (goodguy @ 27.06.2012 - 13:24)
Зачем?  :huh:

За тем что имя кнопки у Вас Submit

<input type='submit' name='Submit' value='<?php echo lang::$reg_form_submit?>' /><br>


Во вторых нужно было пробел поставить перед закрывающимся тегом PHP ?>
Точку с запятой КТО ставить будет в конце строки?

Вот так должно быть:

<input type='submit' name='Submit' value='<?php echo lang::$reg_form_submit; ?>' /><br>


За тем проверяйте была ли нажата кнопка



if(isset($_POST['Submit']))
{
echo '<pre>';
print_r($_POST);
echo '</pre>';
}


Спустя 6 минут, 19 секунд (27.06.2012 - 13:12) sergeiss написал(а):
Цитата (goodguy @ 27.06.2012 - 14:03)
4 строка после дива container
<input type='hidden' name='submitted' id='submitted' value='1'/>

Да, увидел... Сорри за вопрос насчет этого элемента smile.gif Но ты делаешь лишнюю работу. Можно выкинуть этот скрытый 'submitted' и проверять по наличию элемента 'Submit' в ПОСТе. Так, как я тебе написал ранее, через isset(). Он появится только после нажатия кнопки. И это будет более правильная проверка.

И все-таки замени 'name' на другое имя!

Цитата (Kuliev @ 27.06.2012 - 14:05)
Точку с запятой КТО ставить будет в конце строки?

А в данном случае не обязательно wink.gif Когда только один оператор между тэгами ПХП, то точку с запятой не обязательно ставить.

Спустя 6 минут, 33 секунды (27.06.2012 - 13:18) goodguy написал(а):
Блин, все равно не работает..
Форма теперь выглядит так:

<form id='register' action='register.php' method='post' accept-charset='UTF-8'>
<fieldset>
<legend><?php
echo lang::$reg_user; ?></legend>

<label
for='username' ><?php echo lang::$reg_form_name; ?><span class="asterisk">*</span>: </label><br>
<input
type='text' name='username' id='username' maxlength="50" /><br>

<label
for='lastname' ><?php echo lang::$reg_form_lastname; ?><span class="asterisk">*</span>: </label><br>
<input
type='text' name='lastname' id='lastname' maxlength="50" /><br>

<label
for='email' ><?php echo lang::$reg_form_email; ?><span class="asterisk">*</span>:</label><br>
<input
type='text' name='email' id='email' maxlength="50" /><br>

<label
for='password' ><?php echo lang::$reg_form_pass; ?><span class="asterisk">*</span>:</label><br>
<input
type='password' name='password' id='password' maxlength="<?php echo $MAX_PASS_LENGTH; ?>" /><br>

<label
for='password2' ><?php echo lang::$reg_form_pass2; ?><span class="asterisk">*</span>:</label><br>
<input
type='password' name='password2' id='password2' maxlength="<?php echo $MAX_PASS_LENGTH; ?>" /><br>

<label
for='phone' ><?php echo lang::$reg_form_phone; ?><span class="asterisk">*</span>:</label><br>
<input
type='text' name='phone' id='phone' maxlength="12" /><br>

<label
for='organization' ><?php echo lang::$reg_form_organization; ?><span class="asterisk">*</span>:</label><br>
<input
type='text' name='organization' id='organization' maxlength="100" /><br>

<label
for='city' ><?php echo lang::$reg_form_city; ?>:</label><br>
<input
type='text' name='city' id='city' maxlength="20" /><br>

<input
type='submit' name='Submit' value='<?php echo lang::$reg_form_submit; ?>' /><br>
</fieldset>
</form>


А php так:

if (isset($_POST['Submit'])) {

$name = $_POST['username'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$phone = $_POST['phone'];
$org = $_POST['organization'];
$city = $_POST['city'];


echo "POST ARRAY " . print_r($_POST); // выдает Array ( [username] => [lastname] => [email] => [password] => [password2] => [phone] => [organization] => [city] => [Submit] => Отправить ) даже когда все поля заполнены
}

Спустя 2 минуты, 29 секунд (27.06.2012 - 13:21) Gabriel написал(а):
а если применить тотже подход с value?
ЗЫ. валидность рулит.

Спустя 2 минуты, 30 секунд (27.06.2012 - 13:23) goodguy написал(а):
Цитата
а если применить тотже подход с value?

бесполезно

Спустя 7 минут, 34 секунды (27.06.2012 - 13:31) sergeiss написал(а):
Цитата (goodguy @ 27.06.2012 - 14:18)
[Submit] => Отправить

Вот это говорит о том, что у тебя проблемы с кодировкой! В форме заявлена ЮТФ-8, а что в самом скрипте? Я подозреваю, что либо ничего (но есть дефолт на Вин-1251), либо в явном виде Вин-1251.

Спустя 2 минуты, 42 секунды (27.06.2012 - 13:33) goodguy написал(а):
Ну да, с кодировкой была проблемка, заменил на Windows-1251. Но это исправило только краказябры на кнопке "Отправить".

П.с. кодировка проектов в эклипсе выставлена UTF-8

Спустя 13 минут, 51 секунда (27.06.2012 - 13:47) sergeiss написал(а):
ОК....

Возьми вот этот код и вставь его в совершенно пустой файл, ничего не изменяй! Сохрани его с кодировкой UTF-8, запусти и скажи, что на выходе будет.

<!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=utf-8" />
<title>
Untitled Document</title>
</head>

<body>
<form
id='register' action='' method='post' >
<fieldset>
<legend>
Legend</legend>

<input
type='text' name='username' id='username' maxlength="50" /><br>
<input
type='text' name='lastname' id='lastname' maxlength="50" /><br>
<input
type='text' name='email' id='email' maxlength="50" /><br>
<input
type='password' name='password' id='password' /><br>
<input
type='password' name='password2' id='password2' /><br>
<input
type='text' name='phone' id='phone' maxlength="12" /><br>
<input
type='text' name='organization' id='organization' maxlength="100" /><br>
<input
type='text' name='city' id='city' maxlength="20" /><br>
<input
type='submit' name='Submit' value='Press a key!!!' /><br>
</fieldset>
</form>

<?php


if (isset($_POST['Submit'])) {
echo 'POST ARRAY <pre>' . print_r($_POST, true). '</pre>';
}
?>
</body>
</html>


Спустя 5 минут, 55 секунд (27.06.2012 - 13:53) goodguy написал(а):
Цитата
Сохрание его с кодировкой UTF-8, запусти и скажи, что на выходе будет.

Работает без проблем.

Блин, я вообще в ступоре. Что с моим-то файлом не так? Создаю заново его, копирую туда текст. Но он по прежнему отказывается работать. Кодировка точно UTF-8

Спустя 4 минуты, 54 секунды (27.06.2012 - 13:58) sergeiss написал(а):
Давай еще раз по порядку. У тебя указано action='register.php' - это тот же самый скрипт, где находится заполняемая форма?

Спустя 8 минут, 19 секунд (27.06.2012 - 14:06) goodguy написал(а):
Да.
Но похоже я нашел проблему. Она в кодировке файла lang.php
Если этотй файл не включать в скрипт, то все работает.

sergeiss, спасибо за помощь smile.gif Все-таки кодировки были всему виной. Копипаст - зло )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.