Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Captura de dato para eliminar campos

Estas en el tema de Captura de dato para eliminar campos en el foro de PHP en Foros del Web. Que tal buen día a todos gracias por tomarse la molestia de leer esto, mi problema es el siguiente: Estoy haciendo un control de inventarios ...
  #1 (permalink)  
Antiguo 10/04/2013, 14:40
 
Fecha de Ingreso: diciembre-2012
Ubicación: .huihuihi
Mensajes: 21
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Captura de dato para eliminar campos

Que tal buen día a todos gracias por tomarse la molestia de leer esto, mi problema es el siguiente:

Estoy haciendo un control de inventarios donde obviamente debe de haber altas, bajas y modificaciones de accesorios, consumibles, proveedores etc...

La cuestión es que este tipo de cosas ya las había echo de manera estructurada y pues no tenia ningún problema ya que las variables que deseaba comparar(para hacer una baja de una fila por ejemplo) las enviaba por la URL, para que después la función de eliminar leyera el ID (por ejemplo) e hiciera la pertinente baja del campo con ese ID comparado con el campo de la tabla correspondiente de la base de datos(espero quede claro).

Ahora, estoy migrando funciones similares con algo mas de control, soy principiante y antes quise meterme en MVC de manera estructurada(ya con mas ánimo a OO después de un poco de practica).

Para ello utilizo un index.php para manipular los controladores y sus funciones para cada actividad y que el usuario esté en contacto únicamente con el index.php así, el index.php solicitará al control la información pertinente a cada petición.

Me tope con que las funciones de consulta siguen el mismo patrón, mando llamar todos los datos y los pongo en una tabla, teniendo así opciones de modificar los campos o eliminarlos.


Por ejemplo, y para poder explicarme mejor agrego de esta manera un proveedor:


PROVEEDOR CONTROLADOR:
Código PHP:
function agregarproveedor()
    {

   
    require 
'modelos/proveedorModelo.php';

     
//aqui obtengo los datos de un formulario, pero no lo anexo para no hacer      largo el post. 

    
$nombre=$_POST['nombre'];
    
$giro=$_POST['giro'];
    
$domicilio=$_POST['domicilio'];
    
$t1=$_POST['tel1'];
    
$t2=$_POST['tel2'];
    
$mail=$_POST['mail'];

    

    
$ejecuta insertarProveedor($db,$nombre,$giro,$domicilio,$t1,$t2,$mail);
    
    } 
PROVEEDOR MODELO:


Código PHP:
function insertarProveedor($db,$nombre,$giro,$domicilio,$t1,$t2,$mail)
            {
                
                
$sql "INSERT INTO proveedores (nombre,giro,domicilio,telefono1,telefono2,email) 
                values ('$nombre','$giro','$domicilio','$t1','$t2','$mail')"
;
                
                
$insercion $db->prepare($sql);

                
$resultado=$insercion->execute();  
                
                if(empty(
$resultado)){
                echo 
"\nPDOStatement::errorInfo(): \n";
                
$arr $db->errorInfo();
                
print_r($arr);
                echo 
"<br>\nPDOStatement::ERROR CODE(): ";
                print 
$db->errorCode();
            
                        echo 
"<script language=\"javascript\">alert(\"Error al insertar el registro en la base de datos, no se han generado cambios.\")
                        location.href = \"index.php?controlador=proveedor&accion=listar\";
                        ;</script>"
;
                        die();                
                
                }

        if(isset(
$resultado)){
                echo 
"<script language=\"javascript\">alert(\"Proveedor agregado con Éxito.\")
                        location.href = \"index.php?controlador=proveedor&accion=listar\";
                        ;</script>"
;
                        
                        
                            }
    
            } 

Me direcciona a la parte de mostrar proveedores existentes, que de groso modo y haciendo un SELECT resulta esto:



Código PHP:
<?php
    
foreach($items as $item)
    {
    
?>
        <tr>
        
          <td><?php echo $item['nombre']?></td>
          <td><?php echo $item['giro']?></td>
          <td><?php echo $item['domicilio']?></td>
          <td><?php echo $item['telefono1']?></td>
          <td><?php echo $item['telefono2']?></td>
          <td><?php echo $item['email']?></td>
          //debo aclarar que este es el campo que quiero enviar a la accion de eliminarProv(idproveedor)<?php $item['idproveedor']?>
          
/* Esto no sirve asi que no le hagan caso, lo pongo para ilustrar un poco.
<td><a href=index.php?controlador=proveedor&accion=actualizar><img src="style/actualizar.png"/></a></td>
          <td><a href=index.php?controlador=proveedor&accion=eliminarProv><img src="style/close.png"/></a></td>*/

        
        </tr>
        <?php


Si deseo eliminar por ejemplo un proveedor con un ID=3 debo de enviarle a una funcion ese valor, pero como lo hago ya que al insertar el proveedor puedo enviarle los datos por POST ya que es un formulario, pero en este caso no es un formulario, es una tabla de consulta(como la imagen de arriba), como le puedo hacer para que al darle click en la imagen o botón o link(la imagen de la X) le mande a la función el id del proveedor y posteriormente elimine de la base de datos el campo correspondiente?, recordar que por url le paso unicamente al index.php las acciones y el controlador correspondiente de la siguiente manera: index.php?controlador=proveedor&accion=eliminarPro v

Así que, ¿Alguna sugerencia?, muchas gracias por sus respuestas.
  #2 (permalink)  
Antiguo 10/04/2013, 15:30
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Captura de dato para eliminar campos

Holas, gunsofledz.

Asumiendo que tienes prohibido enviar el ID del proveedor por url como lo haces con las variables "controlador" y "accion", la manera de hacer que el botón funcione sin formulario es usando javascript: le asignas una función JS al evento onclick del botón, algo como:

Código PHP:
 <td><img src="style/close.png" onclick="eliminarProveedor(<?php print $item["id"]; ?>)"/></td>
La función eliminarProveedor() la puedes programar usando Javascript simple o con Ajax, si lo quieres más sofisticado. Hay muchas maneras de enviar los datos sin que se recargue la página actual: creando un mini formulario oculto en tu página, al cual le envíes los datos y fuerces su envío (submit) dentro de un iframe oculto; enviando los datos por URL, sin formulario, al iframe; enviando los datos vía Ajax a un DIV HTML (o cualquier objeto HTML tipo contenedor); capturando con un framework Javascript (ej.: JQuery) el evento onclick de cada botón y realizando las acciones anteriores, pero de manera más elegante; y etc. Investiga al respecto de esto, pues encontrarás mucho material sobre cómo enviar formularios sin ser formularios y cosas así :P

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 10/04/2013, 20:53
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: Captura de dato para eliminar campos

podes hacer
Código HTML:
<td>
<form name="<?=$idProveedor?>">
<input name="id" value="<?=$idProveedor?>">
<img src="rutaImegen" onclick="this.form.submit()">
</form>
</td> 
El nombre del formulario ponele el idProveedor, para que no se repita, es resto es depurar un poco pero es la idea general
  #4 (permalink)  
Antiguo 11/04/2013, 08:47
 
Fecha de Ingreso: diciembre-2012
Ubicación: .huihuihi
Mensajes: 21
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Captura de dato para eliminar campos

Hola buenos días a todos y muchas gracias por responder quinqui & luis010182.

Fíjense que ya lo resolví. Quinqui, ya me había puesto a leer sobre el envío de datos con formularios ocultos y no se que otras cosas, la verdad estoy perdido con Javascrip o Ajax y por eso no lo vi como una posibilidad concreta, pero bueno leí mas toda la noche(como me recomendaste) y pues me daba ideas pero no funcionaban, gracias por alentarme a seguir buscando y leyendo. Luis010182 me inspiraste con las formas ocultas y pensé meter un pequeño formulario con campo oculto para que al darle al botón enviar (puse botones y no imágenes esta vez) se enviara al dicho evento, me quedó asi:

Código PHP:
 <tr>
        
          <td><?php echo $item['nombre']?></td>
          <td><?php echo $item['giro']?></td>
          <td><?php echo $item['domicilio']?></td>
          <td><?php echo $item['telefono1']?></td>
          <td><?php echo $item['telefono2']?></td>
          <td><?php echo $item['email']?></td>
  
          <td><form name="eliminar" method="POST" action="index.php?controlador=proveedor&accion=eliminarProv"><input type="text" name="id" value="<?php echo $item['idproveedor']?>" style="display:none" READONLY><input type="submit" class="button" name="boton" id="boton" value="Eliminar" /></form></td>
        </tr>
Lo único que puse fue un input de tipo texto con un valor predeterminado (llenado con el 'idproveedor' automáticamente con PHP) y ocultándolo con la propiedad style="dysplay:none", con esta propiedad no ocupa espacio en el formulario ya que con esta propiedad style="visibility:hidden" si ocupa espacio y lo puse de solo lectura, así que ya puedo eliminar los campos que deseo, si tienen una sugerencia o método el cual pueda mejorar mi procedimiento estaría muy agradecido, pero por lo mientras gracias por tomarse la molestia de ayudarme. Mil gracias.
  #5 (permalink)  
Antiguo 11/04/2013, 12:22
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Captura de dato para eliminar campos

Qué bueno que los consejos te encaminaron :)
En el formulario que tienes, puedes reemplazar el campo input de texto por uno de tipo oculto, que es invisible al usuario y te evitas tener que dar atributos a uno visible para volverlo invisible:

Código PHP:
 <input type="hidden" name="id" id="idproveedor_<?php print $item["idproveedor"]; ?>" value="<?php print $item["idproveedor"]; ?>" />
Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*

Etiquetas: altas, funcion, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




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