Nueva pregunta

Pregunta:

Fecha: 21-02-2020 07:16:29 (En Español)

Error: Notice: Undefined index: Id in C:\wamp64\www\Curso PHP\Ejer CRUD\Error\editar.php on line 16[No resuelta]

¿Por qué me da este error: Notice: Undefined index: Id in C:\wamp64\www\Curso PHP\Ejer CRUD\Error\editar.php on line 16, con el siguiente código?

Este es el código completo:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
<link rel="stylesheet" type="text/css" href="hoja.css">
</head>

<body>

<h1>ACTUALIZAR</h1>

<?php 

  $Id=$_GET["Id"];
  $nom=$_GET["nom"];
  $ape=$_GET["ape"];
  $dir=$_GET["dir"];


?>

<p>
 
</p>
<p>&nbsp;</p>
<form name="form1" method="post" action="">
  <table width="25%" border="0" align="center">
    <tr>
      <td></td>
      <td><label for="id"></label>
      <input type="hidden" name="id" id="id"></td>
    </tr>
    <tr>
      <td>Nombre</td>
      <td><label for="nom"></label>
      <input type="text" name="nom" id="nom" value="prueba"></td>
    </tr>
    <tr>
      <td>Apellido</td>
      <td><label for="ape"></label>
      <input type="text" name="ape" id="ape"><?php echo $ape?></td>
    </tr>
    <tr>
      <td>Dirección</td>
      <td><label for="dir"></label>
      <input type="text" name="dir" id="dir"><?php echo $dir?></td>
    </tr>
    <tr>
      <td colspan="2"><input type="submit" name="bot_actualizar" id="bot_actualizar" value="Actualizar"></td>
    </tr>
  </table>
</form>
<p>&nbsp;</p>
</body>
</html>
Etiquetas: Empezar a programar - PHP - Pregunta Votos: 0 - Respuestas: 7 - Vistas: 7 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 21-02-2020 21:15:35 Creo que hace falta más información para saber como ayudarte ...   Votos: 0 - Link respuesta
     
  • Fecha: 22-02-2020 01:27:37 Hola Mariano, tu problema está en que cuando envías el nombre del control lo haces en minúsculas, y cuando lo recibes en el array $_GET lo intentas recupera capitalizado (o sea, con la primer letra en mayúscula).

    Tu solución es cambiar la línea:
    $Id=$_GET["Id"];

    Por
    $Id=$_GET["id"];


    Nota: recuerda que las claves recibidas en tu array $_GET son "case-sensitive", o sea, sensible a mayúsculas y minúsculas.

    Saludos a todos y buen código!
      Votos: 0 - Link respuesta
     
  • Fecha: 22-02-2020 02:53:08 Muchas gracias Fernando por haberme dedicado tu tiempo, pero te informo que continúa dando el mismo error.
    He puesto el código como me dijiste:
    $Id=$_GET["id"];
    pero continúa dándome el error:
    Notice: Undefined index: id in C:\wamp64\www\Curso PHP\Ejer CRUD\editar.php on line 15
    Al igual que me da el mismo error en las otras 3 variables.
      Votos: 0 - Link respuesta
     
  • Fecha: 22-02-2020 05:13:07 De nada Mariano, un gusto poder ayudarte.

    A ver, cuando invocas la el archivo PHP (o sea, el recurso) por medio de la URL (voy a suponer una) http://localhost/Curso PHP/Ejer CRUD/editar.php le pasas los parametros get?

    Para el ejemplo sería:
    http://localhost/Curso PHP/Ejer CRUD/editar.php?id=35&nom=algo&ape=algo&dir=algo

    Ahora algunos comentarios generales:
    * Estoy asumiendo que estas haciendo un ejercicio simple, y por eso me concentre en la pregunta puntual, por lo que no entro en detalles como "sanear los ingresos del usuario", "validar que el dato que te llega sea correcto", "analizar la logica de tu script" <-- pero para que tu código este bien debes prestar ateción a estos puntos
    * Por otro lado veo que tu formulario tiene el atributo method="post", y capturas tus parametros con el array superglobal $_GET <-- si es que los parametros van desde el formulario, o cambias el atributo method por get, o sea method="get" o capturas los parametros con $_POST
    * Ya sea que tu script reciba los parametros por GET o por POST debes validar que pasa si estos parametros no llegan... miles de alternativas y opciones como ocurrencias y requermientos puedas tener, pero lo basico sería preguntas si llego el parametro (o sea, si esta seteada la clave en el array superglobal), algo como lo siguiente (usando el operador ternacio de php para el IF, o puedes hacer un IF simple, como tu gustes, yo te doy el ejemplo con el ternario que me gusta más):

    $Id=isset($_GET["id"])?$_GET["id"]:'';
    

    ó
    $Id=isset($_POST["id"])?$_POST["id"]:'';
    


    Nota: si llega el parametro 'id' inicializo/cargo la variable $Id con el contenido de $_XXX["id"], de lo contrario la inicializo/cargo la variable $Id en vacío.

    Saludos y buen código!
      Votos: 0 - Link respuesta
     
  • Fecha: 22-02-2020 06:14:05 Muchas gracias nuevamente Fernando, pero no soy capaz de resolverlo, se ve que mis conocimientos son muy limitados en esta materia.
    No obstante te envío el código 'index.php' que tiene el programa y decirte que tengo un archivo aparte también que es 'conexion.php'
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>CRUD</title>
    <link rel="stylesheet" type="text/css" href="hoja.css">
    </head>
    <body>
    <?php
    include("conexion.php");
    $registros=$base->query("SELECT * FROM DATOS_USUARIOS")->fetchAll(PDO::FETCH_OBJ);
    ?>
    <h1>CRUD<span class="subtitulo">Create Read Update Delete</span></h1>
    <table width="50%" border="0" align="center">
    <tr >
    <td class="primera_fila">Id</td>
    <td class="primera_fila">Nombre</td>
    <td class="primera_fila">Apellido</td>
    <td class="primera_fila">Dirección</td>
    <td class="sin">&nbsp;</td>
    <td class="sin">&nbsp;</td>
    <td class="sin">&nbsp;</td>
    </tr>
    <?php
    foreach ($registros as $persona):?>
    <tr>
    <td><?php echo $persona->Id?></td>
    <td><?php echo $persona->Nombre?></td>
    <td><?php echo $persona->Apellido?></td>
    <td><?php echo $persona->Direccion?></td>

    <td class="bot"><a href="borrar.php?Id=<?php echo $persona->Id?>"><input type='button' name='del' id='del' value='Borrar'></a></td>
    <td class='bot'><a href="editar.php?Id=<?php echo $persona->Id?> & nom=<?php echo $persona->Nombre?> & ape=<?php echo $persona->Apellido?> & dir=<?php echo $persona->Direccion?>"><input type='button' name='up' id='up' value='Actualizar'></a></td>
    </tr>
    <?php
    endforeach;
    ?>
    <tr>
    <td></td>
    <td><input type='text' name='Nom' size='10' class='centrado'></td>
    <td><input type='text' name='Ape' size='10' class='centrado'></td>
    <td><input type='text' name='Dir' size='10' class='centrado'></td>
    <td class='bot'><input type='submit' name='cr' id='cr' value='Insertar'></td></tr>
    </table>
    <p>&nbsp;</p>
    </body>
    </html>
    Saludos y gracias nuevamente.
      Votos: 0 - Link respuesta
     
  • Fecha: 26-02-2020 07:27:18 de inicio imprime $_GET para ver que parámetros estas recibiendo, puedes hacerlo con print_r($_GET) verifica si están llegando los parámetros que necesitas   Votos: 0 - Link respuesta
     
  • Fecha: 27-02-2020 06:10:04 1) Al ingresar en la página el código PHP de las líneas 13-21 está tratando de cargar información que no existe (aún no la has enviado usando el formulario). 2) tu formulario usa un método POST mientras que estas tratando de recuperar las variables usando GET. 3) No hay un botón para enviar la información en el formulario. Puede hacer algo así:
    // Entramos aqui solo si se oprimió en botón del formulario
    // (esto empiezaría en la línea 13)
    if(isset($_POST['enviar'])) {
        $id = filter_input(INPUT_POST, 'id');   // sanitizamos
        $nombre = filter_input(INPUT_POST, 'nom'); 
        // y así con todos los campos del formulario
    }
    

    Ahora, en tu formulario debes agregar un botón:
    <button type="submit" name="enviar">Guardar Información</button>

    Y la forma correcta de ver los resultados en el formulario sería:
    <input type="text" name="nom" value="<?php echo $nombre; ?>" />

    Un consejo: cuando escojas nombres de variables, usa nombres que sean cortos pero descriptivos. Usar variables llamadas "$nom" y "$ape" puede traer problemas a largo plazo. Es mejor usar "$nombre_propio" (o incluso "$nombre") y "$apellido".
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com