Busco solucionar error en código php relacionado con la introducción de valores en la base de datos

Xpert innet !
Mi duda es que en este código ¿qué tengo mal? Por más que busco no encuentro y quisiera ver si me puedes ayudar para resolverlo, te explico:
Se reciben estos datos:
?
    if($_POST)
    {
        $folio_venta = $_POST['miusuarioml'];
        $articulos = $_POST['articulos'];
        $fecha_compra = $_POST['mifecha'];
        $cantidad = $_POST['cantidad'];
        $envio = $_POST['envio'];
        $usuarioml_art = $_POST['miusuarioml'];
En esta parte hago una consulta para saber cuáles ya están en la BD y cuáles no:
??????????????????    
        $conexion = mysql_connect("localhost","root","");
        mysql_select_db("ventasml",$conexion);
$sql_query = "SELECT Articulos_Codigo FROM compra_articulos WHERE compra_articulos.FolioVenta = " . $_POST['miusuarioml'];
        $tiene = mysql_query($sql_query);
        $columna = mysql_fetch_array($tiene);
Aquí checo si es el 1er dato que entra en la BD:
??????????????????
        if ($columna['Articulos_Codigo'] == "")
        {
         mysql_select_db("ventasml",$conexion);
         $sql_query = "INSERT INTO compra_articulos values('$folio_venta','$articulos','$fecha_compra','$cantidad','$envio','$usuarioml_art')";
         mysql_query($sql_query,$conexion);
        }
        else
Este es el 'else' por si no es el primer dato que se va a agregar y lo busca en la BD para que no se repita:
??????????????????
        {
         $busca = "SELECT Articulos_Codigo FROM compra_articulos WHERE compra_articulos.FolioVenta = " . $folio_venta;
         if (mysql_query($busca))
         {
          $tienes = mysql_query($busca);
          while ($col = mysql_fetch_array($tienes))
          {
Si lo encuentra manda un ALERT diciendo que ya está en la BD:
??????????????????
           if ($col['Articulos_Codigo'] == $_POST['articulos'])
           {
            echo "
<script>alert('Ya has comprado este articulo.')</script>
";
            break;
           }
           else
Si no lo encuentra, lo guarda en la BD:
??????????????????
           {
            $conexion = mysql_connect("localhost","root","");         
            $sql_query3 = "INSERT INTO compra_articulos values('$folio_venta','$articulos','$fecha_compra','$cantidad','$envio','$usuarioml_art')";
            mysql_query($sql_query3,$conexion);
            break;
           }
          }
         }
        }
¿Qué es lo que pasa?
Que cuando agrego el 1er artículo todo va bien y también el 2o pero, si intento meter alguno de estos 2 de nuevo pues me da un ERRRRRRROOR grandísimo, ya que me permite meter un montón de artículos iguales, excepto el primero, por ejemplo:
Guardo Articulo USB ---- ok.
Guardo Articulo Teclado ----- ok.
Guardo Articulo Teclado(otra vez) ------ok.
Guardo Articulo Teclado(otra vez) ------ok.
...
...
Y azi me sigo agregando Teclados y cualquier otro tipo de Artículos y no me deshabilita el acceso a la BD por más repetidos que estén los artículos.
Pues si me pudieses ayudar mil

1 respuesta

Respuesta
1
Bueno te comento que más o menos parece estar bien sólo algunos matices a probar a ver:
if ($columna['Articulos_Codigo'] == "") // Usa comillas simples en vez de dobles
if (mysql_query($busca))
    {
        $Tienes = mysql_query($busca); // Aquí ejecutas 2 veces la query ya que la del if también se hace
y bueno yo diría que si eso me lo has copiado tal y como lo tienes, tienes algunos corchetes demás al final y otros que faltan por otro lado, te pego el código como creo que debería ser a ver si así va mejor :):
<?php
$folio_venta = $_POST['miusuarioml'];
$articulos = $_POST['articulos'];
$fecha_compra = $_POST['mifecha'];
$cantidad = $_POST['cantidad'];
$envio = $_POST['envio'];
$usuarioml_art = $_POST['miusuarioml'];
$conexion = mysql_connect("localhost","root","");
mysql_select_db("ventasml",$conexion);
$sql_query = "SELECT Articulos_Codigo FROM compra_articulos WHERE compra_articulos.FolioVenta = " . $_POST['miusuarioml'];
$tiene = mysql_query($sql_query);
$columna = mysql_fetch_array($tiene);
if ($columna['Articulos_Codigo'] == "")
{
   mysql_select_db("ventasml",$conexion);
   $sql_query = "INSERT INTO compra_articulos values('$folio_venta','$articulos','$fecha_compra','$cantidad','$envio','$usuarioml_art')";
   mysql_query($sql_query,$conexion);
}
else
{
    $busca = "SELECT Articulos_Codigo FROM compra_articulos WHERE compra_articulos.FolioVenta = " . $folio_venta;
    $tienes = mysql_query($busca);
    if ($tienes)
    {
        while ($col = mysql_fetch_array($tienes))
        {
        if ($col['Articulos_Codigo'] == $_POST['articulos'])
        {
        echo "
<script>alert('Ya has comprado este articulo.')</script>
";
        }
        }
    }
    else  
    {
    $sql_query3 = "INSERT INTO compra_articulos values('$folio_venta','$articulos','$fecha_compra','$cantidad','$envio','$usuarioml_art')";
    mysql_query($sql_query3,$conexion);
    }
}
Hola,
De antemano, mil grAcias por ayudarme!, pues nunca había programado en PHP je je se que tengo fallas, pero es algo así como le entiendo, también perdón si no te pegue todo el código pero es que es en esa parte donde tengo problemas y lo demás es solo tablas y formularios, y con lo que me mandaste tampoco me funcionó, pues solo me deja agregar un artículo y los demás no se agregan, mira deja ver si estoy bien en lo que falta del código que me mandaste:
#En esta parte le puse comillas simples tal y como me dijiste :)..ok
if ($columna['Articulos_Codigo'] == '')
     {
        mysql_select_db("ventasml",$conexion);
        $sql_query = "INSERT INTO compra_articulos values
        ('$folio_venta','$articulos','$fecha_compra','$cantidad','$envio','$usuarioml_art')";
        mysql_query($sql_query,$conexion);
     }
     else
     {
         $busca = "SELECT Articulos_Codigo FROM compra_articulos WHERE
         compra_articulos.FolioVenta = " . $folio_venta;
         $tienes = mysql_query($busca);
/*En este if creo está el problema, pues siempre va a ser TRUE y por lo tanto entrará
solo al While para checar los artículos y si lo encuentra te manda el mensaje, pero
   ¿Cómo podemos hacerle para que si NO lo encuentra lo agregue? ya que el if es sólo
   si devuelve FALSE lo agrega, no se si me explico pero imagino que eso tiene que
   hacerse en el While o no?*/
         if ($tienes)
        {
            while ($col = mysql_fetch_array($tienes))
            {
               if ($col['Articulos_Codigo'] == $_POST['articulos'])
               {
                   echo "
<script>alert('Ya has comprado este articulo.')</script>
";
               }
            }
         }
         else  
         {
              $sql_query3 = "INSERT INTO compra_articulos values
              ('$folio_venta','$articulos','$fecha_compra','$cantidad','$envio','$usuarioml_art')";
              mysql_query($sql_query3,$conexion);
         }
     }
Espero que puedas ayudarme pues esto ya me llevo una gran cantidad de tiempo y de leer varios tutoriales de PHP, HTML, JavaScript y aun así no encuentro la forma de resolverlo.
Un Saludo..!
L.I. Juan Carmona
Si cierto, el IF hay que meterle dentro del while, prueba a corregir ese bucle del final con esto:
$busca = "SELECT Articulos_Codigo FROM compra_articulos WHERE compra_articulos.FolioVenta = " . $folio_venta;
    $tienes = mysql_query($busca);
    while ($col = mysql_fetch_array($tienes))
    {
        if ($col['Articulos_Codigo'] == $_POST['articulos'])
        {
        echo "
<script>alert('Ya has comprado este articulo.')</script>
";
        }
        else  
        {
        $sql_query3 = "INSERT INTO compra_articulos values('$folio_venta','$articulos','$fecha_compra','$cantidad','$envio','$usuarioml_art')";
        mysql_query($sql_query3,$conexion);
        }
    }
Irá buscando lo que devuelva la búsqueda y si es igual, ¿mostrará el alert y si no es igual yo insertará entiendo que era eso no?
Hola, pues así es como lo tengo pero a la hora de meter el 1 articulo y el segundo si lo hace bien pero al agregar un tercero me lo duplica y al agregar el cuarto me duplica el agregado ej.
USB... ok
MP3... ok
CPU... ok
CPU...(duplica)
MP4... ok
MP4...(duplica)
MP4...(duplica)
MP4...(duplica)
Y así se la lleva con los que voy agregando.
Acá te dejo el archivo PHP que uso para ver en que estoy mal, lo que me falla esta casi al ultimo.
http://www.mediafire.com/?p207o25kkhkup9l
En ese archivo que me has puesto no esta la ultima corrección que te puse, ¿la probaste?
Hola,
Si la probé, fue lo primero que te mande pero el mio lleva un break; y el tuyo no, me mandaste lo mismo que mi primer pregunta je je.. porfaz chekalo, estoy trabajando en esto también no todo te lo dejo a ti.. mil gracias por ayudarme, enserio.
Un Saludo, y Feliz Halloween.. xD..
L.I. Juan Carmona.
Lo siento por responder tarde pero tuve unos días de vacaciones. Bueno pues yo el bucle así como te lo pasé lo veo correcto, algo que se me ocurre es que ¿Cuáles son los tipos de datos? Porque si los códigos de articulo están en varchar o algo así entonces al hacer las comparaciones deberás introducir comillas simples.
Por otra parte para detectar un fallo puedes ir haciend oseguiimiento de las variables a ver qué es lo que pasa y donde te falla y porqué con echo's cuando se de el caso de duplicación, es decir, haces un echo $col['Articulos_Codigo'] en el while para ver qué es lo que va apareciendo, y con qué lo comparas, quizá falle ahí en la formación de ese array aunque no debería pero prueba con los métodos de testeo porque verlo en directo es sin duda siempre el mejor método :).
Unsaludo y suerte =)
Hola,
Te doy las GRACIAS por ayudarme en esto, pero una última duda antes de finalizar la pregunta que desde luego tienes 5 estrellas. ¿Cuál es tu nombre?, para saber con quién estuve trabajando, y de quien aprendí algo más.
Saludos Amigo(a).
Atte: L.I. Juan A. Carmona Scott.
Bueno me llamo Fernando y nada hombre aquí siempre aprendemos todos de todos... cada programa es distinto y cada uno es Experto en su propio programa y no habrá nadie que lo conozca mejor que uno... de hecho es una de las bases de la programación profesional, hacer un programa que tu entiendas perfectamente y que para alguien que lo coja de "nuevo" no sea fácil ya que así te garantizas tu puesto y que tengan que mantenerte... no es demasiado ético pero es bastante competitivo je je.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas