Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] como guardar en la base de datos con foreach php

Estas en el tema de como guardar en la base de datos con foreach php en el foro de PHP en Foros del Web. Hola a todos, Estoy desarrollando un formulario php en el cual imprimo en pantalla los campos que vienen de la base de datos, estoy utilizando ...
  #1 (permalink)  
Antiguo 21/09/2018, 08:45
 
Fecha de Ingreso: noviembre-2015
Mensajes: 49
Antigüedad: 2 años, 11 meses
Puntos: 2
como guardar en la base de datos con foreach php

Hola a todos,

Estoy desarrollando un formulario php en el cual imprimo en pantalla los campos que vienen de la base de datos, estoy utilizando un foreach con un incremento $i para que cuando el registro tenga más de un domicilio lo pueda imprimir con diferente nombre, a continuación dejo el código de cómo lo imprimo en pantalla:
Código PHP:
$consulta mysqli_query($con"SELECT m.*, u.usuario, d.* FROM medico m, usuarios u, domicilio d WHERE u.usuario = '$oper' AND m.id_medico = d.id_medico AND m.id_medico='$id'");


                        
$i 1;
            foreach (
$consulta as $fila) {
                
echo
"domicilio id<input  name='id_domicilio$i' id='id_domicilio$i' value='".$fila['id_domicilio']."'</input>";

                        echo 
"<div class='registros' id=''><div class='registros-cinco' id=''>Domicilio</br>";
                        

echo
"calle<input name='calle$i' id='calle$i' value='".$fila['calle']."'</input>
                        número exterior<input type='text' name='numero_exterior$i' id='numero_exterior$i' style='width:50px;' value='"
.$fila['numero_exterior']."'</input>
                        número interior<input type='text' name='numero_interior$i' id='numero_interior$i' style='width:50px;' value='"
.$fila['numero_interior']."'</input>
                        referencia<input type='text' name='referencia$i' id='referencia$i' value='"
.$fila['referencia']."'</input></div></br>"
En el name aumenté la variable $i, (name='calle$i'), funciona perfectamente bien, ya que al revisar en el navegador si le cambia el nombre a calle1, calle2, calle3. Mi problema es que al guardar, no realiza la operación correctamente; es decir, que cuando intento el siguiente código, simplemente no guarda en la base de datos correctamente, en sí se cicla y guarda varias veces el mismo campo. A continuación el código:
Código PHP:
<?php 

include('conexion.php');
if (isset(
$_POST['btn1'])) {
    
$btn $_POST['btn1'];
$op=$_SESSION['usuario'];
if (
$btn "grabar") {

    
#variables de la interfaz-----------------------------------------------------------------------------
    
$i=1;
    
$id_domicilio $_POST['id_domicilio$i'];
    
$calle $_POST["calle$i"];
    
$tipificacion $_POST['marcacion'];
    
$fecha $_POST['fecha'];
    
$bandera =  $_POST['bandera'];
    
$id_medico $_POST['id_medico'];

    
#consulta para recuperar el id_medico de la tabla para compararlo con el input id_medico-------------------
    
$consulta_general=mysqli_query($con"SELECT d.id_domicilio, d.calle, u.id_usuario, cu.id_campania from domicilio d, usuarios u, campania_usuario cu where u.usuario = '$op' and cu.id_campania_usuario = cu.id_campania  and d.id_domicilio = '$id_domicilio'");
    while (
$cg mysqli_fetch_row($consulta_general)) {
       
$iddom $cg['0'];
        
$dmed $cg['1']; #traemos la posición 0 de la tabla
        
$pr $cg['3'];
        
$pr1 $cg['3'];
    }

           foreach (
$consulta_general as $consulta) {
               
           
    if (
$calle != $dmed) {

    
#consulta que inserta en la tabla cambio--------------------------------------------------------------
    
$consulta="INSERT INTO cambio (nuevo, anterior, campo, id_campania, id_usuario, id_entidad, entidad, fecha_cambio) values ('$calle', '$dmed', 'calle', '$pr', '$pr1', '$iddom', 'Domicilio', '$fecha')";
    
$cs=mysqli_query($con,$consulta); #recibe la conexión y la consulta
  

}else{

}
$i++;
}
}
}

 
?>
Pero simplemente no funciona, mi consulta es cómo puedo hacer el ciclo para grabar en la base de datos el cambio por cada campo en un ciclo sin que se repita el guardado como 1000 veces.

Agradezco su apoyo.
Saludos
__________________
paco alonso
  #2 (permalink)  
Antiguo 21/09/2018, 21:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.957
Antigüedad: 5 años, 3 meses
Puntos: 370
Respuesta: como guardar en la base de datos con foreach php

Creo que te estas complicando, lo que tienes que hacer que los inputs sean arreglos
https://secure.php.net/manual/en/faq...aq.html.arrays
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 24/09/2018, 10:11
 
Fecha de Ingreso: noviembre-2015
Mensajes: 49
Antigüedad: 2 años, 11 meses
Puntos: 2
Respuesta: como guardar en la base de datos con foreach php

Cita:
Iniciado por hhs Ver Mensaje
Creo que te estas complicando, lo que tienes que hacer que los inputs sean arreglos
https://secure.php.net/manual/en/faq...aq.html.arrays
Gracias por tu respuesta, no se si me puedas apoyar un poco más; leí el manual que me enviaste pero al realizar pruebas con los cambios y el grabado en la base de datos solo me hace cambios en el último id, es decir; solamente manda un cambio de los input pero mi registro cuenta con 2 domicilios y no manda los cambios del primer domicilio sino del segundo.

Te envío una fracción del código:
Código PHP:
$consulta mysqli_query($con"SELECT m.*, u.usuario, d.* FROM medico m, usuarios u, domicilio d WHERE u.usuario = '$oper' AND m.id_medico = d.id_medico AND m.id_medico='$id'");


                        
$i 1;
            foreach (
$consulta as $fila) {
                    

echo
"calle<input name='calle' id='calle' value='".$fila['calle']."'</input>"
ahora, para guardar en la base de datos, estoy utilizando el siguiente código:
Código PHP:
$calle $_POST["calle"];
    
    
$tipificacion $_POST['marcacion'];
    
$fecha $_POST['fecha'];
    
$bandera =  $_POST['bandera'];
    
$id_medico $_POST['id_medico'];

    
#consulta para recuperar el id_medico de la tabla para compararlo con el input id_medico-------------------
    
$inp_med=mysqli_query($con"SELECT id_domicilio, calle FROM domicilio WHERE id_medico = '$id_medico'");
    while (
$didmed mysqli_fetch_row($inp_med)) {
        
$iddom $didmed['0'];
        
$dmed $didmed['1']; #traemos la posición 0 de la tabla
    
}
    
#consulta que trae el id_usuario de la sesión abierta----------------------------------------------
    
$sesion=mysqli_query($con"SELECT id_usuario FROM usuarios WHERE usuario = '$op'");
    while (
$ope mysqli_fetch_row($sesion)) {
        
$se $ope['0'];
    }
    
#consulta que trae el id_campania y que recibe el id_usuario con la posición 0 con la variable $se-------
    
$sql=mysqli_query($con"SELECT cu.id_campania, u.id_usuario FROM campania_usuario cu, usuarios u where cu.id_campania_usuario = cu.id_campania and cu.id_campania_usuario = cu.id_campania AND u.id_usuario = '$se'");
    while (
$re mysqli_fetch_row($sql)) {
        
$pr $re['0'];
        
$pr1 $re['1'];
    }

    
        

    if (
$calle != $dmed) {

    
#consulta que inserta en la tabla cambio--------------------------------------------------------------
    
$consulta="INSERT INTO cambio (nuevo, anterior, campo, id_campania, id_usuario, id_entidad, entidad, fecha_cambio) values ('$tipo_via', '$dmed', 'tipo_via', '$pr', '$pr1', '$iddom', 'Domicilio', '$fecha')";
    
$cs=mysqli_query($con,$consulta); #recibe la conexión y la consulta
    #insertamos en la tabla vueltas-------------------------------------------------------------------------
        
    
    
                
}else{

            }
        
    }

Son tres consultas con while porque necesito recuperar campos de las otras tablas y de esta forma mandarlos a insertar por posición, pero no me resulta con el input. Me puedes hacer un pequeño ejemplo de cómo grabarlo en la base de datos?.
Saludos y gracias.
__________________
paco alonso
  #4 (permalink)  
Antiguo 27/09/2018, 12:35
 
Fecha de Ingreso: abril-2006
Mensajes: 117
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: como guardar en la base de datos con foreach php

mira te aconsejo, que siempre hagas TEST pequeños de cada porcion de codigo que vayas a realizar, ya que recien estas entrando en PHP y asi saber que otros probelmas son causa de otras mas pequeñas ya veces simples

como ejemplo tomamos la porcion de CODIGO que usaas

Código PHP:
Ver original
  1. <?php
  2.     $i=1;
  3.     $id_domicilio = $_POST['id_domicilio$i'];
  4.     $calle = $_POST["calle$i"];
  5.     $tipificacion = $_POST['marcacion'];
  6.     $fecha = $_POST['fecha'];
en PHP puedes usar Comillas simples y Comillas dobles, pero cada una interactua diferente en ciertos casos, como en el ejemplo de tu codigo, estas usando comillas simples

' => comilla simple = todo lo que esta dentro, sera interpretado como string o cadena sin alteracion alguna

" => comilla doble = todo lo que contiene puede ser Strings O tambien variables O entidades Hexadecimales

fijate en el ejemplo de tu codigo


$_POST['id_domicilio$i'];

al usar comilla simple, la variable $i lo anulas , lo correcto seria

$_POST['id_domicilio'.$i]; para concatenar o $_POST["id_domicilio$i"];



La zona horaria es GMT -6. Ahora son las 19:12.