No entra en la sentencia if, dentro del While – php mysqli

Pregunta:


Sucede lo siguiente, estoy haciendo un update, al ingresar una factura de los proveedores, y al hacer click en un boton x se ejecuta una función(la colocare mas abajo) funciona bien, se actualiza el stock de los productos ingresados con la factura de la sucursal a la que se le ingreso, pero ¿ Que sucede si no existe ese producto en esa sucursal? bueno, hice un if que comprobara que si no arroja un resultado, se insertaran los productos en la sucursal, y si existieran, que se actualizara el stock de cada uno, pero no funciona, creo que el if esta mal. Les dejo mi función (igual es larga… PD: la tabla es porque solamente copie el while que tenia pra q se mostraran los productos.) :

  <?php 

   function ingresar_stock()

          {//consulta

            $id_if=$this->id_if;
            $id_di="";

    $sql="SELECT detalle_ingreso.id_di, detalle_ingreso.cantidad, detalle_ingreso.costo, productos.nombre_producto, 
            marcas.nombre_marca, ingreso_factura.id_if,ingreso_factura.id_suc, detalle_ingreso.codigo_producto, productos.precio_costo 
            FROM detalle_ingreso 
            INNER JOIN productos ON detalle_ingreso.codigo_producto = productos.codigo_producto
            INNER JOIN ingreso_factura ON detalle_ingreso.id_if = ingreso_factura.id_if 
            INNER JOIN marcas ON productos.id_marca = marcas.id_marca WHERE detalle_ingreso.id_if='$id_if'"; 

    $resultado=mysqli_query($this->conexion,$sql);
    $tabla="";


    while ($datos=mysqli_fetch_array($resultado))

    {               $codigo_producto=$datos["codigo_producto"];
                    $nombre_producto=$datos["nombre_producto"];
                    $nombre_marca=$datos["nombre_marca"];
                    $precio_costo=$datos["precio_costo"];
                    $cantidad=$datos["cantidad"];
                    $costo=$datos["costo"];
                    $id_di=$datos["id_di"];
                    $id_suc=$datos["id_suc"];

        $tabla.="<tr>

                    <td style='width: 15px; text-align: center'>$codigo_producto</td>
                    <td style='width: 190px; text-align: center'>$nombre_producto</td>
                    <td style='width: 20px; text-align: center'>$nombre_marca</td>
                    <td style='width: 20px; text-align: center'>$precio_costo</td>
                    <td style='width: 20px; text-align: center'>$cantidad</td>
                    <td style='width: 20px; text-align: center'>$costo</td>
                    <td style='width: 20px; text-align: center'><button    id_di='$id_di' class='btn btn-sm btn-default eliminar' >Eliminar<span class='glyphicon glyphicon-remove'></span></button></td>
                </tr>         <div class='col-md-2' style='top: 25px;'>";

            //--- Mi consulta, para verificar que no existe el producto en esa sucursal
            $sql_con="SELECT productos.codigo_producto , sucursales.id_suc
             FROM productos_sucursales
             INNER JOIN productos ON productos_sucursales.codigo_producto=productos.codigo_producto
             INNER JOIN sucursales ON productos_sucursales.id_suc=sucursales.id_suc
             WHERE productos_sucursales.id_suc='$id_suc' AND productos_sucursales.codigo_producto='$codigo_producto'";       
             $resultado_con=mysqli_query($this->conexion,$sql_con); 

             if($resultado_con==0){

                 $sql_insert="INSERT INTO productos_sucursales values('','$id_suc','$codigo_producto','$cantidad')";
         $resultado_insert=mysqli_query($this->conexion,$sql_insert);


             }

             else{

                 $sql2="UPDATE productos_sucursales
            SET stock_real=stock_real  + $cantidad
            WHERE codigo_producto=$codigo_producto AND id_suc=$id_suc";
        $resultado2=mysqli_query($this->conexion,$sql2);


              }



    }
    return $tabla;
}

   ?>

Preguntado por: Kvothe_0077

sioesi

Debes dejar tu if

if(!$resultado_con){

}

Ya que devuelve false en caso de no encontrar resultados.

Mi respuesta es similar a la de @Error404, solo que la mia se ahorra la evaluacion de == false ya que if evalua resultados booleanos por lo tanto si evaluas !$resultado_con estas buscando el resultado en caso de que sea false (vacio) si no, y trae un object que es el resultado en caso que tu query corresponda caera en la sentencia else

EDICION

Prueba asi :

$rows = $resultado_con->num_rows;
if($rows == 0){
       //insert
}

Buenas, has comprobado qué te devuelve la query? nunca te devolverá 0, devuelve un object o false si la consulta ha fracasado. debes recibir el resultado y tratar-lo para ver qué te ha devuelto, luego haz la comprobación por ejemplo de código producto.

if($resultado_con==0)

La función mysqli_query, tal y como indica en la documentación, devuelve false en caso de no devolver nada. Por tanto, tendrías que cambiar tu if a:

