Insert a tablas relacionadas con php 5.4

Iniciado por Elizabeth1999, Junio 22, 2020, 11:53:58 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 22, 2020, 11:53:58 PM Ultima modificación: Junio 23, 2020, 12:29:51 PM por Gabriela
Hola, buenas noches. Estoy haciendo un sistema en php. Paso los datos del formulario a otro archivo con el método Post y luego a mi archivo en donde están mis funciones para actualizar, eliminar e insertar, el problema es que no inserta los datos. Este es el código que estoy usando:
Código: php
	public function crearCotizacion(){
$c= new conectar();
$conexion=$c->conexion();

date_default_timezone_set("America/Lima");
$fecha = date("d-m-Y H:i:s");

$idventa = self::creaFolio();
$idclient= self::nombreCliente($idCliente);

$datos=$_SESSION['tablaCotizacionTemp'];
$datos2=$_SESSION['tablaCotizacionCienteTemp'];

$idusuario=$_SESSION['iduser'];
$id_cotizacion = "4";
$r=0;

for ($i=0; $i < count($datos) ; $i++) {
$d=explode("||", $datos[$i]);

for ($j=0; $j < count($datos2) ; $j++) {
$e=explode("||", $datos2[$j]);

$mysqli->query("INSERT INTO prints(
id_user,
dateOrder,
delivery_term,
delivery_method,
warehouse)
VALUES(
'$idusuario',
'$fecha',
'$e[5]',
'$e[6]',
'$e[7]')");

$mysqli->query("INSERT INTO quotes(
id_clients,
id_print,
dateQuo,
way_to_pay,
comments,
type_of_currency
)VALUES(
'$e[8]',
'$mysqli->id_print',
'$e[1],
'$e[2]',
'$e[4]',
'$e[3]')");

$mysqli->query("INSERT INTO detail_quo(
id_quotation,
description,
unit_of_measurement,
time_garanty,
quantity,
price_unit,
price_discount,
sub_total
)VALUES(
'$mysqli->id_quotation',
'$d[0]',
'$d[1]',
'$d[2]',
'$d[3]',
'$d[4]',
'$d[5]',
'$d[6]')");
$mysqli->query("INSERT INTO pay(
id_detail_quo,
quo_total,
igv,
total_igv,
)VALUES(
'$mysqli->id_detail_quo',
'$d[8]',
'$d[9]',
'$d[10]')");

$r=$r + $result=mysqli_query($conexion,$sql);
}
}

return $r;
self::descuentaCantidad($d[0], 1);
}

Hola @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Que error te devuelve?
Has verifiado si las variables que le estas pasando no estan vacias?
Verifica si el servidor al cual realiza la peticion esta activo y tienes permisos para realizar la insercion de datos. Si no tienes activada la opcion de display_errors en el archivo de configuracion de php, activalo y vuelve a probar, asi obtienes informacion mas detallada de cual podria ser el error. Tambien puedes probar agregando lo siguiente al inicio del archivo que realiza la peticion al servidor sql:
Código: php

error_reporting(E_ALL);
display_errors(true);


Saludos
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn

Hola @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

En el siguiente snippet, en vez de ir así:
Código: php
      return $r;
      self::descuentaCantidad($d[0], 1);


No fuera mejor de esta manera:
Código: php
      self::descuentaCantidad($d[0], 1);
      return $r;


Lo digo porque estarías retornando e impidiendo que ejecutes el método "descuentaCantidad".

También te aconsejo (y esto es un tema de seguridad) que manejes correctamente los datos para evitar una inyección SQL

O si es un error interno (ya sea del servidor, parte del código o de esta clase) haz lo que te indica @d3adly y muestranos directamente el error.

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Junio 23, 2020, 01:24:09 AM #3 Ultima modificación: Junio 23, 2020, 01:51:25 AM por DtxdF
descuenta cantidad llama a otra función

Código: php
			$mysqli->query("INSERT INTO detail_quo(
id_quotation,
description,
unit_of_measurement,
time_garanty,
quantity,
price_unit,
price_discount,
sub_total
)VALUES(
'$mysqli->id_quotation',
'$d[0]',
'$d[1]',
'$d[2]',
'$d[3]',
'$d[4]',
'$d[5]',
'$d[6]')");
$mysqli->query("INSERT INTO pay(
id_detail_quo,
quo_total,
igv,
total_igv,
)VALUES(
'$mysqli->id_detail_quo',
'$d[8]',
'$d[9]',
'$d[10]')");

$r=$r + $result=mysqli_query($conexion,$sql)or die(mysqli_error($db));
}
}

return $r;
self::descuentaCantidad($d[0], 1);
}
/*
$sql="INSERT into ventas (id_venta,
id_cliente,
id_producto,
id_usuario,
precio,
fechaCompra)
values ('$idventa',
'$d[5]',
'$d[0]',
'$idusuario',
'$d[3]',
'$fecha')";
*/
public function descuentaCantidad($idproducto, $cantidad)
{
$c = new conectar();

$conexion = $c -> conexion();

$sql = "SELECT cantidad
from articulos
where id_producto = '$idproducto'";

$result = mysql_query($conexion, $sql);

$cantidad = mysql_fetch_row($result)[0];

$cantidadNueva = abs($cantidad - $cantidad1);

$sql = "UPDATE articulos set cantidad = '$cantidadNueva'
where id_producto = '$id_producto'";
mysql_query($conexion, $sql);
}

public function creaFolio()
{
$c= new conectar();
$conexion=$c->conexion();

$sql="SELECT id_print from prints group by id_print desc";

$resul=mysqli_query($conexion,$sql);
$id=mysqli_fetch_row($resul)[0];

if($id=="" or $id==null or $id==0){
return 1;
}else{
return $id + 1;
}
}

Junio 23, 2020, 01:44:15 AM #4 Ultima modificación: Junio 23, 2020, 02:41:26 AM por d3adly
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta lo que sucede es como te explica @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta en esta seccion:
Código: php

return $r;
self::descuentaCantidad($d[0], 1);

La llamada a descuentaCantidad nunca se realiza ya que antes haces un return lo cual termina la ejecucion de la funcion crearCotizacion, respecto a lo de insercion prueba lo antes mencionado. Tambien verifica la clase conectar.
De donde proviene la variable $sql?, asumiendo por el codigo proporcionado es posible que tu error radique en esta seccion ya que la variable puede estar vacia
Código: php

$r=$r + $result=mysqli_query($conexion,$sql)

Activa la opcion de display_errors en el archivo de configuracion, asi podras localizar mas facil tu error.
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn

Junio 23, 2020, 01:02:04 PM #5 Ultima modificación: Junio 23, 2020, 02:57:54 PM por DtxdF
Quisiera saber si el insert que estoy haciendo está bien


Código: php
public function crearCotizacion(){
$c= new conectar();
$conexion=$c->conexion();

date_default_timezone_set("America/Lima");
$fecha = date("d-m-Y H:i:s");

//$idventa = self::creaFolio();
//$idclient= self::nombreCliente($idCliente);

$datos=$_SESSION['tablaCotizacionTemp'] && $_SESSION['tablaCotizacionCienteTemp'];
//$datos2=$_SESSION['tablaCotizacionCienteTemp'];

$idusuario=$_SESSION['iduser'];
$id_cotizacion = "1";
$r=0;

for ($j=0; $j < count($datos2) ; $j++) {
$e=explode("||", $datos2[$j]);

for ($i=0; $i < count($datos) ; $i++) {
$d=explode("||", $datos[$i]);

$mysqli->query("INSERT INTO prints(
id_user,
dateOrder,
delivery_term,
delivery_method,
warehouse)
VALUES(
'$idusuario',
'$fecha',
'$e[5]',
'$e[6]',
'$e[7]')");

$mysqli->query("INSERT INTO quotes(
id_clients,
id_print,
dateQuo,
way_to_pay,
comments,
type_of_currency
)VALUES(
'$e[8]',
'$mysqli->id_print',
'$e[1],
'$e[2]',
'$e[4]',
'$e[3]')");

$mysqli->query("INSERT INTO detail_quo(
id_quotation,
description,
unit_of_measurement,
time_garanty,
quantity,
price_unit,
price_discount,
sub_total
)VALUES(
'id_cotizacion',
'$d[0]',
'$d[1]',
'$d[2]',
'$d[3]',
'$d[4]',
'$d[5]',
'$d[6]')");
$mysqli->query("INSERT INTO pay(
id_detail_quo,
quo_total,
igv,
total_igv,
)VALUES(
'$mysqli->id_detail_quo',
'$d[8]',
'$d[9]',
'$d[10]')");

$r=$r + $result=mysqli_query($conexion,$mysqli)or die(mysqli_error($db));
}
}

return $r;
//self::descuentaCantidad($d[0], 1);
}public function crearCotizacion(){
$c= new conectar();
$conexion=$c->conexion();

date_default_timezone_set("America/Lima");
$fecha = date("d-m-Y H:i:s");

//$idventa = self::creaFolio();
//$idclient= self::nombreCliente($idCliente);

$datos=$_SESSION['tablaCotizacionTemp'] && $_SESSION['tablaCotizacionCienteTemp'];
//$datos2=$_SESSION['tablaCotizacionCienteTemp'];

$idusuario=$_SESSION['iduser'];
$id_cotizacion = "1";
$r=0;

for ($j=0; $j < count($datos2) ; $j++) {
$e=explode("||", $datos2[$j]);

for ($i=0; $i < count($datos) ; $i++) {
$d=explode("||", $datos[$i]);

$mysqli->query("INSERT INTO prints(
id_user,
dateOrder,
delivery_term,
delivery_method,
warehouse)
VALUES(
'$idusuario',
'$fecha',
'$e[5]',
'$e[6]',
'$e[7]')");

$mysqli->query("INSERT INTO quotes(
id_clients,
id_print,
dateQuo,
way_to_pay,
comments,
type_of_currency
)VALUES(
'$e[8]',
'$mysqli->id_print',
'$e[1],
'$e[2]',
'$e[4]',
'$e[3]')");

$mysqli->query("INSERT INTO detail_quo(
id_quotation,
description,
unit_of_measurement,
time_garanty,
quantity,
price_unit,
price_discount,
sub_total
)VALUES(
'id_cotizacion',
'$d[0]',
'$d[1]',
'$d[2]',
'$d[3]',
'$d[4]',
'$d[5]',
'$d[6]')");
$mysqli->query("INSERT INTO pay(
id_detail_quo,
quo_total,
igv,
total_igv,
)VALUES(
'$mysqli->id_detail_quo',
'$d[8]',
'$d[9]',
'$d[10]')");

$r=$r + $result=mysqli_query($conexion,$mysqli)or die(mysqli_error($db));
}
}

return $r;
//self::descuentaCantidad($d[0], 1);
}

Si mi vista no falla en esta ocasión @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, la sintaxis está bien, pero si es un error que te genera en tiempo de ejecución sería primordial que nos lo mostraras para poder ayudarte, cualquier cosa aquí estamos pendientes  :D

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Junio 23, 2020, 03:06:00 PM #7 Ultima modificación: Junio 23, 2020, 03:07:49 PM por DtxdF
este es el error que me da actualmente
Código: html5
<br />
<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\1ejemplo\class\quotes.php on line <i>21</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0006</td><td bgcolor='#eeeeec' align='right'>242672</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp64\www\1ejemplo\processes\ventas\llenarFormCotizacion.php' bgcolor='#eeeeec'>...\llenarFormCotizacion.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0026</td><td bgcolor='#eeeeec' align='right'>284768</td><td bgcolor='#eeeeec'>cotizaciones->obtenDatosProducto(  )</td><td title='C:\wamp64\www\1ejemplo\processes\ventas\llenarFormCotizacion.php' bgcolor='#eeeeec'>...\llenarFormCotizacion.php<b>:</b>8</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0043</td><td bgcolor='#eeeeec' align='right'>294512</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.mysqli-fetch-row' target='_new'>mysqli_fetch_row</a>
(  )</td><td title='C:\wamp64\www\1ejemplo\class\quotes.php' bgcolor='#eeeeec'>...\quotes.php<b>:</b>21</td></tr>
</table></font>
{"description":null,"unit_of_measurement":null,"time_garanty":null,"quantity":null,"price_unit":null,"price_discount":null,"sub_total":null}

en la anterior respuesta me sale que no estoy pasando los datos, null
esta es mi función que está dentro del archivo en donde se encuentra el formulario
$('#btnAgregaCotizacion').click(function(){
         vacios=validarFormVacio('regCot');
         if(vacios > 0){
            alertify.alert("Debes llenar todos los campos");
            return false;
         }
         datos=$('#regCot').serialize();
         $.ajax({
            type:"POST",
            data:datos,
            url:"../processes/ventas/agregaCotizacionTemp.php",
            success:function(r){
               $('#tablaCotizacionTemp').load("./cotizacion/tablaCotizacionTemp.php");
            }
         });
      });

este es el archivo agregaCotizacionTemp.php
<?php
   session_start();
   require_once "../../class/conexion.php";

   $c= new conectar();
   $conexion=$c->conexion();

   /*$total_producto=0;
   $calc_igv = "";
   $total_a_pagar= "";*/

   $descripcion=$_POST['descripcion'];
   $unidadMedida=$_POST['unidadMedida'];
   $tiemgaranty=$_POST['tiemgaranty'];

   $cantidadC=$_POST['cantidadC'];
   $priceunit=$_POST['priceunit'];
   $priceDes=$_POST['priceDes'];
   
   $subtotalRes=$_POST['subtotalRes'];

   /*$total_producto=$total_producto+$subtotalRes;   
   $i++;
   $calc_igv=$total_producto*0.18;
   $total_a_pagar = $calc_igv + $total_producto;*/

   $articulo =  $descripcion."||".
            $unidadMedida."||".
            $tiemgaranty."||".
            $cantidadC."||".
            $priceunit."||".
            $priceDes."||".
            $subtotalRes;
            /*$total_producto."||".
            $calc_igv."||".
            
            $total_a_pagar*/

   $_SESSION['tablaCotizacionTemp'][] = $articulo;

?>

esta es mi función crearCotizacion, por ahora estoy intentando pasar los datos a una sola tabla, ya que actualmente no inserta a ninguna :'v
P. D. en mis tablas usuarios, clientes, almacén si inserta bien, y estoy utilizando lo mismo, solo que para este caso tengo que pasar los datos de dos formularios, pero por ahora estoy tratando de insertar los datos solo a  la tabla detail_quo
function crearCotizacion(){
      $.ajax({
         //type:"POST",
         //data:"idcotizacioncliente=" + $('#regClient').val(), /*pasar los datos de las dos tablas*/
             //"idcotizacion=" + $('#regCot').val(),
         url:"../processes/ventas/crearcotizacion.php",
         success:function(r){
            if(r > 0){
               $('#tablaCotizacionTemp').load("./cotizacion/tablaCotizacionTemp.php");
               $('#regCot')[0].reset();
               /*$('#tablaCotizacionCienteTemp').load("./cotizacion/tablaCotizacionTemp.php");
               $('#regClient')[0].reset();*/
               alertify.alert("Cotización creada con éxito. consulte la información de esta, en lista de cotizaciones.");
            }else if(r==0){
               alertify.alert("No hay lista de cotización");
            }else{
               alertify.error("No se pudo crear la cotización");
            }
         }
      });
   }

