проблем с кода

dgan1989

Registered
извинявам се може би за глупавата тема :oops: ,но сега уча елементарните за вас неща може би
Проблема е искам да си направя най-обикновена форма за регистрация ,правя я но ми излизат грешки от рода на Undefined variable undefined index
ще копна кода
<?php
session_start();
if(isset($_POST['form_submit'])==1)
{

}

{
$username=trim($_POST['username']);
$password=trim($_POST['password']);
$pass2=trim($_POST['password2']);
$email=trim($_POST['email']);

if(strlen($username)<4)
{
$error_array['username']='nevaliden username';

}
if(strlen($password)<4)
{
$error_array['password']='kratka parola';
}
if($password!=$pass2)
{
$errod_array['password']='gre6na parola';
}
if(strlen($email)<4)
{
$error_array['email']='kratuk meil';
}
if($error_array>0)
{
}
}

?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>nachalo</title>
</head>
<body>

<form action="registracia.php" method="POST">
Username:<input type="text" name="username"><?php if($error_array['username']){
echo $error_array['username'];} ?><br>
<input type="hidden" name="form_submit" value="1">
Password<input type="text" name="password"><?php if($error_array['password']){
echo $error_array['password'];
}
?><br>
povtori parola<input type="text" name="password2"><br>
Email<input type="text" name="email"><?php if($error_array['email']){
echo $error_array['email'];
}
?> <br>
<input type="submit" value="submit">
</form>
</body>
</html>

когато вляза в страницата ми изписва undefined_index и на четирите места,а когато напиша нещо ,което отговаря на условията тоест да е по-дълго от 4 ми се появява undefined error_array ,иначе формата си работи и с тея неща ,но защо се появяват ако някой може да ми каже къде бъркам :)
 
PHP:
<?php
session_start();
if(isset($_POST['form_submit'])==1)
{
$username=trim($_POST['username']);
$password=trim($_POST['password']);
$pass2=trim($_POST['password2']);
$email=trim($_POST['email']);

if(strlen($username)<4)
{
$error_array['username']='nevaliden username';

}
if(strlen($password)<4)
{
$error_array['password']='kratka parola';
}
if($password!=$pass2)
{
$errod_array['password']='gre6na parola';
}
if(strlen($email)<4)
{
$error_array['email']='kratuk meil';
}
if($error_array>0)
{
}
}


?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>nachalo</title>
</head>
<body>

<form action="registracia.php" method="POST">
Username:<input type="text" name="username"><?php if($error_array['username']){
echo $error_array['username'];} ?><br>
<input type="hidden" name="form_submit" value="1">
Password<input type="text" name="password"><?php if($error_array['password']){
echo $error_array['password'];
}
?><br>
povtori parola<input type="text" name="password2"><br>
Email<input type="text" name="email"><?php if($error_array['email']){
echo $error_array['email'];
}
?> <br>
<input type="submit" value="submit">
</form>
</body>
</html>

когато вляза в страницата ми изписва undefined_index и на четирите места,а когато напиша нещо ,което отговаря на условията тоест да е по-дълго от 4 ми се появява undefined error_array ,иначе формата си работи и с тея неща ,но защо се появяват ако някой може да ми каже къде бъркам Smilef(isset($_POST['form_submit'])==1)
{

}

{
$username=trim($_POST['username']);
$password=trim($_POST['password']);
$pass2=trim($_POST['password2']);
$email=trim($_POST['email']);

if(strlen($username)<4)
{
$error_array['username']='nevaliden username';

}
if(strlen($password)<4)
{
$error_array['password']='kratka parola';
}
if($password!=$pass2)
{
$errod_array['password']='gre6na parola';
}
if(strlen($email)<4)
{
$error_array['email']='kratuk meil';
}
if($error_array>0)
{
}
}

?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>nachalo</title>
</head>
<body>

<form action="registracia.php" method="POST">
Username:<input type="text" name="username"><?php if($error_array['username']){
echo $error_array['username'];} ?><br>
<input type="hidden" name="form_submit" value="1">
Password<input type="text" name="password"><?php if($error_array['password']){
echo $error_array['password'];
}
?><br>
povtori parola<input type="text" name="password2"><br>
Email<input type="text" name="email"><?php if($error_array['email']){
echo $error_array['email'];
}
?> <br>
<input type="submit" value="submit">
</form>
</body>
</html>