if($resultado_con==false){
   //Código si es falso (si no hay registros)
}else{
  //Código si es verdadero (hay registros)
}

1) Aunque sea un proyecto de prueba, Evita que alguien te de un dolor de cabeza y perdidas de dinero escapando el input (aun si eres tu mismo quine lo genera).

SQL Injection

Acerca de la pregunta, por lo general me evito realizar la consulta para verificar si un item se encuentra en la base de datos utilizando lo que yo llamo un upsert. (Esto solo funciona si tienes claves primarias definidas por lo general lo utilizo con pk combinadas).

La query queda de esta manera:

INSERT INTO table (id_prod, id_suc, value1, value2, value3)
VALUES (1, 2, '1','2','3')
ON DUPLICATE KEY UPDATE
table.value1 = VALUES(table.value1),
table.value2 = VALUES(table.value2);

De esta manera solo debes mantener una query, para este tipo de casos que maneja ambos, insert y update.

Si este forma de realizar las cosas no se adapta a tu estilo, como ya han dicho los demas debes cambiar tu validacion para que trabaje validando si el resultado devuelto por la consulta es false.

if($resultado_con == false) { doSomething(); }

Fuente

Related Posts:

array push con keys php – php array
Pregunta: Buen día. Estoy tratando de crear un array con valores agrupados por categorías, mediante AJAX recibo dos variables una contiene un string con el nombre ...
Actualizar información con ajax php mysql – php jquery mysql
Pregunta: Tengo esta simple consulta que lo que simplemente me muestra las visitas de la web, pero quisiera que fuera automático con ajax ya que ...
¿Cómo insertar código en las entradas de WordPress? – php wordpress plugin
Pregunta: En algunos blogs de programación he visto algo como esto en las entradas: Me gustaría poder hacer lo mismo. Sin embargo, no solo quiero que ...
Como validar array checkbox – javascript php jquery
Pregunta: Que tal buen dia, alguien me podria decir como se puede hacer para que cuando presione el boton "BAJAR DATOS" si este esta vacio ...
Problema con UTF_8 – php sql sql-server
Pregunta: Buen día, mi problema es el siguiente, Php me lanza el siguiente Warning Warning: utf8_decode() expects parameter 1 to be string, object given ...
Obtener las fechas de los días Lunes dependiendo de un rango de fechas PHP – php datetime time
Pregunta: Dependiendo de un rango de fechas quiero obtener sólo las fechas de los días Lunes, tengo la siguiente función que funciona pero me trae ...
Customizar rutas de Login en Laravel 5.3 – php laravel laravel-5
Pregunta: Hola tengo un problema con el enrutado de Login con el metodo php artisan make:auth que te genera todo lo que se necesita Desde vamos ...
¿Cómo utilizar `count` para contabilizar la cantidad de registros para distintos valores de un campo en mysql? – php mysql sql
Pregunta: Resulta que tengo un campo llamado ESTADO en mi tabla. En este campo hay varias estados de pedido que son: LOGÍSTICA, PACKING, PICKING, CARTERA, ...
Precargar SOAP en PHP – php webservice soap
Pregunta: Estoy usando un webservice en el cual realizo la conexión por SOAP en PHP. El problema viene cuando en la primera llamada, a veces, no ...
Xampp no carga proyecto laravel – php laravel apache
Pregunta: Tengo el proyecto laravel en un mac con OSX el capitán con php artisan. El proyecto se ejecuta sin problema, pero por motivos personales ...
URLs absolutas con PHP – php pretty-urls
Pregunta: Explico mi problema, es sencillo, lo tengo solucionado, pero solamente de manera local, no me sirve lo que hice si yo uso esto en ...
Ejecutar función de otro controlador enviando parametros – php laravel laravel-5
Pregunta: Tengo a Controller1 el cual contiene una función llamada actualizarCartera($parametro1, $parametro2, $parametro3), desde Controller2 ¿Cómo hago para ejecutar esta función?, ¿Cómo debo incluír a ...
PHPExcel comentario en negro – php excel
Pregunta: Llevamos un tiempo usando PHPexcel para rellenar unas tablas desde la Base de Datos, lleva funcionando meses pero últimamente al escribir un comentario y ...
Update con MYSQL PHP – php mysql mysqli
Pregunta: Tengo este código, pero no hace el update, y no sé porque. <?php // if ($_POST == "" || $_POST == "" || $_POST == ""){ ...
alguien sabe porque no imprime el json – php json
Pregunta: $from $to = 20; $query = "SELECT idempleados,nombre,apellidos FROM empleados LIMIT ?,?"; $result = $mysqli->prepare($query); $result->bind_ param('ii', $from, $to); $result->execute(); /* bind result variables */ $result->bind_result($idempleados,$nombre,$apellidos); /* fetch values */ while ($result->fetch()){ ...
Tags:,

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *