Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cambiando de $_GET a $_POST

Estas en el tema de Cambiando de $_GET a $_POST en el foro de PHP en Foros del Web. Hola mis amigos, les cuento que quiero cambiar la forma de pasar variables desde $_GET a hacerlo vía $_POST debido a que en esta oportunidad ...
  #1 (permalink)  
Antiguo 14/06/2017, 16:57
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Sonrisa Cambiando de $_GET a $_POST

Hola mis amigos, les cuento que quiero cambiar la forma de pasar variables desde $_GET a hacerlo vía $_POST debido a que en esta oportunidad no deseo mostrar valores a través del URL.

Para ello tenia lo siguiente:
Código HTML:
<form action="http://url.pagina.destino" method="post">
 <input type="hidden" name="variable1" value="valor1" />
 <input type="hidden" name="variable2" value="valor2" />
 <input type="text" value="" />
 <input type="submit" value="Editar" />
</form> 
y para recuperar las variables en la página de destino hacia lo siguiente:
Código PHP:
<?php
$v1 
$_POST['variable1'];
$v2 $_POST['variable2'];
?>
Hasta este momento todo bien, el problema me surge cuando quiero hacerlo vía $_POST y el nombre de la variable es el mismo y lo que cambia es el valor, me explico, tengo en pantalla una tabla con un listado de todos los alumnos y sus datos
(id_alumno, nombre, apellidos, telefono) y al final de cada línea horizontal un botoncito que dice "Editar".

Entonces, si tengo 20 alumnos, también tengo 20 botoncitos "editar" respectivamente.

Inicialmente había pensado en algo como
Código HTML:
<form action="http://localhost/editar.php" method="post">

 <input type="hidden" name="id_alumno" value="1" />
 <input type="submit" value="Editar 1" />

 <input type="hidden" name="id_alumno" value="2" />
 <input type="submit" value="Editar 2" />

 <input type="hidden" name="id_alumno" value="3" />
 <input type="submit" value="Editar 3" />

 <input type="hidden" name="id_alumno" value="4" />
 <input type="submit" value="Editar 4" />
</form> 
Pero no creo que me funcione porque el campo input siempre se llama "id_alumno" y lo que cambiar es al valor y no sé como pasar cada valor distinto con cada botón "editar n"
  #2 (permalink)  
Antiguo 14/06/2017, 17:15
Avatar de princk093  
Fecha de Ingreso: febrero-2015
Ubicación: Venezuela
Mensajes: 28
Antigüedad: 2 años, 8 meses
Puntos: 7
Respuesta: Cambiando de $_GET a $_POST

Código HTML:
Ver original
  1. <input type="hidden" name="id_alumno[]" value="3" />

Y cuando lo recibes en php el $_POST['id_alumno'] será un array en tu caso desde el 0 hasta el 3 porque tienes 4 elementos.

Saludos
  #3 (permalink)  
Antiguo 14/06/2017, 18:34
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Sonrisa Respuesta: Cambiando de $_GET a $_POST

Hola princk093 , que sorpresa ver que eres tu quien me responde, definitivamente las casualidades no existen, pues te cuento mi querido Brayan que estoy haciendo toooodo mi sistema en base a tus tutoriales de MVC en youtube y son lo máximo, esta forma de programar apoya muchisimo, no tienes ni idea de como se me ha facilitado todo, y como me has cambiado mi forma de echar código. Mil Gracias dedicarte a publicar ese tutorial.

Estoy haciendo los cambios que me indicas arriba para cambiar de GET a POST y te cuento que en mi archivo controlador alumnos.Controller.php tengo algo como esto en la parte de mode=edit:
Código PHP:
    case 'edit':
    if(
$isset_id) {
      if(
$_POST) {
        
$alumnos->Edit();
      } else {
        include(
HTML_DIR 'alumnos/edit_alumno.php');
      }
    } else {
        
header('location: ?view=alumnos');
    }
    break; 