Esta es mi actual función de crearCotización que está dentro de mi carpeta clases:
public function crearCotizacion(){
      $c= new conectar();
      $conexion=$c->conexion();

      date_default_timezone_set("America/Lima");
      $fecha = date("d-m-Y H:i:s");

      //$idventa = self::creaFolio();
      //$idclient= self::nombreCliente($idCliente);

      $datos=$_SESSION['tablaCotizacionTemp'] /*&& $_SESSION['tablaCotizacionCienteTemp']*/;
      //$datos2=$_SESSION['tablaCotizacionCienteTemp'];

      $idusuario=$_SESSION['iduser'];
      $id_cotizacion = "3";
      $r=0;

      /*for ($j=0; $j < count($datos2) ; $j++) {
         $e=explode("||", $datos2[$j]);*/

         for ($i=0; $i < count($datos) ; $i++) {
            $d=explode("||", $datos[$i]);
            
         /*$mysqli->query("INSERT INTO prints(
                              id_user,
                              dateOrder,
                              delivery_term,
                              delivery_method,
                              warehouse)
                           VALUES(
                              '$idusuario',
                              '$fecha',
                              '$e[5]',
                              '$e[6]',
                              '$e[7]')");

         $mysqli->query("INSERT INTO quotes(
                              id_clients,
                              id_print,
                              dateQuo,
                              way_to_pay,
                              comments,
                              type_of_currency
                           )VALUES(
                              '$e[8]',
                              '$mysqli->id_print',
                              '$e[1],
                              '$e[2]',
                              '$e[4]',
                              '$e[3]')");*/

         $sql->query("INSERT INTO detail_quo(
                              id_quotation,
                              description,
                              unit_of_measurement,
                              time_garanty,
                              quantity,
                              price_unit,
                              price_discount,
                              sub_total
                           )VALUES(
                              '$id_cotizacion',
                              '$d[0]',
                              '$d[1]',
                              '$d[2]',
                              '$d[3]',
                              '$d[4]',
                              '$d[5]',
                              '$d[6]')");
         /*$mysqli->query("INSERT INTO pay(
                              id_detail_quo,
                              quo_total,
                              igv,
                              total_igv,
                           )VALUES(
                              '$mysqli->id_detail_quo',
                              '$d[8]',
                              '$d[9]',
                              '$d[10]')");*/

            $r=$r + $result=mysqli_query($conexion,$sql)or die(mysqli_error($result));
         }   
      //}

      return $r;
      //self::descuentaCantidad($d[0], 1);
   }

Junio 23, 2020, 03:43:03 PM #12 Ultima modificación: Junio 23, 2020, 03:46:19 PM por DtxdF
La advertencia que se te muestra en el navegador te brinda un indicio para determinar la posible causa. En este caso leyendo un poco la documentación de php y especificamente sobre No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta te proporciona más ayuda.

mysqli_fetch_row(...) retorna NULL en caso de un error o una incongruencia, así que éso es un factor a tener en cuenta para determinar por qué se muestran NULLs en la respuesta misma.

mysqli_fetch_row(...) espera un objeto No tienes permitido ver los links. Registrarse o Entrar a mi cuenta pero es pasado un dato tipo booleano, se debe a un error de mysqli_query(...). Las posibles causas pueden ser:

* La conexión no se realizó con éxito, puede ser por credenciales inválidas, permisos inconcedidos, entre otros
* Que haya una incongruencia en la tabla, columna o cualquier dato de la base de datos que posiblemente no exista
* Entre otros

Posible solución: Tendrías que realizar una pequeña investigación sobre qué es lo que falta y falla respecto al mismo código, la conexión y los datos que están almacenados en la base de datos, pero lo principal de todo y para que se te facilite aún más tu trabajo es realizar un tratamiento de errores.

Nota: Por favor usar las etiquetas correspondientes para insertar código y dentro de lo posible colocarlo en un mismo comentario

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Hola No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Te comento. Como te han mencionado los otros Underc0ders, la sintaxis al parecer está correcta. Sin embargo, debuggear 'a ojo' a veces suele ser un reto bien grande. Además, también pasa eso por el tema de las funciones. Lo que te recomiendo es, que con tu IDE, logres debuggear línea por línea tu programa. XDebug es muy bueno para eso. Te lo menciono, porque hace unos años atrás, tuve un lío con un código de PHP grandísimo y es hacer eso o sino ir sentenciando línea por línea con dumps y demás funciones para que paren ahí.

Finalmente, con debugear en tiempo de ejecución, sabrás casi que al primer o segundo intento, qué está sucediendo en las líneas de inserción.

Otra cosa, es recomendable sanitizar tu código. Veo que no estás sanitizando la entrada y existen algunos XSS, como por ejemplo, en tu archivo de agregaCotizacionTemp.php. Estás recibiendo los parámetros y no los sanitizas. Es un vistazo rápido, pero sanitizando tu código y aplicándole refactoring, te evitaras muchos problemas más adelante.

Inténta lo de XDebug y nos cuentas. Puedes ahorrarte un tiempo.

Un saludo.
Become the change you seek in the world. -Gandhi.