Nueva pregunta

Pregunta:

Fecha: 30-01-2019 11:50:36 (En Español)

No duplicar registro de 2 columnas en la BD con PHP y MYSQL[Resuelta]

Que tal comunidad tengo este problema, en el siguiente codigo agrego 10 registros y al momento de querer volver a repetirlos solo me cuenta el primer registro en dado caso de que lo repita, pero si solo modifico el primero y los demas los dejo igual si me los agrega

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $razonSocial = $_POST["razonsocial"];
    $idCliente = $_POST["idCliente"];
    $cliente = $_POST["cliente"];
    $tipoContenedor = $_POST["tipoContenedor"];
    $contenedor1 = trim($_POST["contenedor1"]);
    $contenedor1 = strtoupper($contenedor1);
    $contenedor2 = trim($_POST["contenedor2"]);
    $contenedor2 = strtoupper($contenedor2);
    $contenedor3 = trim($_POST["contenedor3"]);
    $contenedor3 = strtoupper($contenedor3);
    $contenedor4 = trim($_POST["contenedor4"]);
    $contenedor4 = strtoupper($contenedor4);
    $contenedor5 = trim($_POST["contenedor5"]);
    $contenedor5 = strtoupper($contenedor5);
    $contenedor6 = trim($_POST["contenedor6"]);
    $contenedor6 = strtoupper($contenedor6);
    $contenedor7 = trim($_POST["contenedor7"]);
    $contenedor7 = strtoupper($contenedor7);
    $contenedor8 = trim($_POST["contenedor8"]);
    $contenedor8 = strtoupper($contenedor8);
    $contenedor9 = trim($_POST["contenedor9"]);
    $contenedor9 = strtoupper($contenedor9);
    $contenedor10 = trim($_POST["contenedor10"]);
    $contenedor10 = strtoupper($contenedor10);
    
    $tipoOperacion = $_POST["tipoOperacion"];
    $fechaAlta = $_POST["fecha"];
    
    if($contenedor10=='X'){
        $contenedor10="";
    }
    
    $cantCont=0;
