Foros del Web » Programando para Internet » PHP »

Como puedo valiadar que el reguitro no se ingrece 2 beces

Estas en el tema de Como puedo valiadar que el reguitro no se ingrece 2 beces en el foro de PHP en Foros del Web. hola como estan tengo la sigueinte conuslta, como pueod validar que un reguistro una ves ya ingresado no se pueda gruardar nuevamente formulario de ingreso ...
  #1 (permalink)  
Antiguo 29/03/2009, 11:13
Avatar de a83
a83
 
Fecha de Ingreso: noviembre-2005
Ubicación: Santiago de chile
Mensajes: 637
Antigüedad: 18 años, 5 meses
Puntos: 1
Como puedo valiadar que el reguitro no se ingrece 2 beces

hola como estan tengo la sigueinte conuslta, como pueod validar que un reguistro una ves ya ingresado no se pueda gruardar nuevamente

formulario de ingreso :
Código PHP:
<form action="carga_op.php" method="post" name="form1" class="seccion" id="form1">
<div class="descripccionSeccion">
  <table width="340" align="center" class="oSuperior">
    <!--DWLayoutTable-->
    <tr>
      <td width="115" height="21">
        <label></label>               
        Cliente:</td>
           <td width="141"><?php cargar_combo("tblclientes","id_Cliente","Nombre","Activo"); ?></td>
        <td colspan="2" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
      <td width="122">&nbsp;</td>
    </tr>
    <tr>
      <td height="21"><label>Fecha: </label></td>
           <td><input name="FechaInicio" type="text" class="campos_guia" id="FechaInicio" onClick="popUpCalendar(this, form1.FechaInicio, 'dd-mm-yyyy');" size="10" /></td>
        <td colspan="2" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td height="24"><label>Trabajador:</label></td>
           <td><?php cargar_combo("tblempleados","Id_Empleado","Apellido"); ?></td>
        <td colspan="2" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td height="24">Turno: </td>
        <td valign="top"><label for="textfield">
          <?php cargar_combo("tbltipoturno","id_TipoTurno","Nombre"); ?>
        </label></td>
        <td colspan="2" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td height="28">&nbsp;</td>
        <td>&nbsp;</td>
        <td width="1">&nbsp;</td>
        <td width="114" valign="top"><input name="Submit" type="submit" class="oBoton" id="Submit" value="Cargar OP &gt;&gt;" /></td>
        <td>&nbsp;</td>
    </tr>
  </table>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
</div>
</form>
los campos que no se deben duplicara son el nombre ni la Fecha, para que se no se duplique la informacion por fechas


y este es el que graba los datos en la tabla:
Código PHP:
<?php
//include ("../jao/conexion.php");
$enlace mysql_connect("localhost""root""") or die("No pudo conectarse : " mysql_error());
mysql_select_db("name") or die("No pudo seleccionarse la BD.");
 
$cliente=$_POST['tblclientes'];
$fechaFormat=$_POST['FechaInicio'];
$fecha=cambiaf_a_mysql($fechaFormat);
$operario=$_POST['tblempleados'];
$Turno=$_POST['tbltipoturno'];
$Numero=$_POST['Numero'];
$insert="insert into tbl_op (Fecha, id_Cliente, Id_Empleado, id_TipoTurno) values ('".$fecha."',".$cliente.",".$operario.",".$Turno.")";
$resIns=mysql_query($insert);
$idop=mysql_insert_id();
/*echo"<script>alert(\"$cliente\")</script>";*/
$sql "SELECT * FROM tblproducto WHERE id_cliente='".$cliente."'";
/*echo"<script>alert(\"$sql\")</script>";*/
$resSql=mysql_query($sql);
$numProductos=mysql_num_rows($resSql);
//para el cliente
$sqlC "SELECT * FROM tblempleados WHERE Id_Empleado='".$operario."'";
/*echo"<script>alert(\"$sqlC\")</script>";*/
$resSqlC=mysql_query($sqlC);
$rowClient=mysql_fetch_array($resSqlC);
//para el N de Guiass
$sqlA "SELECT * FROM tbl_op WHERE id_op='".$idop."'";
/*echo"<script>alert(\"$sqlA\")</script>";*/
$resSqlA=mysql_query($sqlA);
$rowGuias=mysql_fetch_array($resSqlA);
//para el cliente
$sqlo "SELECT * FROM tblclientes WHERE id_Cliente='".$cliente."'";
/*echo"<script>alert(\"$sqlC\")</script>";*/
$resSqlo=mysql_query($sqlo);
$rowCliente=mysql_fetch_array($resSqlo);

?>
saludos
  #2 (permalink)  
Antiguo 29/03/2009, 13:47
 
Fecha de Ingreso: marzo-2009
Mensajes: 12
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

Hola, la primera validación debería ser a nivel de la base de datos, esos campos deberían formar parte de la clave de la tabla, luego deberías hacerlo desde el código php asi:


Código PHP:
.....

$resSql=mysql_query($sql); 

if (
$resSql){
    echo 
"todo bien";
}else{
    echo 
"clave duplicada";
    echo 
mysql_error(); //te devuelve el error generado
}

