Undefined variable

Iniciado por Geek7, 18 Julio 2013, 16:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Geek7

Que anda mal aca?:

Código (php) [Seleccionar]
<form method="post" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>"><fieldset><legend>Form</legend>

<label>Name:</label> <input type="text" size="15" name="name" value="<?=$name;?>" /> <span id="error">$nameErr</span>
<input type="submit" name="submit" id="button" value="Send" /></form>


<?php
if (isset($_POST['submit']))
{
    
// Initialize variables
  
$name "";
  
  if (
$_SERVER['REQUEST_METHOD'] == "POST")
  {
    if (empty(
$_POST['name']))
    {
        
$nameErr "Missing";
    }
    else 
    {
        
$name $_POST['name'];
    }
        
  }


Notice: Undefined variable: name in line...

Vordarxis

Yo creo que lo que necesitas es algo así:

<?php

$name 
"";
$nameErr "";
if (isset(
$_POST['submit']))
{
    
// Initialize variables
 
  
if ($_SERVER['REQUEST_METHOD'] == "POST")
  {
    if (empty(
$_POST['name']))
    {
        
$nameErr "Missing";
    }
    else 
    {
        
$name $_POST['name'];
    }
 
  }
 }
 
?>

<form method="post" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>"><fieldset><legend>Form</legend>

<label>Name:</label> <input type="text" size="15" name="name" value="<?=$name;?>" /> <span id="error"><?=$nameErr;?></span>
<input type="submit" name="submit" id="button" value="Send" /></form>

~ Yoya ~

Código (php-brief,3) [Seleccionar]

<form method="post" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>"><fieldset><legend>Form</legend>

<label>Name:</label> <input type="text" size="15" name="name" value="<?=$name;?>" /> <span id="error">$nameErr</span>
<input type="submit" name="submit" id="button" value="Send" /></form>


<?php
if (isset($_POST['submit']))
{
    
// Initialize variables
  
$name "";
 
  if (
$_SERVER['REQUEST_METHOD'] == "POST")
  {
    if (empty(
$_POST['name']))
    {
        
$nameErr "Missing";
    }
    else 
    {
        
$name $_POST['name'];
    }
 
  }


En la linea 3, estas utilizando la variable $name pero esta no esta definida antes, por eso el error. El codigo de @Vordarxis funcionaria pero lo ideal es entender porque pasan las cosas.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Vordarxis

Yoya, tienes toda la razón. Hace tiempo que no me paso por foros y voy perdiendo buenos hábitos.

Lo suyo es que el código php, en el cual se declaran las variables, lo escribas antes que el HTML, en el que se utilizan las variables. A parte, cuando intentas utilizar las variable $nameErr no sólo no está declarada, sino que no está entre <?php y ?> asi que el código se pintará, en lugar de ejecutarse.

En la línea 15, a parte de usar empty, haría una comparación con la cadena vacía. Muchas veces es lo que llega cuando no rellenas un campo en un formulario.

Geek7

#4
gracias

Geek7

pero tengo el mismo problema con una funcion:

Código (php) [Seleccionar]
<?php
// Initialize variables
  
$name $address $email $items $success "";
  
$error_name $error_address $error_email $error_items "";

function 
checkName($nombre) {
    
    if(empty(
$nombre))
    {
        
$error_name "Missing";
    }
    elseif (!
preg_match('/^[a-zA-z]*$/'$nombre$name_match))
    {
        
$error_name "Only alphabets  allowed";
    }
    
    return 
$error_name;
}
if (isset(
$_POST['submit']))
{
    if(
$_SERVER['REQUEST_METHOD'] == "POST")
    {
    
$name $_POST['name'];
    
$address $_POST['address'];
    
$email $_POST['email'];
    
$item = array();
    
    
// Verify input:
    
checkName($name);
    }
    
}
?>


html........


Como es que no esta definida si esta arriba de la funcion?

~ Yoya ~

Siempre recuerda, mostrar el error así evitas a los demás tener que ejecutar el código para conocer el error...

El error se debe a que dentro del ámbito de una función en PHP, todas las variables son locales a menos que se declare que son variables globales.


Ejemplo:
Código (php,5) [Seleccionar]

<?php
$hola 
"Hola mundo";

function 
checkName($nombre) {
echo $hola;//Error ya que la variable $hola no esta definida en la función checkname
}
checkName("XD");

?>


Tendrás que declarar que las variables son globales antes de utilizarla. Con el keyword global

Código (php,7,8) [Seleccionar]

<?php

$hola 
"Hola mundo";

 
function 
checkName($nombre) {
global $hola;//La variable $hola es una variable que pertenece al un contexto global no a un contexto local
echo $hola;// Salida: Hola mundo

}

    
checkName("XD");

?>


Igualmente tienes que tener cuidado con las variables que declaras dentro de algún bloque, ya sea if,while, etc... Porque la variable que declares dentro de ese bloque solo se podrá acceder desde el mismo bloque, y fuera solo si el bloque llega a ejecutarse, de lo contrario no.

Código (php,9,10) [Seleccionar]

<?php

$hola 
"Hola mundo";
 
function 
checkName($nombre) {


if(true) {$xD 888;}
echo $xD;//Salida: 888
}

    
checkName("XD");

?>



Código (php,9,10) [Seleccionar]

<?php

$hola 
"Hola mundo";
 
function 
checkName($nombre) {


if(false) {$xD 888;}
echo $xD;//Error: Undefined variable: xD....
}

    
checkName("XD");

?>


Variable Scope

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.