Entiendo que la función de colocar la línea if($_POST) { es saber si guardamos los cambios en la DB o si por el contrario mostramos el formulario para editar el registro en alumnos/edit_alumno.php.
Pero al enviar el id_alumno vía POST nunca me muestra el formulario de alumnos/edit_alumno.php y se va directo a la función Edit()

En este punto estoy medio perdida , Qué puedo hacer ??
PD: Oficialmente soy tu fan Nº 1
  #4 (permalink)  
Antiguo 14/06/2017, 19:09
Avatar de Turdo  
Fecha de Ingreso: julio-2005
Ubicación: .:Guadalajara:.
Mensajes: 398
Antigüedad: 12 años, 2 meses
Puntos: 23
Respuesta: Cambiando de $_GET a $_POST

Hola julia2021 no soy princk093 pero te puedo ayudar en este caso.

Te cuento, al enviar el formulario la variable $_POST siempre sera verdadero por que tiene valores dentro ya que es un array asociativo, si no lo envías este sera falso.

Ahora lo importante en este caso es que compruebes si tiene datos la clave que nos interesa del array:
Código PHP:
Ver original
  1. if(!empty($_POST['id_alumno'])){//Si $_POST['id_alumno'] no esta vacía es verdadero
  2.     $alumnos->Edit();
  3. } else {
  4.      include(HTML_DIR . 'alumnos/edit_alumno.php');
  5. }

ojala te sirva. Saludos!
__________________
Un buen programa depende de la imaginación.
  #5 (permalink)  
Antiguo 14/06/2017, 20:27
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Sonrisa Respuesta: Cambiando de $_GET a $_POST

Tuuuurbo tengo contentura con tu respuesta, voy a probar y te aviso. Graciasssss

Última edición por julia2021; 14/06/2017 a las 20:35
  #6 (permalink)  
Antiguo 15/06/2017, 08:48
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Sonrisa Respuesta: Cambiando de $_GET a $_POST

SIN QUERER MARQUE ESTE TEMA COMO "SOLUCIONADO" y AUN NO ES ASI
Me funciono esa parte, perfecto !!!!

Pero me volví a perder
, ahora recibo mi array correctamente,

cuando hago echo var_export($_POST['id_alumno']) me devuelve array ( 0 => '1', 1 => '2', 2 => '3', 3 => '4', )

y eso esta correcto, pero ahora no sé como seleccionar el id_alumno que me interesa, es decir, si lo capturo en una variable haria algo como esto: $mivariable = $_POST['id_alumno'][0], pero esto es si me interesara el primer registro, pero si me mandan el registro 3 haría algo como esto $mivariable = $_POST['id_alumno'][2].

Entonces cómo le hago para indicar el id_alumno que me interesa ?
$_POST['id_alumno'][¿?]

Última edición por julia2021; 15/06/2017 a las 10:21
  #7 (permalink)  
Antiguo 15/06/2017, 14:01
 
Fecha de Ingreso: septiembre-2015
Mensajes: 140
Antigüedad: 2 años, 1 mes
Puntos: 13
Respuesta: Cambiando de $_GET a $_POST

yo creo que hacer una lista así no es la mejor idea realmente.
imagina 50 alumnos para la vista del usuario es algo molesto , yo consideraría algo como un select ( con los alumnos por cedula - nombre ).

selecciono mi alumno - botón editar (me carga el formulario con sus datos, cambio modifico) y un guardar.
esto con jquery-ajax seria mejor. mi humilde opinión a esto.
a menos que sea obligatorio mostrar "x" cantidad de alumnos


edit , me olvide de la pregunta tienes que recorrer el arreglo con un for , foreach , o while.
<input type="submit" value="Editar 4" />

como cada submit tiene un valor puedes verificar desde cual se envió.

Última edición por sonystar_17; 15/06/2017 a las 14:09
  #8 (permalink)  
Antiguo 15/06/2017, 14:36
Avatar de princk093  
Fecha de Ingreso: febrero-2015
Ubicación: Venezuela
Mensajes: 28
Antigüedad: 2 años, 8 meses
Puntos: 7
Respuesta: Cambiando de $_GET a $_POST

Si debes si por que si tener el diseño de esa forma, mostrarlos todos y tener un botón para cada uno entonces has esto:

Código HTML:
Ver original
  1. <form action="http://localhost/editar.php" method="post">
  2.  
  3.  <input type="hidden" name="id_alumno[]" value="1" />
  4.  <button type="submit" name="send" value="1">Editar 1 </button>
  5.  
  6.   <input type="hidden" name="id_alumno[]" value="2" />
  7.  <button type="submit" name="send" value="2">Editar 2 </button>
  8.  
  9.   <!-- etc ... -->
  10.  
  11. </form>

Y en php tan simple como:

Código PHP:
Ver original
  1. echo $_POST['id_alumno'][$_POST['send'] - 1];
  #9 (permalink)  
Antiguo 15/06/2017, 14:42
Avatar de princk093  
Fecha de Ingreso: febrero-2015
Ubicación: Venezuela
Mensajes: 28
Antigüedad: 2 años, 8 meses
Puntos: 7
Respuesta: Cambiando de $_GET a $_POST

O simplemente, todo tu problema se reduce a
Código HTML:
Ver original
  1. <input type="submit" name="id_alumno" value="1" />
  2. <input type="submit" name="id_alumno" value="2" />
  3. <input type="submit" name="id_alumno" value="3" />
  4.  <!-- etc ... -->
Ya que tienes puros campos hidden, pones el name y el id en el value del submit de una vez y listo
Código PHP:
Ver original
  1. echo $_POST['id_alumno'];

Dos soluciones distintas
  #10 (permalink)  
Antiguo 15/06/2017, 17:50
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Sonrisa Respuesta: Cambiando de $_GET a $_POST

Amiguito sonystar_17 te agradezco tu comentario, y es una forma muy válida de realizar la tarea descrita, pero me la piden en forma de listado.

Princk093, perfecto me ha funcionado correctamente de la forma echo $_POST['id_alumno'][$_POST['send'] - 1];

Millllllll gracias !!!!!
  #11 (permalink)  
Antiguo 16/06/2017, 14:19
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Sonrisa Respuesta: Cambiando de $_GET a $_POST

Hola amigos, ya me a funcionado cuasi todo pero ahora tengo un detalle que no me da y ya estoy que tiro la toalla, como comente arriba, estoy cambiando de GET a POST porque no me interesa que se vean los datos en el URL.

He implementado los cambios que me sugerieron y todo perfecto hasta el momento

Ahora solo me falta direccionar correctamente en mi class.Alumnos.php cuando ocurre un error.

En tu código (usando el metodo POST) redireccionas de la siguiente manera:
header('location: ?view=alumnos&mode=edit&id='.$this->id.'&success=true');

Pero como yo no estoy enviando el $id por el URL, la redireccion falla.
Aquí mi pregunta, cómo hago para pasar el $id vía post al momento de hacer dicha redirección

header('location: ?view=alumnos&mode=edit&success=true');

Agradecida por la ayuda que me puedas brindar
  #12 (permalink)  
Antiguo 16/06/2017, 20:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.720
Antigüedad: 9 años, 2 meses
Puntos: 2109
Respuesta: Cambiando de $_GET a $_POST

No se puede, pero podrías intentar guardarlo en sesión.
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 16/06/2017, 20:25
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Sonrisa Respuesta: Cambiando de $_GET a $_POST

Y cómo sería eso?.
Creo una variable $_SESSION['id_alumno'] = $id y listo ?
  #14 (permalink)  
Antiguo 17/06/2017, 11:44
Avatar de Turdo  
Fecha de Ingreso: julio-2005
Ubicación: .:Guadalajara:.
Mensajes: 398
Antigüedad: 12 años, 2 meses
Puntos: 23
Respuesta: Cambiando de $_GET a $_POST

Al principio de cada script padre lo primero que debes de escribir es session_start(); y despues tu variable $_SESSION['id_alumno'] = $id;
Código PHP:
Ver original
  1. <?php
  2.     session_start();
  3.     $_SESSION['id_alumno'] = $id;
  4.     include_once("algo.php");
  5.     ...
  6.     ...
  7.     ...
  8. ?>
__________________
Un buen programa depende de la imaginación.
  #15 (permalink)  
Antiguo 20/06/2017, 18:17
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 121
Antigüedad: 2 años, 10 meses
Puntos: 7
Respuesta: Cambiando de $_GET a $_POST

Me ha funcionado de mil maravillas, GRACIAS A TODOS !!!!!!!!



La zona horaria es GMT -6. Ahora son las 15:08.