Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Geek7 en 18 Julio 2013, 16:58 pm



Título: Undefined variable
Publicado por: Geek7 en 18 Julio 2013, 16:58 pm
Que anda mal aca?:

Código
  1. <form method="post" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>"><fieldset><legend>Form</legend>
  2.  
  3. <label>Name:</label> <input type="text" size="15" name="name" value="<?=$name;?>" /> <span id="error">$nameErr</span>
  4. <input type="submit" name="submit" id="button" value="Send" /></form>
  5.  
  6.  
  7. <?php
  8. if (isset($_POST['submit']))
  9. {
  10.    // Initialize variables
  11.  $name = "";
  12.  
  13.  if ($_SERVER['REQUEST_METHOD'] == "POST")
  14.  {
  15.    if (empty($_POST['name']))
  16.    {
  17.        $nameErr = "Missing";
  18.    }
  19.    else
  20.    {
  21.        $name = $_POST['name'];
  22.    }
  23.  
  24.  }

Notice: Undefined variable: name in line...


Título: Re: Undefined variable
Publicado por: Vordarxis en 18 Julio 2013, 17:19 pm
Yo creo que lo que necesitas es algo así:

Código:
<?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>


Título: Re: Undefined variable
Publicado por: ~ Yoya ~ en 19 Julio 2013, 01:36 am
Código
  1. <form method="post" action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>"><fieldset><legend>Form</legend>
  2.  
  3. <label>Name:</label> <input type="text" size="15" name="name" value="<?=$name;?>" /> <span id="error">$nameErr</span>
  4. <input type="submit" name="submit" id="button" value="Send" /></form>
  5.  
  6.  
  7. <?php
  8. if (isset($_POST['submit']))
  9. {
  10.    // Initialize variables
  11.  $name = "";
  12.  
  13.  if ($_SERVER['REQUEST_METHOD'] == "POST")
  14.  {
  15.    if (empty($_POST['name']))
  16.    {
  17.        $nameErr = "Missing";
  18.    }
  19.    else
  20.    {
  21.        $name = $_POST['name'];
  22.    }
  23.  
  24.  }

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.


Título: Re: Undefined variable
Publicado por: Vordarxis en 19 Julio 2013, 08:32 am
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.


Título: Re: Undefined variable
Publicado por: Geek7 en 19 Julio 2013, 10:23 am
gracias


Título: Re: Undefined variable
Publicado por: Geek7 en 19 Julio 2013, 13:29 pm
pero tengo el mismo problema con una funcion:

Código
  1. <?php
  2. // Initialize variables
  3.  $name = $address = $email = $items = $success = "";
  4.  $error_name = $error_address = $error_email = $error_items = "";
  5.  
  6. function checkName($nombre) {
  7.  
  8.    if(empty($nombre))
  9.    {
  10.        $error_name = "Missing";
  11.    }
  12.    elseif (!preg_match('/^[a-zA-z]*$/', $nombre, $name_match))
  13.    {
  14.        $error_name = "Only alphabets  allowed";
  15.    }
  16.  
  17.    return $error_name;
  18. }
  19. if (isset($_POST['submit']))
  20. {
  21.    if($_SERVER['REQUEST_METHOD'] == "POST")
  22.    {
  23.    $name = $_POST['name'];
  24.    $address = $_POST['address'];
  25.    $email = $_POST['email'];
  26.    $item = array();
  27.  
  28.    // Verify input:
  29.    checkName($name);
  30.    }
  31.  
  32. }
  33. ?>
  34.  
  35. html........

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


Título: Re: Undefined variable
Publicado por: ~ Yoya ~ en 20 Julio 2013, 04:06 am
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
  1. <?php
  2. $hola = "Hola mundo";
  3.  
  4. function checkName($nombre) {
  5. echo $hola;//Error ya que la variable $hola no esta definida en la función checkname
  6. }
  7. checkName("XD");
  8.  
  9. ?>

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

Código
  1. <?php
  2.  
  3. $hola = "Hola mundo";
  4.  
  5.  
  6. function checkName($nombre) {
  7. global $hola;//La variable $hola es una variable que pertenece al un contexto global no a un contexto local
  8. echo $hola;// Salida: Hola mundo
  9.  
  10. }
  11.  
  12.    checkName("XD");
  13.  
  14. ?>

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
  1. <?php
  2.  
  3. $hola = "Hola mundo";
  4.  
  5. function checkName($nombre) {
  6.  
  7.  
  8. if(true) {$xD = 888;}
  9. echo $xD;//Salida: 888
  10. }
  11.  
  12.    checkName("XD");
  13.  
  14. ?>


Código
  1. <?php
  2.  
  3. $hola = "Hola mundo";
  4.  
  5. function checkName($nombre) {
  6.  
  7.  
  8. if(false) {$xD = 888;}
  9. echo $xD;//Error: Undefined variable: xD....
  10. }
  11.  
  12.    checkName("XD");
  13.  
  14. ?>

Variable Scope (http://www.php.net/manual/en/language.variables.scope.php)

Saludos.