Nueva pregunta

Pregunta:

Fecha: 13-02-2019 05:31:42 (En Español)

Problema con mysql y php[Resuelta]

Hola comunidad tengo el siguiente problema, si agrega los campos pero me sale ese error

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /servicios-cliente.php on line 14

<?php
$idCliente=$_GET["id"];

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $nreg=$_POST["nreg"];
    foreach($_POST as $key=>$value){
        $info=explode("-",$key);
        if($info[0]=="precio") $campo="Precio";
        if($info[0]=="limite") $campo="LimitMaxRespons";
        if($info[0]=="deduciblem") $campo="DeducibleMaterial";
        if($info[0]=="deducibler") $campo="DeducibleRobo";
        
        $result=query("SELECT COUNT(*) AS 'Registro' FROM clientes C RIGHT JOIN Servicios S ON C.idCliente=S.idCliente WHERE C.idCliente=".$idCliente." and S.idTipoContenedor=".$info[1].";");
        $row = mysqli_fetch_array($result); // ES ESTA LINEA

        if($row["Registro"]==0){
            query("INSERT INTO Servicios (idCliente,idTipoContenedor,".$campo.") VALUES(".$idCliente.",".$info[1].",".$value.");");
        }else{
            query("UPDATE Servicios SET ".$campo."=".$value." WHERE idCliente=".$idCliente." and idTipoContenedor=".$info[1]);
        }
    }
}

if (isset($_GET["id"]) && is_numeric($_GET["id"])) {
    $idCliente = $_GET["id"];
    $result=query("SELECT * FROM clientes WHERE idCliente=".$idCliente);
    $row = mysqli_fetch_array($result);
}
?>
            <div class="row">
                <div class="col-lg-12">
                    <div class="ibox float-e-margins">
                        <div class="ibox-title">
                            <h5>SERVICIOS DEL CLIENTE - <?php echo $row["RazonSocial"]; ?></h5>
                        </div>
                        <div class="ibox-content">
                            <form id="mcliente" name="mcliente" method="post" action="" class="form-horizontal">
                                <div class="form-group">
                                    <label class="col-sm-2 control-label">&nbsp;</label>
                                    <div class="col-sm-10">
                                        <div class="row">
                                            <div class="col-md-3">Precio</div>
                                            <div class="col-md-3">Limite maximo de responsabilidad</div>
                                            <div class="col-md-3">Deducible Daño Material</div>
                                            <div class="col-md-3">Deducible Robo</div>
                                        </div>
                                    </div>