..... 
espero que te sirva, saludos.
  #3 (permalink)  
Antiguo 29/03/2009, 20:44
Avatar de a83
a83
 
Fecha de Ingreso: noviembre-2005
Ubicación: Santiago de chile
Mensajes: 637
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

mmm no te entendi muy bien lo que me dices si lo que quiero validar es el ingreso de los datos para que no se dupliquen no entiendo el concepto que me quieres decir
  #4 (permalink)  
Antiguo 29/03/2009, 21:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

¿como vas a saber si un dato ya existe??

haciendo una consulta previa...

¿como evitas repetir un dato??

verificando que no exista, haciendo una consulta previa....

Código:
IF (SELECT columna FROM tabla WHERE columna=valor_nuevo)
{
  // el valor ya existe en la tabla
}
ELSE
{
  // INSERT ...
}
no entiendo, donde esta el problema??


__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 30/03/2009, 07:52
Avatar de a83
a83
 
Fecha de Ingreso: noviembre-2005
Ubicación: Santiago de chile
Mensajes: 637
Antigüedad: 18 años, 5 meses
Puntos: 1
Pregunta

pateketrueke creo que no me funciona de la forma que me estas diciendo esto o se que no es tan complicado pero no me esta funcionado me pasa la información =



Código PHP:
<?php
//include ("../jao/conexion.php");
$enlace mysql_connect("localhost""root""") or die("No pudo conectarse : " mysql_error());
mysql_select_db("name") or die("No pudo seleccionarse la BD.");
 
$cliente=$_POST['tblclientes'];
$fechaFormat=$_POST['FechaInicio'];
$fecha=cambiaf_a_mysql($fechaFormat);
$operario=$_POST['tblempleados'];
$Turno=$_POST['tbltipoturno'];
$Numero=$_POST['Numero'];

IF (
SELECT Fecha FROM tbl_op WHERE Fecha=valor_nuevo)
{
  
// el valor ya existe en la tabla
}
ELSE
{
$insert="insert into tbl_op (Fecha, id_Cliente, Id_Empleado, id_TipoTurno) values ('".$fecha."',".$cliente.",".$operario.",".$Turno.")";}
$resIns=mysql_query($insert);
$idop=mysql_insert_id();
/*echo"<script>alert(\"$cliente\")</script>";*/
$sql "SELECT * FROM tblproducto WHERE id_cliente='".$cliente."'";
/*echo"<script>alert(\"$sql\")</script>";*/
$resSql=mysql_query($sql);
$numProductos=mysql_num_rows($resSql);
//para el cliente
$sqlC "SELECT * FROM tblempleados WHERE Id_Empleado='".$operario."'";
/*echo"<script>alert(\"$sqlC\")</script>";*/
$resSqlC=mysql_query($sqlC);
$rowClient=mysql_fetch_array($resSqlC);
//para el N de Guiass
$sqlA "SELECT * FROM tbl_op WHERE id_op='".$idop."'";
/*echo"<script>alert(\"$sqlA\")</script>";*/
$resSqlA=mysql_query($sqlA);
$rowGuias=mysql_fetch_array($resSqlA);
//para el cliente
$sqlo "SELECT * FROM tblclientes WHERE id_Cliente='".$cliente."'";
/*echo"<script>alert(\"$sqlC\")</script>";*/
$resSqlo=mysql_query($sqlo);
$rowCliente=mysql_fetch_array($resSqlo);

?>

Última edición por GatorV; 30/03/2009 a las 10:35
  #6 (permalink)  
Antiguo 30/03/2009, 08:21
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

Es tan facil como hacer una consulta previa antes de insertar los datos comparando los datos en la bd, si el dato existe no lo guarda, y si no existe lo crea.
__________________
Drupal Argentina
  #7 (permalink)  
Antiguo 30/03/2009, 09:15
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

La validación, tal y como la necesitas, la puedes hacer de dos maneras:

1. Por la base de datos, declarando el campo que no quieres que se duplique como "unique".

En tu caso, que no se puede duplicar ni el nombre ni la fecha:

Código sql:
Ver original
  1. CREATE TABLE algo
  2. (
  3. nombre VARCHAR(20) UNIQUE;
  4. fecha DATE UNIQUE;
  5. );

2. Por medio de php, haciendo una consulta previa y comparando los campos que no quieres que se repitan:

Código php:
Ver original
  1. $ban = 0;
  2. $q_sqla = "select * from cosa where nombre='{$_POST['nombre']}' and fecha='{$_POST['fecha']}'";
  3. $r_sqla = mysql_query($q_sqla);
  4. $n_sqla = mysql_num_rows($r_sqla);
  5. if(0 == $n_sqla)
  6. {
  7. // "Hacer resto de proceso";
  8. }
  9. else
  10. {
  11. // "No se puede ingresar porque está duplicado"
  12. }

Eso es todo...

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #8 (permalink)  
Antiguo 30/03/2009, 10:01
Avatar de a83
a83
 
