Ver Mensaje Individual
  #7 (permalink)  
Antiguo 18/09/2014, 08:56
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Actualizar BD por array multidimensional (vectores, matrices)

La primera parte del codigo un poco mas limpia podria quedar asi:
Código PHP:
Ver original
  1. <?php
  2.     include("conexion.php");
  3.     include("seguridad.php");
  4. ?>
  5. <!DOCTYPE html>
  6. <html>
  7.     <head>
  8.         <meta http-equiv="Content-Type" content="text/html; charset=big5">
  9.         <title>Cotizaci&oacute;n</title>
  10.         <link href="body.css" rel="stylesheet" type="text/css">
  11.     </head>
  12.     <body>
  13.         <header>
  14.             <h2>Editar Cotizaci&oacute;n</h2>
  15.         </header>
  16.     <?php
  17.         if(isset($_POST["accion"]))
  18.         {
  19.             if($_POST["accion"] == "agregar")
  20.             {        
  21.                 foreach($_POST['txtnopro'] as $key => $nopro)
  22.                     $sql = (isset($sql) ? $sql.", " : "INSERT INTO contenidopedido VALUES ")."
  23.                                                        ({$_POST["txtnopedido"]},
  24.                                                         '{$nopro}',
  25.                                                         '{$_POST["txtcantidad"][$key]}',
  26.                                                         '{$_POST["txtobs"][$key]}',
  27.                                                         '{$_POST["txtnoproy"]}',
  28.                                                         '{$_POST["txtuser"]}',
  29.                                                         '{$_POST["txtfecha"]}'
  30.                                                        )";
  31.                    
  32.                 $q = mysql_query($sql, $cn) or die(mysql_error());
  33.                 echo "<script>
  34.                        alert('Se inserto correctamente el pedido');
  35.                        window.location='compras.php';
  36.                      </script>";
  37.             }
  38.             elseif($_POST["accion"] == "actualizar")
  39.             {  
  40.  
  41.                 foreach($_POST['txtnoproy'] as $key => $noproyecto)
  42.                     $q = mysql_query("UPDATE cotizaciones SET
  43.                                        idproducto='{$_POST["txtnopro"][$key]}',
  44.                                        cantidad='{$_POST["txtcotiz"][$key]}',
  45.                                        observaciones = '{$_POST["txtobscotiz"][$key]}'
  46.                                      WHERE
  47.                                        noproyecto='{$noproyecto}'",
  48.                                     $cn) or die(mysql_error());
  49.                    
  50.                 echo "<script>
  51.                        alert('Se actualizo la cotizacion correctamente');
  52.                        window.location='ingresoproyectos.php';
  53.                      </script>";
  54.             }
  55.             elseif($_POST["accion"] == "eliminar")
  56.             {
  57.                 $q = mysql_query("DELETE FROM cotizaciones WHERE noproyecto='{$_POST["txtnoproy"]}'",
  58.                                 $cn) or die(mysql_error());
  59.                
  60.                 echo "<script>
  61.                        alert('Se elimnino la cotizacion correctamente');
  62.                        window.location='ingresoproyectos.php';
  63.                      </script>";
  64.             }
  65.             else
  66.             {
  67.                 die("Accion incorrecta.")
  68.             }    
  69.         }
  70.     ?>

Aunque eso no resulve tu problema, solo emprolija el codigo.

No veo ninguna consulta previa en tu codigo, lo unico que hay es un formulario dinamico, pero en ningun momento te basas en una consulta previa para hacer un update...

Por cierto, meter variables en una consulta sql es malisima idea, cualquier malintencionado podria hacer explotar tu base de datos sin ningun esfuerzo, o quizas alguien por error podria poner un caracter comilla y hacer explotar tu consulta. Lo mejor seria bindear variables con mysqli o usar una DBAL que se encargue de eso.

Personalmente creo que las dbal te ahorrarian mucho tiempo y esfuerzo y ademas te brindarian toda la seguridad que necesitas.

Algunas dbal:

https://github.com/doctrine/dbal
https://wiki.phpbb.com/Database_Abstraction_Layer
http://dalmp.readthedocs.org/en/latest/Quickstart.html

y la que yo uso para mysql:
https://github.com/Proyecto-NSD/PHP-...master/MariaDB
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios