Foros del Web » Programando para Internet » PHP »

Evitar Duplicados PHP-MYSQL

Estas en el tema de Evitar Duplicados PHP-MYSQL en el foro de PHP en Foros del Web. bueno, haber si alguno de ustedes me puede ayudar, y disculpen mis orrores, peroe ste es mi primer post espero y salga bien... Tengo un ...
  #1 (permalink)  
Antiguo 10/03/2009, 19:19
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Evitar Duplicados PHP-MYSQL

bueno, haber si alguno de ustedes me puede ayudar, y disculpen mis orrores, peroe ste es mi primer post espero y salga bien...

Tengo un formulario hecho en HTML, que al momento del submit manda llamar a un archivo llamado guardar.php

Bueno, esta es la estructura de mi archivo guardar.php

<?php
$Folio = $_POST['Folio'];
$Equipo0 =$_POST['Equipo0'];
$Serie = $_POST['Serie0'];
$conexion = mysql_connect('localhost','usuario','**********');
mysql_select_db('resguardos');

$chek_Folio = "SELECT * FROM datos WHERE Folio='$Folio'";
$result = mysql_query($chek_Folio);
$numrows = mysql_num_rows($result);
if ($numrows!=0) {
echo "<font color='#FF0000'><b>Error</b> </font> el Folio: ".$_POST['Folio']." ya existe, por favor intente con otro";
exit();
mysql_close($conexion);
}
mysql_query($sql);

//Datos del Select Equipo0
if ($_POST['Equipo0'] == "1") {
$chek_Serie0 = "SELECT * FROM cpu WHERE Serie='$Serie0'";
$result = mysql_query($chek_Serie0);
$numrows = mysql_num_rows($result);
if ($numrows!=0) {
echo "<font color='#FF0000'><b>Error</b> </font> el número de serie: ".$_POST['Serie0']." ya existe, por favor intente con otro";
exit();
mysql_close($conexion);
}else{
$eqpo1="INSERT INTO cpu (Marca,Modelo,Serie,Observaciones,Folio)VALUES ('".$_POST['Marca0']."','".$_POST['Modelo0']."',' ".$_POST['Serie0']."','".$_POST['Observaciones']."','".$_POST['Folio']."')";
mysql_query($eqpo1);
}
}

$sql="INSERT INTO datos (Folio,Fecha,Hora,Proveedor,Puesto,Adscripcion,Con tacto)VALUES ('".$_POST['Folio']."', '".$_POST['Fecha']."', '".$_POST['Hora']."', '".$_POST['Proveedor']."', '".$_POST['Puesto']."', '".$_POST['Adscripcion']."', '".$_POST['Contacto']."')";

mysql_query($sql);
//mysql_query($eqpo1);

mysql_close($conexion);

echo "Los datos han sido Guardados satisfactoriamente";
?>

Disculpen por no poner los colores correspondientes...
Todo lo que respecta al chequeo de el Folio funciona perfectamente, el chequeo del numero de serie lo he hecho exactamente igual al procedimiento del Folio y no funciona, los nombres de las tablas estan bien...
Por cierto, aunque le ponga un numero de serie ya existente me sigue guardando los datos, tanto en la tabla datos como en la de cpu..

Última edición por felino_13; 10/03/2009 a las 19:32
  #2 (permalink)  
Antiguo 11/03/2009, 09:22
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Evitar Duplicados PHP-MYSQL

Código php:
Ver original
  1. $Serie = $_POST['Serie0'];

Si haces la consulta con $Serie y no con $Serie0 seguro funciona.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 11/03/2009, 10:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Evitar Duplicados PHP-MYSQL

Gracias por responder...

La verdad no lo habia probado así, puesto que en mi archivo html, ese campo se llama serie0
  #4 (permalink)  
Antiguo 11/03/2009, 10:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Evitar Duplicados PHP-MYSQL

Esa linea la copie de tu codigo

Todo lo que tienes que hacer es usar la misma variable en la asignacion y la consulta.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 11/03/2009, 10:24
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Bueno, ya cambie el nombre de Serie0 a Serie y nada, e incluso cambie el nombre del campo en el archivo HTML de Seri0 a Serie y nada, de ninguna de las dos formas funciona, me sigue guardando todos los datos en la base de datos...

<?php
$Folio = $_POST['Folio'];
$Equipo0 =$_POST['Equipo0'];
$Serie = $_POST['Serie'];
$conexion = mysql_connect('localhost','usuario','************' );
mysql_select_db('resguardos');

//Datos del Select Equipo0
if ($_POST['Equipo0'] == "1") {
$chek_Serie = "SELECT * FROM cpu WHERE Serie='$Serie'";
$result = mysql_query($chek_Serie);
$numrows = mysql_num_rows($result);
if ($numrows!=0) {
echo "<font color='#FF0000'><b>Error</b> </font> el número de serie: ".$_POST['Serie']." ya existe, por favor intente con otro";
exit();
mysql_close($conexion);
}else{
$eqpo1="INSERT INTO cpu (Marca,Modelo,Serie,Observaciones,Folio)VALUES ('".$_POST['Marca0']."','".$_POST['Modelo0']."',' ".$_POST['Serie0']."','".$_POST['Observaciones']."','".$_POST['Folio']."')";
mysql_query($eqpo1);
}
}
$sql="INSERT INTO datos (Folio,Fecha,Hora,Proveedor,Puesto,Adscripcion,Con tacto)VALUES ('".$_POST['Folio']."', '".$_POST['Fecha']."', '".$_POST['Hora']."', '".$_POST['Proveedor']."', '".$_POST['Puesto']."', '".$_POST['Adscripcion']."', '".$_POST['Contacto']."')";

mysql_query($sql);
//mysql_query($eqpo1);
mysql_close($conexion);
echo "Los datos han sido Guardados satisfactoriamente";
?>


He quitado lo de folio, ya sabemos que funciona, lo deje de esta manera, y nada, sigue guardando todo...

Última edición por GatorV; 11/03/2009 a las 10:57
  #6 (permalink)  
Antiguo 11/03/2009, 10:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Evitar Duplicados PHP-MYSQL

En el formulario tambien cambiaste Serie0 a Serie?, en tu codigo solo queda uno mal.

$Folio = $_POST['Folio'];
$Equipo0 =$_POST['Equipo0'];
$Serie = $_POST['Serie'];
$conexion = mysql_connect('localhost','usuario','************' );
mysql_select_db('resguardos');

//Datos del Select Equipo0
if ($_POST['Equipo0'] == "1") {
$chek_Serie = "SELECT * FROM cpu WHERE Serie='$Serie'";
$result = mysql_query($chek_Serie);
$numrows = mysql_num_rows($result);
if ($numrows!=0) {
echo "<font color='#FF0000'><b>Error</b> </font> el número de serie: ".$_POST['Serie']." ya existe, por favor intente con otro";
exit();
mysql_close($conexion);
}else{
$eqpo1="INSERT INTO cpu (Marca,Modelo,Serie,Observaciones,Folio)VALUES ('".$_POST['Marca0']."','".$_POST['Modelo0']."',' ".$_POST['Serie0']."','".$_POST['Observaciones']."','".$_POST['Folio']."')";
mysql_query($eqpo1);
}
}


Edito: Respecto al codigo original solo tenias que cambiar una variable para solucionarlo.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 11/03/2009, 11:33
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
O.k. ya cambie el
['Modelo0']."',' ".$_POST['Serie0']."

por:

['Modelo0']."',' ".$_POST['Serie']."

Incluso en el formulario lo cambie de Sere0 a Serie, y nada, no funciona, lo único que hace es seguirme guardando los datos en la base...

Alquien tiene alguna otyra idea??...

Última edición por GatorV; 12/03/2009 a las 11:52
  #8 (permalink)  
Antiguo 12/03/2009, 11:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Evitar Duplicados PHP-MYSQL

1- Muestra la estructura de tu tabla
2- Muestra el codigo del formulario
3- Muestra nuevamente tu codigo actual para insertar

El problema debe estar que en alguna parte de tu codigo no estas usando el nombre adecuado para el campo.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 13/03/2009, 11:37
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Evitar Duplicados PHP-MYSQL

No me deja ponerte la imágen de la estructura de la tabla, debo tener una antigüedad de mas de 30 días...

Con respecto al código HTML manejo muchas tablas tratare de poner el código más importante:
<form method="POST" action="guardar.php" name="alta">

<select size="1" name="Equipo0" style="font-family: Times New Roman; font-size: 10pt">
<option value="0">Seleccione un Equipo...</option>
<option value="1">CPU</option>
<option value="2">MONITOR</option>
<option value="3">TECLADO</option>
<option value="4">RATON</option>
<option value="5">REGULADOR</option>
<option value="6">BOCINAS</option>
<option value="7">IMPRESORA</option>
<option value="8">ESCANER</option></select>
<input type="text" name="Serie" size="23" style="font-family: Times New Roman; border: 1px solid #049140; font-size:10pt"></font></td>

Archivo Guardar.php

<?php
$Folio = $_POST['Folio'];
$Equipo0 =$_POST['Equipo0'];
$Serie = $_POST['Serie'];
$conexion = mysql_connect('localhost','usuario','*********');
mysql_select_db('resguardos');

$chek_Folio = "SELECT * FROM datos WHERE Folio='$Folio'";
$result = mysql_query($chek_Folio);
$numrows = mysql_num_rows($result);
if ($numrows!=0) {
echo "<font color='#FF0000'><b>Error</b> </font> el Folio: ".$_POST['Folio']." ya existe, por favor intente con otro";
exit();
mysql_close($conexion);
}
mysql_query($sql);

//Datos del Select Equipo0
if ($_POST['Equipo0'] == "1") {
$chek_Serie = "SELECT * FROM cpu WHERE Serie='$Serie'";
$result = mysql_query($chek_Serie);
$numrows = mysql_num_rows($result);
if ($numrows!=0) {
echo "<font color='#FF0000'><b>Error</b> </font> el número de serie: ".$_POST['Serie']." ya existe, por favor intente con otro";
exit();
mysql_close($conexion);
}else{
$eqpo1="INSERT INTO cpu (Marca,Modelo,Serie,Observaciones,Folio)VALUES ('".$_POST['Marca0']."','".$_POST['Modelo0']."',' ".$_POST['Serie']."','".$_POST['Observaciones']."','".$_POST['Folio']."')";
mysql_query($eqpo1);
}
}
$sql="INSERT INTO datos (Folio,Fecha,Hora,Proveedor,Puesto,Adscripcion,Con tacto)VALUES ('".$_POST['Folio']."', '".$_POST['Fecha']."', '".$_POST['Hora']."', '".$_POST['Proveedor']."', '".$_POST['Puesto']."', '".$_POST['Adscripcion']."', '".$_POST['Contacto']."')";

mysql_query($sql);
//mysql_query($eqpo1);
mysql_close($conexion);
echo "Los datos han sido Guardados satisfactoriamente";
?>


Si falta algo, o necesitas que ponga algo más, por favor solo dimelo....
  #10 (permalink)  
Antiguo 13/03/2009, 11:53
 
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 73
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Evitar Duplicados PHP-MYSQL

Una consulta tu base de datos esta bien normalizado, por ejemplo el identificador de la tabla que requieres esta como autoincrement, de no ser asi ahi podrias tener un pequeño problema, revisalo y lo vuelvas a publicar
  #11 (permalink)  
Antiguo 13/03/2009, 11:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Evitar Duplicados PHP-MYSQL

Asi como lo veo, deberia funcionar, a menos que haya algo mal en la consulta y, lo unico que cambiaria para ver si hay errores es:

Código php:
Ver original
  1. // Saber que es lo que obtienes en $Serie
  2. echo "Serie capturada: $Serie";
  3.  
  4. // Ver si hay algun error en la consulta donde buscas la serie
  5. $result = mysql_query($chek_Serie) or die(mysql_error());
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 13/03/2009, 18:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Evitar Duplicados PHP-MYSQL

Sí, mi campo ID es Auto_Increment
Añadí la línea que me muestra el número de resultados en la consulta:

if ($_POST['Equipo0'] == "1") {
$chek_Serie = "SELECT * FROM cpu WHERE Serie='$Serie'";
// Ver si hay algun error en la consulta donde buscas la serie
$result = mysql_query($chek_Serie) or die(mysql_error());
$numrows = mysql_num_rows($result);
echo $numrows ."<br>"; //Muestra Número de Resultados
// Saber que es lo que obtienes en $Serie
echo "Serie capturada: $Serie" ."<br>";
if ($numrows>0) {
echo "<font color='#FF0000'><b>Error</b> </font> el número de serie: ".$_POST['Serie']." ya existe, por favor intente con otro";
exit();
mysql_close($conexion);
}else{


Y al final, el resultado es: que me sigue guardando todoooooo...

0
Serie capturada: 320JK400123
Los datos han sido Guardados satisfactoriamente

Me dice que los resultados de la búsqueda son 0, supongo que la consulta se hace correctamente, puesto que no me marca ningún error....
  #13 (permalink)  
Antiguo 13/03/2009, 19:05
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Evitar Duplicados PHP-MYSQL

Jajajajajajaja ¡&%&$&$%&$%&$%&$%&$%&$! rayos, hice otro cambio, y a que ni saben queeeee, no jala :( lo que hice fue hacer esto:

if ($numrows =0) { //Se supone que si el numero de resultados es cero, me debe de tirar el error echo "<font color='#FF0000'><b>Error</b> </font> el número de serie: ".$_POST['Serie']." ya existe, por favor intente con otro";
exit();

Y me sigue guardandoooooo... Que hago?
  #14 (permalink)  
Antiguo 13/03/2009, 19:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Evitar Duplicados PHP-MYSQL

Por Cierto, tengo este archivo de consulta:

<html>
<body>

<?php
$link = mysql_connect("localhost", "usuario", "************");
mysql_select_db("resguardos", $link);
$result = mysql_query("SELECT * FROM datos", $link);
echo "DATOS GENERALES"."<br>";
echo ""."<br>";
echo "Folio: ".mysql_result($result, 0, "Folio")."<br>";
echo "Fecha: ".mysql_result($result, 0, "Fecha")."<br>";
echo "Hora: ".mysql_result($result, 0, "Hora")."<br>";
echo "Proveedor: ".mysql_result($result, 0, "Proveedor")."<br>";
echo "Puesto: ".mysql_result($result, 0, "Puesto")."<br>";
echo "Adscripcion: ".mysql_result($result, 0, "Adscripcion")."<br>";
echo "Contacto: ".mysql_result($result, 0, "Contacto")."<br>";

$result = mysql_query("SELECT * FROM cpu", $link);
echo ""."<br>";
echo "CPU"."<br>";
echo "Marca: ".mysql_result($result, 0, "Marca")."<br>";
echo "Modelo: ".mysql_result($result, 0, "Modelo")."<br>";
echo "Serie: ".mysql_result($result, 0, "Serie")."<br>";
?>

</body>
</html>

Y me muestra los datos:

DATOS GENERALES

Folio: 000001
Fecha: 10 MARZO 2009
Hora: 3:52 P.M.
Proveedor: MARIBEL
Puesto: COMISIONADO DE SOPORTE TÉCNICO
Adscripcion: UNIDAD 2
Contacto: MARCIAL

CPU
Marca: INTEL
Modelo: MM3200
Serie: 320JK400123

Haber, que alguién me diga donde esta mi error...
  #15 (permalink)  
Antiguo 13/03/2009, 19:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Evitar Duplicados PHP-MYSQL

Finalmente, la estructura de mi tabla CPU:

-- Estructura de tabla para la tabla `cpu`
--

CREATE TABLE `cpu` (
`ID` int(10) unsigned NOT NULL auto_increment,
`MARCA` varchar(20) NOT NULL default '',
`MODELO` varchar(20) NOT NULL default '',
`SERIE` varchar(20) NOT NULL default '0',
`HD` int(10) unsigned NOT NULL default '0',
`MEMORIA` int(10) unsigned NOT NULL default '0',
`CDROM` int(10) unsigned NOT NULL default '0',
`FLOPPY` int(10) unsigned NOT NULL default '0',
`QUEMADORA` int(10) unsigned NOT NULL default '0',
`OBSERVACIONES` varchar(100) NOT NULL default '',
`FOLIO` varchar(10) NOT NULL default '0',
`FUENTE` int(10) unsigned NOT NULL default '0',
`UBICACION` varchar(50) NOT NULL default '',
`CANTIDAD` varchar(5) NOT NULL default '',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

-
--
-
  #16 (permalink)  
Antiguo 13/03/2009, 19:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Evitar Duplicados PHP-MYSQL

Lo ultimo que se me ocurre es que tengas que hacer la consulta usando el campo serie todo en mayusculas: SERIE.

No se que tan cierto pueda ser, pero lee esto: http://blogs.webceraton.com/esubagio...ase-field-name, sugiere algun bug en PHP para este tipo de consultas.
__________________
- León, Guanajuato
- GV-Foto
  #17 (permalink)  
Antiguo 20/03/2009, 16:42
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Evitar Duplicados PHP-MYSQL

Bueno hice un nuevo cambio, es este:

$chek_Serie = "SELECT * FROM cpu WHERE Serie='$Serie'";

por este:

$chek_Serie = "SELECT * FROM cpu WHERE Serie Like '%$serie%'";

Y resulta que me da el numero de resultados, pero resulta que el número de resultados abarca todos los números, incluso los que no corresponden a la serie que estoy dando de alta, osea, si tengo 34 registros, me marca 34 resultados, y si doy de alta un nuevo numero, me marca que ya existe, cuál será el error??
  #18 (permalink)  
Antiguo 20/03/2009, 17:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Evitar Duplicados PHP-MYSQL

Nuevamente yo, pero esta ves con una buena noticia, ya quedo el código, funciona de maravilla, quedo de esta manera:

$chek_Serie = "SELECT * FROM cpu WHERE SERIE Like '%$Serie%'";

Gracias amigo Triby
  #19 (permalink)  
Antiguo 20/03/2009, 17:41
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Evitar Duplicados PHP-MYSQL

Vaya, por fin se soluciono

Solo por un poco mas de seguridad, te sugiero que pongas SERIE = '$Serie' en vez de usar LIKE, para que asegures que tengas numeros de serie unicos.
__________________
- León, Guanajuato
- GV-Foto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:30.