Fecha de Ingreso: noviembre-2005
Ubicación: Santiago de chile
Mensajes: 637
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

VL.2 me envia el siguiente error

Parse error: syntax error, unexpected '}', expecting ',' or ';' in C:\xampp\htdocs\siap\op\carga_op.php on line 135


Código PHP:
$cliente=$_POST['tblclientes'];
$fechaFormat=$_POST['FechaInicio'];
$fecha=cambiaf_a_mysql($fechaFormat);
$operario=$_POST['tblempleados'];
$Turno=$_POST['tbltipoturno'];
$Numero=$_POST['Numero'];

$ban 0;
$q_sqla "select * from tbl_op where Id_Empleado='{$_POST['Id_Emplead']}' and Fecha='{$_POST['Fecha']}'";
$r_sqla mysql_query($q_sqla);
$n_sqla mysql_num_rows($r_sqla);
if(
== $n_sqla)
{
// "Hacer resto de proceso";
}
else
{
echo 
"No se puede ingresar porque está duplicado"
}
$insert="insert into tbl_op (Fecha, id_Cliente, Id_Empleado, id_TipoTurno) values ('".$fecha."',".$cliente.",".$operario.",".$Turno.")";
$resIns=mysql_query($insert);
$idop=mysql_insert_id();
/*echo"<script>alert(\"$cliente\")</script>";*/
$sql "SELECT * FROM tblproducto WHERE id_cliente='".$cliente."'";
/*echo"<script>alert(\"$sql\")</script>";*/
$resSql=mysql_query($sql);
$numProductos=mysql_num_rows($resSql);
//para el cliente
$sqlC "SELECT * FROM tblempleados WHERE Id_Empleado='".$operario."'";
/*echo"<script>alert(\"$sqlC\")</script>";*/
$resSqlC=mysql_query($sqlC);
$rowClient=mysql_fetch_array($resSqlC);
//para el N de Guiass
$sqlA "SELECT * FROM tbl_op WHERE id_op='".$idop."'";
/*echo"<script>alert(\"$sqlA\")</script>";*/
$resSqlA=mysql_query($sqlA);
$rowGuias=mysql_fetch_array($resSqlA);
//para el cliente
$sqlo "SELECT * FROM tblclientes WHERE id_Cliente='".$cliente."'";
/*echo"<script>alert(\"$sqlC\")</script>";*/
$resSqlo=mysql_query($sqlo);
$rowCliente=mysql_fetch_array($resSqlo);
}
?> 
  #9 (permalink)  
Antiguo 30/03/2009, 10:31
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

Falta el punto y coma del echo en el else.

Otra cosa, creo que de esa forma nunca te traerá que es duplicado, porque comparas con el id, si tienes ese como autonumerico, el nunca se va a repetir, debes verificar con otros datos.
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #10 (permalink)  
Antiguo 30/03/2009, 10:50
Avatar de a83
a83
 
Fecha de Ingreso: noviembre-2005
Ubicación: Santiago de chile
Mensajes: 637
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

pana te refieres al id del empleado Id_Empleado ese dato no es auto numérico en la tabla sino que paso ese dato de la tabal tbl_empleados solo ago la comparacion entre ese Id_Empleado y la fecha actual del ingreso, puede ser que sea mejor que no compare con ese campo
  #11 (permalink)  
Antiguo 30/03/2009, 10:52
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

Ese es el id de la tabla?
Debes comparar con datos que te digan si es el registro que buscas, con un id de tabla no lo tendras, ya que ese datos no se repetirá, me comprendes?

Salu2
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #12 (permalink)  
Antiguo 30/03/2009, 10:56
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

Al parecer ese campo pertenece a una tabla "puente", según lo que le entiendo a a83, entonces no será autoincrementable sino foránea...

Entonces... si quieres que un registro se ingrese sólo una vez por el mismo usuario, haces lo que te dije arriba (validas el id y la fecha).

Si sólo quieres que se ingrese el registro una vez sin importar el usuario, valida por fecha

Espero me entiendas,

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #13 (permalink)  
Antiguo 30/03/2009, 11:22
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años
Puntos: 43
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

Ok, entiendo, es foranea, bueno de ser así si puedes usarla.
Toma nota de lo que dice Carxl.
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #14 (permalink)  
Antiguo 30/03/2009, 14:10
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Como puedo valiadar que el reguitro no se ingrece 2 beces

aparte que te falta cerrar las variables entre comilla simple...

Código PHP:
$insert="insert into tbl_op (Fecha, id_Cliente, Id_Empleado, id_TipoTurno) values ('".$fecha."',".$cliente.",".$operario.",".$Turno.")";
$resIns=mysql_query($insert); 
asi:
Código PHP:
$insert="insert into tbl_op (Fecha, id_Cliente, Id_Empleado, id_TipoTurno) values ('".$fecha."' , '".$cliente."' , '".$operario."' , '".$Turno."' )";
$resIns=mysql_query($insert); 
y como sugerencia, INDENTAR... dios inventó los espacios, tabulados y saltos de línea para aliviar nuestra existencia.... (y debug)(En buena:)

Silla!
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 07:24.