if($contenedor1 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor2 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor3 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor4 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor5 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor6 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor7 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor8 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor9 <>""){
   $cantCont=$cantCont +1;
}
if($contenedor10 <>""){
   $cantCont=$cantCont +1;
}
    /*echo("INSERT INTO viajes (idCliente, Cliente, idTipoContenedor, Contenedor1, Contenedor2, CantCont,
    Referencia, CartaPorte, Origen, Destino, Placas, Operador, TipoOperacion, FechaAlta) VALUES
    (".$idCliente.",'".$cliente."',".$tipoContenedor.",'".$contenedor1."','".$contenedor2."', ".$cantCont.", '".$cartaPorte."',
    '".$referencia."','".$origen."', '".$destino."', '".$placa."', '".$operador."', '".$tipoOperacion."', '".$fechaAlta."');");*/
    
    // Primero Ejecuta una Orden de Consulta:	
    $consulta = query("SELECT * FROM viajes WHERE contenedor1='$contenedor1'");
    $row_cnt = mysqli_num_rows($consulta);
   
    // Si hay uno o más de un cliente registrado con ese ID, no se hay la Inserción.... 
    if ($row_cnt >= 1) { 

        echo  $razonSocial." Este contenedor ya se encuentra asegurado: ".$contenedor1;

    } else {

        // En caso Contrario, SI...

        // Procedimiento para incluir datos en Base de Datos	
    
    query("INSERT INTO viajes (idCliente, Cliente, idTipoContenedor, Contenedor1, Contenedor2, Contenedor3, Contenedor4, Contenedor5, Contenedor6, Contenedor7, Contenedor8, Contenedor9, Contenedor10, CantCont, TipoOperacion, FechaAlta) VALUES
    (".$idCliente.",'".$cliente."',".$tipoContenedor.",'".$contenedor1."','".$contenedor2."','".$contenedor3."','".$contenedor4."','".$contenedor5."','".$contenedor6."','".$contenedor7."','".$contenedor8."','".$contenedor9."','".$contenedor10."', ".$cantCont.", '".$tipoOperacion."', '".$fechaAlta."')");
}
}
?>
Etiquetas: Votos: 0 - Respuestas: 10 - Vistas: 6 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  •  
      1  
     
    Fecha: 31-01-2019 01:49:19 Buen Día.
    Estuve revisando tu codigo, me hice una tabla igual a la tuya y con lo que te adjunte funcionó, lo unico que yo agregue una cadena de conexion llamada link para poder hacer mis pruebas, deberias comentar la cadena de conexion y quitar en las sentencias a la bd la conexion link y dejarla como vos ejecutas tus consultas.
    fijate si te sirve. Saludos
    /*-----Conexion para hacer prueba*/
    $link = new mysqli("localhost", "root", "clave", "nombreBaseDatos");
    if ($link->connect_errno) {
        echo "Falló la conexión a MySQL: (" . $link->connect_errno . ") " . $link->connect_error;
    }
    /*-------------*/
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $razonSocial = $_POST["razonsocial"];
        $idCliente = $_POST["idCliente"];
        $cliente = $_POST["cliente"];
        $tipoContenedor = $_POST["tipoContenedor"];
        
        //Declaro un arreglo que me almacene toos los contenedores
        $contenedores=[];
        $contenedores['Contenedor1']=strtoupper(trim($_POST['contenedor1']));
        $contenedores['Contenedor2']=strtoupper(trim($_POST['contenedor2']));
        $contenedores['Contenedor3']=strtoupper(trim($_POST['contenedor3']));
        $contenedores['Contenedor4']=strtoupper(trim($_POST['contenedor4']));
        $contenedores['Contenedor5']=strtoupper(trim($_POST['contenedor5']));
        $contenedores['Contenedor6']=strtoupper(trim($_POST['contenedor6']));
        $contenedores['Contenedor7']=strtoupper(trim($_POST['contenedor7']));
        $contenedores['Contenedor8']=strtoupper(trim($_POST['contenedor8']));
        $contenedores['Contenedor9']=strtoupper(trim($_POST['contenedor9']));
        $contenedores['Contenedor10']=strtoupper(trim($_POST['contenedor10']));
      
        //---- esto ya estaba
        $tipoOperacion = $_POST["tipoOperacion"];
        $fechaAlta = $_POST["fecha"];
        
        if($contenedores['Contenedor10']=='X'){
            $contenedores['Contenedor10']='';
        }
            
        // Recorro el arreglo para ver cuantos tienen datos y obtener la cantidad de contenedores
        $cantCont=0;
        foreach ($contenedores as $contenedor) {
            if($contenedor <> ''){
                $cantCont++;
            }
        }
       
        // Determinar si ya estan en la bd, cada contenedor
        $asegurados=[];
        foreach ($contenedores as $contenedor => $value) {
    
            $sql="SELECT * FROM viajes WHERE Contenedor1='".$value."' OR Contenedor2='".$value."' OR Contenedor3='".$value."' OR Contenedor4='".$value."' OR Contenedor5='".$value."' OR Contenedor6='".$value."' OR Contenedor7='".$value."' OR Contenedor8='".$value."' OR Contenedor9='".$value."' OR Contenedor10='".$value."'";
            
            $consulta = $link->query($sql);
            $row_cnt = mysqli_num_rows($consulta);
    
            if ($row_cnt){
                $asegurados[]=$contenedor;
            }
        }
    
        // Si hay contenedores en la BD Imprimira por pantalla y no ejecuta la insersion.
        if(count($asegurados) > 0){
            echo  $razonSocial." Este contenedor ya se encuentra asegurado: ".'<br>';
            foreach ($asegurados as $contenedor) {
                echo $contenedor.'<br>';
            }
            // Aqui podrias pegar toda la consulta de insert en caso que 
            //quieras guardar de igual forma el registro.
    
    
        }else{
        	// En el caso que ninguno de los contenedores este asegurado
        	$link->query("INSERT INTO viajes (idCliente, Cliente, idTipoContenedor, Contenedor1, Contenedor2, Contenedor3, Contenedor4, Contenedor5, Contenedor6, Contenedor7, Contenedor8, Contenedor9, Contenedor10, CantCont, TipoOperacion, FechaAlta) VALUES
        		(".$idCliente.",'".$cliente."',".$tipoContenedor.",'".$contenedores['Contenedor1']."','".$contenedores['Contenedor2']."','".$contenedores['Contenedor3']."','".$contenedores['Contenedor4']."','".$contenedores['Contenedor5']."','".$contenedores['Contenedor6']."','".$contenedores['Contenedor7']."','".$contenedores['Contenedor8']."','".$contenedores['Contenedor9']."','".$contenedores['Contenedor10']."', ".$cantCont.", '".$tipoOperacion."', '".$fechaAlta."')"); 
           
        }/* if asegurado*/
       
    }
    
      Votos: 1 - Link respuesta
     
  • Fecha: 31-01-2019 05:00:30 Que tal Raul modifique el codigo que me mandaste y me salio el siguiente error:

    Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\app\inc\functions.php on line 54
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $razonSocial = $_POST["razonsocial"];
        $idCliente = $_POST["idCliente"];
        $cliente = $_POST["cliente"];
        $tipoContenedor = $_POST["tipoContenedor"];
        
        //Declaro un arreglo que me almacene toos los contenedores
        $contenedores=[];
        $contenedores['Contenedor1']=strtoupper(trim($_POST['contenedor1']));
        $contenedores['Contenedor2']=strtoupper(trim($_POST['contenedor2']));
        $contenedores['Contenedor3']=strtoupper(trim($_POST['contenedor3']));
        $contenedores['Contenedor4']=strtoupper(trim($_POST['contenedor4']));
        $contenedores['Contenedor5']=strtoupper(trim($_POST['contenedor5']));
        $contenedores['Contenedor6']=strtoupper(trim($_POST['contenedor6']));
        $contenedores['Contenedor7']=strtoupper(trim($_POST['contenedor7']));
        $contenedores['Contenedor8']=strtoupper(trim($_POST['contenedor8']));
        $contenedores['Contenedor9']=strtoupper(trim($_POST['contenedor9']));
        $contenedores['Contenedor10']=strtoupper(trim($_POST['contenedor10']));
      
        //---- esto ya estaba
        $tipoOperacion = $_POST["tipoOperacion"];
        $fechaAlta = $_POST["fecha"];
        
        if($contenedores['Contenedor10']=='X'){
            $contenedores['Contenedor10']='';
        }
            
        // Recorro el arreglo para ver cuantos tienen datos y obtener la cantidad de contenedores
        $cantCont=0;
        foreach ($contenedores as $contenedor) {
            if($contenedor <> ''){
                $cantCont++;
            }
        }
       
        // Determinar si ya estan en la bd, cada contenedor
        $asegurados=[];
        foreach ($contenedores as $contenedor => $value) {
            $sql="SELECT * FROM viajes WHERE Contenedor1='".$value."' OR Contenedor2='".$value."' OR Contenedor3='".$value."' OR Contenedor4='".$value."' OR Contenedor5='".$value."' OR Contenedor6='".$value."' OR Contenedor7='".$value."' OR Contenedor8='".$value."' OR Contenedor9='".$value."' OR Contenedor10='".$value."'";
            
            $consulta = query($sql);
            $row_cnt = mysqli_num_rows($consulta);
            if ($row_cnt){
                $asegurados[]=$contenedor;
            }
        }
        // Si hay contenedores en la BD Imprimira por pantalla y no ejecuta la insersion.
        if(count($asegurados) > 0){
            echo  $razonSocial." Este contenedor ya se encuentra asegurado: ".'<br>';
            foreach ($asegurados as $contenedor) {
                echo $contenedor.'<br>';
            }
            // Aqui podrias pegar toda la consulta de insert en caso que 
            //quieras guardar de igual forma el registro.
        }else{
            // En el caso que ninguno de los contenedores este asegurado
            query("INSERT INTO viajes (idCliente, Cliente, idTipoContenedor, Contenedor1, Contenedor2, Contenedor3, Contenedor4, Contenedor5, Contenedor6, Contenedor7, Contenedor8, Contenedor9, Contenedor10, CantCont, TipoOperacion, FechaAlta) VALUES
                (".$idCliente.",'".$cliente."',".$tipoContenedor.",'".$contenedores['Contenedor1']."','".$contenedores['Contenedor2']."','".$contenedores['Contenedor3']."','".$contenedores['Contenedor4']."','".$contenedores['Contenedor5']."','".$contenedores['Contenedor6']."','".$contenedores['Contenedor7']."','".$contenedores['Contenedor8']."','".$contenedores['Contenedor9']."','".$contenedores['Contenedor10']."', ".$cantCont.", '".$tipoOperacion."', '".$fechaAlta."')"); 
           
        }/* if asegurado*/
       
    }


    Este es el codigo de functions.php
    <?php
    //ini_set('display_errors', 1);
    //ini_set('display_startup_errors', 1);
    //error_reporting(E_ALL);
    
    $siteURL = "http://segurosesquivel.com.mx/";
    $emailHost= "mail.segurosesquivel.com.mx";
    $email = "sistema@segurosesquivel.com.mx";
    $emailPass = "nnIPd8N{e2az";
    $emailPort = "465";
    
    //error_reporting(0);
    date_default_timezone_set("America/Mexico_City");
    
    if (!isset($link)) {$link = false;}
    
    // getMyConection()
    function getMyConection($conexion) {
    	global $link;
    	
    	$db_host = "containerallrisk.com";
    	$db_name = "containerallrisk_app";
    	$db_user = "containerallrisk_appsa";
    	$db_pass = "IvAwe{[EI=Rj";
    
    	$link = mysqli_connect($db_host, $db_user, $db_pass, $db_name) or die("No se pudo conectar a la base de datos...");
    	return $link;
    	mysqli_query("SET NAMES utf8");
    
    }
    
    // closeConection()
    function closeConection(){
    	global $link;
    	if($link != false)
    	{
    		mysqli_close($link);
    	}
    	else
    	{
    		$link = false;
    	}
    }
    
    // Muestra la cantidad de registros($result)
    function CantidadRegistros($result)
    {
    	return mysqli_num_rows($result);
    }
    
    // query($query)
    function query($query, $conexion=0)
    {
    	return mysqli_query(getMyConection($conexion), $query);
    }
    
    function sql_special_chars($string)
    {
    	$string = str_replace("\'", "'", $string);
    	$string = str_replace("'", "''", $string);
    	$string = htmlspecialchars($string);
    	return $string;
    }
    
    //obtiene la fecha de formato largo por ejemplo: Jueves, 17 de Mayo de 2012
    function longDateFormat()
    {
    	setlocale(LC_TIME, 'es_MX');
    	
    	$day = strftime('%e', mktime(0,0,0,date("m"),date("d"),date("Y")));
    	$weekday = strftime('%A', mktime(0,0,0,date("m"),date("d"),date("Y")));
    	$monthname = strftime('%B', mktime(0,0,0,date("m"),date("d"),date("Y")));
    	$year = strftime('%Y', mktime(0,0,0,date("m"),date("d"),date("Y")));
      
    	$fecha = "<p>" . ucfirst($weekday) . ", " . $day . " de " . ucfirst($monthname) . " de " . $year . "</p>";
    	
    	return $fecha;
    }
    
    //Genera aleatoriamente una cadena de 12 caracteres (por default) con letras minusculas, mayusculas y numeros
    //Esta funcion es usada para renovar la contraseña una vez que el usuario perdió la suya
    function randomPassword($numberOfCharacters=12) {
        $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
        $pass = array(); //remember to declare $pass as an array
        $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
        for ($i = 0; $i < $numberOfCharacters; $i++) {
            $n = rand(0, $alphaLength);
            $pass[] = $alphabet[$n];
        }
        return implode($pass); //turn the array into a string
    }
    ?>
      Votos: 0 - Link respuesta
     
  •  
      1  
     
    Fecha: 31-01-2019 05:31:57 Hola, estuve mirando tu error, aparentemente es cuestion de configurar en php.ini el tiempo de ejecucion, como en el bucle de consultas tal vez se demora demasiado con la misma conexion abierta, tal vez puedes modificar eso o cerrar la conexión en cada bucle.

    ini_set('max_execution_time', 300); //300 seconds = 5 minutes

    prueba con las 2 opciones haber que resuelves.
    estamos en contacto
      Votos: 1 - Link respuesta
     
  •  
      1  
     
    Fecha: 31-01-2019 05:38:31 Lee aqui al respecto   Votos: 1 - Link respuesta
     
  • Fecha: 31-01-2019 05:39:59 Disculpa Raul esto en donde lo pongo?
    ini_set('max_execution_time', 300); //300 seconds = 5 minutes
    


    En el codigo que me pasaste o en el archivo inc\functions.php
    function query($query, $conexion=ini_set('max_execution_time', 300);
    {
    	return mysqli_query(getMyConection($conexion), $query);
    }
      Votos: 0 - Link respuesta
     
  • Fecha: 31-01-2019 05:55:23 Lo coloque en el código que me pasaste, pero le ingreso 4 de 10 registros y me dice que los vacíos ya están registrados ¿¿??


    Este contenedor ya se encuentra asegurado:
    Contenedor5 //no le puse datos
    Contenedor6 //no le puse datos
    Contenedor7 //no le puse datos
    Contenedor8 //no le puse datos
    Contenedor9 //no le puse datos
    Contenedor10 //no le puse datos

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $razonSocial = $_POST["razonsocial"];
        $idCliente = $_POST["idCliente"];
        $cliente = $_POST["cliente"];
        $tipoContenedor = $_POST["tipoContenedor"];
        
        //Declaro un arreglo que me almacene toos los contenedores
        $contenedores=[];
        $contenedores['Contenedor1']=strtoupper(trim($_POST['contenedor1']));
        $contenedores['Contenedor2']=strtoupper(trim($_POST['contenedor2']));
        $contenedores['Contenedor3']=strtoupper(trim($_POST['contenedor3']));
        $contenedores['Contenedor4']=strtoupper(trim($_POST['contenedor4']));
        $contenedores['Contenedor5']=strtoupper(trim($_POST['contenedor5']));
        $contenedores['Contenedor6']=strtoupper(trim($_POST['contenedor6']));
        $contenedores['Contenedor7']=strtoupper(trim($_POST['contenedor7']));
        $contenedores['Contenedor8']=strtoupper(trim($_POST['contenedor8']));
        $contenedores['Contenedor9']=strtoupper(trim($_POST['contenedor9']));
        $contenedores['Contenedor10']=strtoupper(trim($_POST['contenedor10']));
      
        //---- esto ya estaba
        $tipoOperacion = $_POST["tipoOperacion"];
        $fechaAlta = $_POST["fecha"];
        
        if($contenedores['Contenedor10']=='X'){
            $contenedores['Contenedor10']='';
        }
            
        // Recorro el arreglo para ver cuantos tienen datos y obtener la cantidad de contenedores
        $cantCont=0;
        foreach ($contenedores as $contenedor) {
            if($contenedor <> ''){
                $cantCont++;
            }
        }
       
        ini_set('max_execution_time', 30); //300 seconds = 5 minutes
    
        // Determinar si ya estan en la bd, cada contenedor
        $asegurados=[];
        foreach ($contenedores as $contenedor => $value) {
            $sql="SELECT * FROM viajes WHERE Contenedor1='".$value."' OR Contenedor2='".$value."' OR Contenedor3='".$value."' OR Contenedor4='".$value."' OR Contenedor5='".$value."' OR Contenedor6='".$value."' OR Contenedor7='".$value."' OR Contenedor8='".$value."' OR Contenedor9='".$value."' OR Contenedor10='".$value."'";
            
            $consulta = query($sql);
            $row_cnt = mysqli_num_rows($consulta);
            if ($row_cnt){
                $asegurados[]=$contenedor;
            }
        }
        // Si hay contenedores en la BD Imprimira por pantalla y no ejecuta la insersion.
        if(count($asegurados) > 0){
            echo  $razonSocial." Este contenedor ya se encuentra asegurado: ".'<br>';
            foreach ($asegurados as $contenedor) {
                echo $contenedor.'<br>';
            }
            // Aqui podrias pegar toda la consulta de insert en caso que 
            //quieras guardar de igual forma el registro.
        }else{
            // En el caso que ninguno de los contenedores este asegurado
            query("INSERT INTO viajes (idCliente, Cliente, idTipoContenedor, Contenedor1, Contenedor2, Contenedor3, Contenedor4, Contenedor5, Contenedor6, Contenedor7, Contenedor8, Contenedor9, Contenedor10, CantCont, TipoOperacion, FechaAlta) VALUES
                (".$idCliente.",'".$cliente."',".$tipoContenedor.",'".$contenedores['Contenedor1']."','".$contenedores['Contenedor2']."','".$contenedores['Contenedor3']."','".$contenedores['Contenedor4']."','".$contenedores['Contenedor5']."','".$contenedores['Contenedor6']."','".$contenedores['Contenedor7']."','".$contenedores['Contenedor8']."','".$contenedores['Contenedor9']."','".$contenedores['Contenedor10']."', ".$cantCont.", '".$tipoOperacion."', '".$fechaAlta."')"); 
           
        }/* if asegurado*/
       
    }
      Votos: 0 - Link respuesta
     
  •  
      1  
     
    Fecha: 31-01-2019 06:39:42 ah, pero ya diste un avance, seguramente es cuestion de una validacion, debe haber campos vacios en tu bd y como hay coincidencia los incluye. cuando pueda lo vuelvo a ver y te digo, pero anda viendo en la parte de la consulta, que no realice la consulta si viene vacio.   Votos: 1 - Link respuesta
     
  •  
      1  
     
    Fecha: 31-01-2019 06:44:35 Algo asi....
    fijate si te sirve.

    
    foreach ($contenedores as $contenedor => $value) {
    	if($value != ""){
    		$sql="SELECT * FROM viajes WHERE Contenedor1='".$value."' OR Contenedor2='".$value."' OR Contenedor3='".$value."' OR Contenedor4='".$value."' OR Contenedor5='".$value."' OR Contenedor6='".$value."' OR Contenedor7='".$value."' OR Contenedor8='".$value."' OR Contenedor9='".$value."' OR Contenedor10='".$value."'";
            
           		 $consulta = query($sql);
            	$row_cnt = mysqli_num_rows($consulta);
            	if ($row_cnt){
                		$asegurados[]=$contenedor;
            	}
    	}
    
    }
    
    
      Votos: 1 - Link respuesta
     
  • Fecha: 31-01-2019 07:10:34 Raul Rch

    De nuevo te lo agradezco quedo al 100 con tu ayuda muchas gracias, saludos hasta Argentina.
      Votos: 0 - Link respuesta
     
  •  
      1  
     
    Fecha: 31-01-2019 07:20:33 Ok, me alegro que hayas resuelto tu necesidad. Estoy en aprendizaje tambien, espero no haberte confundido mucho, cualquier cosa seguimos en contacto.
    Saludos...
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com