така не би трябвало да ти дава грешка :)
 
Undefined variable undefined index

използвай isSet за да провериш дали дадено нещо съществува,и след тогава му даваш стойност.
 
PHP:
<?php
session_start();
if(isset($_POST['action']))
{
$username=trim($_POST['username']);
$password=trim($_POST['password']);
$pass2=trim($_POST['password2']);
$email=trim($_POST['email']);

if(strlen($username)<4)
{
$error_array['username']='nevaliden username';

}
if(strlen($password)<4)
{
$error_array['password']='kratka parola';
}
if($password!=$pass2)
{
$errod_array['password']='gre6na parola';
}
if(strlen($email)<4)
{
$error_array['email']='kratuk meil';
}
if($error_array>0)
{
}
}


?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>nachalo</title>
</head>
<body>

<form action="registracia.php" method="POST">
Username:<input type="text" name="username"><?php if($error_array['username']){
echo $error_array['username'];} ?><br>
<input type="hidden" name="form_submit" value="1">
Password<input type="text" name="password"><?php if($error_array['password']){
echo $error_array['password'];
}
?><br>
povtori parola<input type="text" name="password2"><br>
Email<input type="text" name="email"><?php if($error_array['email']){
echo $error_array['email'];
}
?> <br>
<input type="submit" value="submit">
</form>
</body>
</html>
я порбвай така
 
Отново ще дава грешка.

------------------

Масива трябва да се инициализира.

PHP:
$error_array = array();

------------------

А тук имаш грешка:

PHP:
$errod_array['password']='gre6na parola';

------------------

А тук:

PHP:
if($error_array>0)

Предполагам искаш да броиш записите в масива, това става ето така:

PHP:
if(count($error_array)  == 0){}
Тук казваме - ако няма записани грешки във масива, тогава продължи.
count() - Означава брой елементите.

------------------

Долу във формата, при показване дали имаш грешки всички стойности трябва да им сложиш isset(), защото преди да пратиш формата този масив с грешките не е инициализиран и PHP връща грешка.

isset() означава накратко: Ако дадена стойност е инициализирана (съществува) или е създадена, както искаш го разбирай. : ))

------------------

Тук във инпута, може да сложиш един name.

<input type="submit" value="submit" name="send" />

Обърни внимание и на тази червената чертичка която сложих, хубаво е да се затварят <input />

------------------

После да се върнем отново на PHP кода.

Ето този ред:
PHP:
if(isset($_POST['form_submit'])==1){}

Го преправяме по "name", който зададохме на инпута на събмит бутона:
Ето така:
PHP:
if(isset($_POST['send'])) {}

Както виждаш бяхме задали name="send", а сега проверяваме дали "send" е във $_POST масива (дали е инициализиран), ако е да продължи изпълнението на кода.

------------------

Препоръчвам ти да прочетеш ето този урок:

http://web-tourist.net/login/login/view.php?st=3418

Някой неща, който съм писал в урока, имат изключения при който може да се ползват дадени неща, но в момента предполагам ще ти даде една основа за начало.
 
мерси за отговора отново,странното е ,че гледам едни туториали и човека който ги прави използва същия код и никакви грешки не му излизат ,а при мен са милион :D
 
Ицка дори и да не напише

PHP:
$error_array = array()

пак няма да дава грешка :)
то автоматично го дефинира като масив когато започнеш да пишеш в [] :)
 
Попринцип е хубаво да се задава array() на променлива, която ще носи масив. Така ти ще знаеш, че това е масив, празен или непразен.

Ето със този код:

PHP:
if(count($error_array)  == 0){}

Ако всичко е валидно $error_array; няма да се създаде както казваш ти, ами това означава, че когато го дадем към count() функцията, функцията ще върне грешка, че $error_array не е инициализиран. А ако го инициализираме предварително (независимо дали ще го пълнем масива или не), тогава функцията count() ще го обходи, ще види че е празен и ще върне 0. Следователно е нямало грешки.

--------------

Други примери:


Ползваш seters/geters във някой клас. Като сетваш стойности в масив и после ги вадиш.

PHP:
class test {

    private $MyArray = array();

    public function SetArray($key, $value) {
        $this->MyArray[$key] = $value;
    }