<?php
$result=query("SELECT TC.idTipoContenedor,TC.TipoContenedor, IFNULL((SELECT Precio FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS Precio, IFNULL((SELECT LimitMaxRespons FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS LimitMaxRespons, IFNULL((SELECT DeducibleMaterial FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS DeducibleMaterial, IFNULL((SELECT DeducibleRobo FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS DeducibleRobo FROM TiposContenedores TC ORDER BY TC.TipoContenedor;");
$cont=0;
while($row = mysqli_fetch_array($result)) {
    $cont=$cont+1;
?>
                                    <label class="col-sm-2 control-label"><?php echo $row["TipoContenedor"]; ?></label>
                                    <div class="col-sm-10">
                                        <div class="row">
                                            <div class="col-md-3 m-b"><input name="precio-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["Precio"] ?>" class="form-control"></div>
                                            <div class="col-md-3 m-b"><input name="limite-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["LimitMaxRespons"] ?>" class="form-control"></div>
                                            <div class="col-md-3 m-b"><input name="deduciblem-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["DeducibleMaterial"] ?>" class="form-control"></div>
                                            <div class="col-md-3 m-b"><input name="deducibler-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["DeducibleRobo"] ?>" class="form-control"></div>
                                        </div>
                                    </div>
<?php
}
?><input name="nreg" type="hidden" value="<?php echo $cont; ?>">
Etiquetas: Votos: 0 - Respuestas: 13 - Vistas: 12 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 13-02-2019 08:16:18 te esta indicando que la query no arrojo resultados o no se ejecuto, antes de parsear los resultados deberías de validar, algo así:

    
    if(mysqli_num_rows($result)>=1){
          $row = mysqli_fetch_array($result); 
    }else{
          //La consulta no tiene resultados
    }
    
    
      Votos: 2 - Link respuesta
     
  • Fecha: 13-02-2019 08:55:59 Que tal mira lo puse así pero me salen los siguientes errores:

    Notice: Undefined offset: 1 in servicios-cliente.php on line 13

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in servicios-cliente.php on line 16

    Notice: Undefined offset: 1 in servicios-cliente.php on line 19

    <?php
    $idCliente=$_GET["id"];
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $nreg=$_POST["nreg"];
        foreach($_POST as $key=>$value){
            $info=explode("-",$key);
            if($info[0]=="precio") $campo="Precio";
            if($info[0]=="limite") $campo="LimitMaxRespons";
            if($info[0]=="deduciblem") $campo="DeducibleMaterial";
            if($info[0]=="deducibler") $campo="DeducibleRobo";
            
            $result=query("SELECT COUNT(*) AS 'Registro' FROM clientes C RIGHT JOIN Servicios S ON C.idCliente=S.idCliente WHERE C.idCliente=".$idCliente." and S.idTipoContenedor=".$info[1].";");
            
    
            if(mysqli_num_rows($result)>=1){
                $row = mysqli_fetch_array($result); 
            }else{
                query("UPDATE Servicios SET ".$campo."=".$value." WHERE idCliente=".$idCliente." and idTipoContenedor=".$info[1]);
            }
        }
    }
    
    if (isset($_GET["id"]) && is_numeric($_GET["id"])) {
        $idCliente = $_GET["id"];
        $result=query("SELECT * FROM clientes WHERE idCliente=".$idCliente);
        $row = mysqli_fetch_array($result);
    }
    ?>
      Votos: -1 - Link respuesta
     
  • Fecha: 13-02-2019 10:13:24 muestra la estructura del array que no me cuadra esto   Votos: 0 - Link respuesta
     
  • Fecha: 13-02-2019 11:40:46 Te refieres a la sentencia original o cual estructura del array?? o.O

     $result=query("SELECT COUNT(*) AS 'Registro' FROM clientes C RIGHT JOIN Servicios S ON C.idCliente=S.idCliente WHERE C.idCliente=".$idCliente." and S.idTipoContenedor=".$info[1].";");
            $row = mysqli_fetch_array($result);
    
            if($row["Registro"]==0){
                query("INSERT INTO Servicios (idCliente,idTipoContenedor,".$campo.") VALUES(".$idCliente.",".$info[1].",".$value.");");
            }else{
                query("UPDATE Servicios SET ".$campo."=".$value." WHERE idCliente=".$idCliente." and idTipoContenedor=".$info[1]);
            }
      Votos: 0 - Link respuesta
     
  • Fecha: 13-02-2019 12:25:03 Bueno me referia a la restubtura de los datos que estas enviando, porque no me cuadra lo que estas haciendo, ya depuraste los valores que llegan?

    por ejemplo:

    esta linea
    Notice: Undefined offset: 1 in servicios-cliente.php on line 13

    te esta diciendo que en el array resultante del explode no existe el index 1, es decir que solo hay un valor o no hay nada, pero si llegaste hasta alli es que el index 0 existe.

    por otro lado

    aqui estas haciendo un explode a una key de tu post?
    ¿Cuantos elementos vienen en el POST?
    ¿Porque recorres el explode de manera general si estas buscando un valor en concreto para separar?
    ¿Porque haces el explode de la key y no del value?, porque la key dudo que tenga el valor que requieres para separar en array.

    revisa todo eso, o di que valores llegan en tu Petición.
    
    $nreg=$_POST["nreg"];
    
    
        foreach($_POST as $key=>$value){
            $info=explode("-",$key);
    
    
            if($info[0]=="precio") $campo="Precio";
    
    
      Votos: 1 - Link respuesta
     
  • Fecha: 13-02-2019 12:45:45 El codigo que me pones anteriormente la verdad no es 100% escrito por mi, lo estoy modificando ya que antes estaba otra persona trabajándolo.

    En total son 12 campos los que agrego, una vez agregados me sale el error Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /servicios-cliente.php y al volver a recargar la pag me salen predeterminados los valores, al quererlos guardar sin editar o editandolos me sale el mismo error (ya hay valores en la BD)
      Votos: 0 - Link respuesta
     
  •  
      2  
     
    Fecha: 13-02-2019 13:06:05 Buenas tardes..
    hace un var_dump de post y pegalo aqui, para ver que estas trayendo..
      Votos: 2 - Link respuesta
     
  • Fecha: 13-02-2019 19:21:53 El mensaje te dice lo que está pasando.

    $result es un boolean y no un resultado válido. Seguramente es un false. Esto sucede cuando la consulta está mal.

    Para saber lo que pasa agrega la siguiente condición:

            $result=query("SELECT COUNT(*) AS 'Registro' FROM clientes C RIGHT JOIN Servicios S ON C.idCliente=S.idCliente WHERE C.idCliente=".$idCliente." and S.idTipoContenedor=".$info[1].";");
            if (!$result) {
                echo mysqli_error($con); // Aquí $con es lo que te devuelve la llamada a mysqli_connect
                //TODO: enviar el error a un log
            }
            $row = mysqli_fetch_array($result);
    
      Votos: 1 - Link respuesta
     
  • Fecha: 14-02-2019 05:06:38 Que tal este es todo el codigo del php y me aparecen mas errores con la ultima condición que me sugirieron

    Notice: Undefined offset: 1 in C:\xampp\htdocs\app\servicios-cliente.php on line 69

    Notice: Undefined variable: con in C:\xampp\htdocs\app\servicios-cliente.php on line 71

    Warning: mysqli_error() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\app\servicios-cliente.php on line 71

    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\app\servicios-cliente.php on line 74

    Notice: Undefined offset: 1 in C:\xampp\htdocs\app\servicios-cliente.php on line 77

    <?php
        require_once("inc/functions.php");
        if(!isset($_COOKIE["idUsuario"])) {
            header("Location: login.php");
        }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
    
        <link href="css/bootstrap.min.css" rel="stylesheet">
        <link href="font-awesome/css/font-awesome.css" rel="stylesheet">
    
        <link href="css/plugins/dataTables/datatables.min.css" rel="stylesheet">
    
        <!-- Toastr style -->
        <link href="css/plugins/toastr/toastr.min.css" rel="stylesheet">
    
        <!-- Gritter -->
        <link href="js/plugins/gritter/jquery.gritter.css" rel="stylesheet">
    
        <link href="css/animate.css" rel="stylesheet">
        <link href="css/style.css" rel="stylesheet">
    </head>
    
    <body class="fixed-sidebar skin-3">
        <div id="wrapper">
        <?php require_once("inc/menu.php"); ?>
    
            <div id="page-wrapper" class="gray-bg dashbard-1">
            <div class="row border-bottom">
            <nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
                <div class="navbar-header">
                    <a class="navbar-minimalize minimalize-styl-2 btn btn-success " href="#"><i class="fa fa-bars"></i> </a>
                </div>
                <ul class="nav navbar-top-links navbar-right">
                    <li><a href="inc/logout.php"><i class="fa fa-sign-out"></i>Cerrar sesión</a></li>
                </ul>
            </nav>
            </div>
                <div class="row  border-bottom white-bg dashboard-header">
                    <h1 style='font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;font-weight: 400;color: #23282d;font-size: 23px;padding: 9px 0 4px;line-height: 29px;font-weight: 400;'>Servicios del cliente</h1>
                    <ol class="breadcrumb">
                        <li><a href="index.php">Inicio</a></li>
                        <li><a href="clientes.php">Clientes</a></li>
                        <li class="active"><strong>Servicios del cliente</strong></li>
                    </ol>
                </div>
    
                <div class="wrapper wrapper-content animated fadeInRight">
    <?php
    $idCliente=$_GET["id"];
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $nreg=$_POST["nreg"];
        foreach($_POST as $key=>$value){
            $info=explode("-",$key);
            if($info[0]=="precio") $campo="Precio";
            if($info[0]=="limite") $campo="LimitMaxRespons";
            if($info[0]=="deduciblem") $campo="DeducibleMaterial";
            if($info[0]=="deducibler") $campo="DeducibleRobo";
            
            $result=query("SELECT COUNT(*) AS 'Registro' FROM clientes C RIGHT JOIN Servicios S ON C.idCliente=S.idCliente WHERE C.idCliente=".$idCliente." and S.idTipoContenedor=".$info[1].";");
            if (!$result) {
                echo mysqli_error($con); // Aquí $con es lo que te devuelve la llamada a mysqli_connect
                //TODO: enviar el error a un log
            }
            $row = mysqli_fetch_array($result);
    
            if($row["Registro"]==0){
                query("INSERT INTO Servicios (idCliente,idTipoContenedor,".$campo.") VALUES(".$idCliente.",".$info[1].",".$value.");");
            }else{
                query("UPDATE Servicios SET ".$campo."=".$value." WHERE idCliente=".$idCliente." and idTipoContenedor=".$info[1]);
            }
        }
    }
    
    if (isset($_GET["id"]) && is_numeric($_GET["id"])) {
        $idCliente = $_GET["id"];
        $result=query("SELECT * FROM clientes WHERE idCliente=".$idCliente);
        $row = mysqli_fetch_array($result);
    }
    ?>
                <div class="row">
                    <div class="col-lg-12">
                        <div class="ibox float-e-margins">
                            <div class="ibox-title">
                                <h5>SERVICIOS DEL CLIENTE - <?php echo $row["RazonSocial"]; ?></h5>
                            </div>
                            <div class="ibox-content">
                                <form id="mcliente" name="mcliente" method="post" action="" class="form-horizontal">
                                    <div class="form-group">
                                        <label class="col-sm-2 control-label">&nbsp;</label>
                                        <div class="col-sm-10">
                                            <div class="row">
                                                <div class="col-md-3">Precio</div>
                                                <div class="col-md-3">Limite maximo de responsabilidad</div>
                                                <div class="col-md-3">Deducible Daño Material</div>
                                                <div class="col-md-3">Deducible Robo</div>
                                            </div>
                                        </div>
    
    <?php
    $result=query("SELECT TC.idTipoContenedor,TC.TipoContenedor, IFNULL((SELECT Precio FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS Precio, IFNULL((SELECT LimitMaxRespons FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS LimitMaxRespons, IFNULL((SELECT DeducibleMaterial FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS DeducibleMaterial, IFNULL((SELECT DeducibleRobo FROM Servicios WHERE idCliente=".$idCliente." and idTipoContenedor=TC.idTipoContenedor),0) AS DeducibleRobo FROM TiposContenedores TC ORDER BY TC.TipoContenedor;");
    $cont=0;
    while($row = mysqli_fetch_array($result)) {
        $cont=$cont+1;
    ?>
                                        <label class="col-sm-2 control-label"><?php echo $row["TipoContenedor"]; ?></label>
                                        <div class="col-sm-10">
                                            <div class="row">
                                                <div class="col-md-3 m-b"><input name="precio-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["Precio"] ?>" class="form-control"></div>
                                                <div class="col-md-3 m-b"><input name="limite-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["LimitMaxRespons"] ?>" class="form-control"></div>
                                                <div class="col-md-3 m-b"><input name="deduciblem-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["DeducibleMaterial"] ?>" class="form-control"></div>
                                                <div class="col-md-3 m-b"><input name="deducibler-<?php echo $row["idTipoContenedor"]; ?>" type="text" value="<?php echo $row["DeducibleRobo"] ?>" class="form-control"></div>
                                            </div>
                                        </div>
    <?php
    }
    ?><input name="nreg" type="hidden" value="<?php echo $cont; ?>">
    
                                    </div>
                                    <div class="hr-line-dashed"></div>
                                        <div class="form-group">
                                            <div class="col-sm-2 col-sm-offset-2">
                                                <button class="btn btn-primary" type="submit">Guardar</button>
                                            </div>
                                        </div>
                                </form>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
    
            </div>
        </div>
    
        <!-- Mainly scripts -->
        <script src="js/jquery-3.1.1.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        <script src="js/plugins/metisMenu/jquery.metisMenu.js"></script>
        <script src="js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
    
        <script src="js/plugins/dataTables/datatables.min.js"></script>
    
        <!-- Custom and plugin javascript -->
        <script src="js/inspinia.js"></script>
        <script src="js/plugins/pace/pace.min.js"></script>
    
        <!-- jQuery UI -->
        <script src="js/plugins/jquery-ui/jquery-ui.min.js"></script>
    
        <!-- Page-Level Scripts -->
    </body>
    </html>
      Votos: -1 - Link respuesta
     
  • Fecha: 14-02-2019 08:22:55 Sí, porque necesitas modificar la línea con la variable correcta.

    Dado que yo no conozco tu código y usas wrappers me es imposible saber el nombre de la variable donde almacenas tu conexión. Yo la llamo $con, tú deberías remplazarlo con el nombre correcto.
      Votos: 1 - Link respuesta
     
  • Fecha: 18-02-2019 05:19:11 Por qué no imprimis la variable de los querys? para validar que se estén ejecutando correctamente, y revisa en los querys, el punto y como que agregás en el string!   Votos: 1 - Link respuesta
     
  • Fecha: 18-02-2019 08:14:02 Ejecute la consulta pero solo me mostró una columna "Registro" con campo "0"

    SELECT COUNT(*) AS 'Registro' FROM clientes C RIGHT JOIN Servicios S ON C.idCliente=S.idCliente WHERE C.idCliente=".$idCliente." and S.idTipoContenedor=".$info[1].";

    En la tabla Servicios tengo la siguiente estructura

    idServicio / int / AUTO_INCREMENT
    idCliente / int
    idTipoContenedor / int
    Precio / decimal(5,0)
    LimitMaxRespons / varcahar (15)
    DeducibleMaterial / int
    DeducibleRobo / int
    FechaAlta / int
      Votos: 0 - Link respuesta
     
  • Fecha: 18-02-2019 09:15:17 El hecho de imprimir el query, podría ser para validad que tu consulta sea la correcta y no tengas errores de sintáxis, o algo parecido. por qué no probás ejecutar la impresión de tu query, en algo como phpmyadmin, o lo que utilices, y validar que se ejecute el query como querés   Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com