    public function GetArray($key) {

        
        if (array_key_exists($key, $this->MyArray)) {
            return $this->MyArray[$key];
        }

         return false;
    }

}

В този клас да приеме, че private $MyArray = array();, сме го махнали, сега ако сетваме стойност чрез SetArray($key, $value), както казваш масива ще се създаде и после при извикването чрез GetArray($key), ще можем да извикаме стойноста. Обаче ако не сме сетнали стойност, ами директно искаме да извикаме GetArray($key), това веднага ще ни изкара грешка, че масива MyArray() не съществува. За това ние трябва горе да си го опишем и след това дори и да не се въведе стойност чрез SetArray($key, $value), то GetArray($key) ще проверява празния масив, няма да открие съответствия и ситуацията приключва.

Леко се отклонихме, но не излишно предполагам.
 
dgan1989 каза:
мерси за отговора отново,странното е ,че гледам едни туториали и човека който ги прави използва същия код и никакви грешки не му излизат ,а при мен са милион :D

Оп извинявам се за двойна пост, при него не се появяват грешките защото си е изключил показването им. Ако прочетеш урока, който ти пратих ще разбереш защо става така. Както може от PHP файловете да ги изключиш, така може и от php.ini (което най - вероятно го е напрвил от там).

Аз ти препоръчвам винаги да ползваш ето това:

PHP:
error_reporting(E_ALL);

Във всеки файл във, който работиш. За да може да си следиш всяка малка грешка или предупреждение което PHP ти праща. А вече във официалното пускане на твоя проект във www, е препоръчително да си изключиш всички грешки, за да не могат при евентуални такива, обикновените потребители да ги виждат.

Единствено грешки от тип: Fatal Error, не може да се спрат чрез тези методи за спиране на грешки.
 
Мога да ти докажа че не е вярно в случая който го ползва той означава когато му зададеш

PHP:
if(count($error_array) == 0)
ще работи правилно винаги така си обозначавам грешките без да задавам че е масив и си работи без никакви проблеми :)
 
Прочети ми предишното мнение за грешките и си сложи:

PHP:
error_reporting(E_ALL);

ЕДИТ:

Как ще задаваш функция за броене на дадени елементи във масив примерно, при положение, че такав масив не съществува ?

В твоя случай може да го направиш така:

PHP:
if(!isset($ErrorArray)) {

}

Ако не е сетнат, но не и count(); ...
 
така ,друг проблем ми изкача да не пускам нова тема ще пиша тук
Проблемът е ,че не мога да вкарам инфо в базата данни ,ето кода най-проста рег форма ,ако ми е вярна логиката би трябвало като напиша нещо в двете полета да влезе в базата данни ,но не влиза
<?php



$submit=$_POST['submit'];
$name=$_POST['username'];
$pass=$_POST['password'];
if($submit)
{
if(strlen($name)>2&&strlen($pass)>2)
{
mysql_connect("localhost", "root", "тук имам парола");
mysql_select_db("dido");
$queryreg=mysql_query("INSERT INTO log
VALUES ('', '3' ,'$name','$pass.' ");
}



}


?>
<form action="m.php" method="POST">
Username<input type="text" name="username"><br>
Password<input type="password" name="password"><br>
<input type="hidden" name="submit" value="submit">
<input type="submit" name="!">
</form>
 
Така:

Трябва да добавиш във заявката полетата, в който ще слагаш информацията:

Това съм ти го дал като пример къде трябва да се полетата, и трябва да са във скоби.

(field, field2, field3)



PHP:
<?php



$submit=$_POST['submit'];
$name=$_POST['username'];
$pass=$_POST['password'];
if($submit)
{ 
if(strlen($name)>2 && strlen($pass)>2)
{
mysql_connect("localhost", "root", "тук имам парола");
mysql_select_db("dido");
$queryreg=mysql_query("
INSERT INTO log 
(field, field2, field3)
VALUES ('', '3' ,'$name','$pass.' ");
}



}


?>
<form action="m.php" method="POST">
Username<input type="text" name="username"><br>
Password<input type="password" name="password"><br>
<input type="hidden" name="submit" value="submit">
<input type="submit" name="!">
</form>
 
не става отново,опитах да копна от нета готови кодове и само да сменя имената ,но пак не става ,някой да има идея
 

Back
Горе