Foros del Web » Programando para Internet » PHP »

insertar registro 8 veces

Estas en el tema de insertar registro 8 veces en el foro de PHP en Foros del Web. Estimados amigos nuevamente buscando ayuda sobre un codigo para insertar datos ahurita inserta correctamente en una tablita que tiene tres campos: TB dni fecha hora ...
  #1 (permalink)  
Antiguo 20/07/2009, 07:12
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
insertar registro 8 veces

Estimados amigos nuevamente buscando ayuda sobre un codigo para insertar datos ahurita inserta correctamente en una tablita que tiene tres campos:
TB
dni
fecha
hora

ahora mi problema es cuando quiero controlar que cada usuario solo pueda ingresar su dni 8 veces y que cada vez que introduzca su dni lo identifique de la siguiente manera:
E primera vez
S segunda vez
E tercera vez
S cuarta vez
E quinta vez
S sexta vez
E septima vez
S octava vez
todo esto que solo por dia pueda introducir las 8 veces, espero que puedan darme una manito que con esto que nose como hacerlo mi codigo de insertar es el siguiente:

$sql = "INSERT INTO $tabla (dni, fecha, hora)
VALUES ('$dni',' ".date("Y-m-d h:i:s")." ',' ".date("h:i:s")." ')";

Gracias de manera anticipada,
  #2 (permalink)  
Antiguo 20/07/2009, 07:46
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

Tener otra columna para la hora es un poco tonteria, ya que la incluye FECHA.

Primero haz un SELECT con un WHERE que recoja todos los registros hechos ese dia, y depues comprueba el numero de filas con num_rows y apartir de hay supongo que sebras continuar.
  #3 (permalink)  
Antiguo 20/07/2009, 08:23
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

estimado El-FeNIX es eso justamente en lo que necesito ayuda hago esto y de ahi se me complican las cosas y quiero que me muestre con un identificativo las 8 veces que el ingresa el dni te muestro el codigo que tengo, gracias si me puedes dar mas luces de como hacerlo

$sql = "SELECT * FROM $tabla WHERE dni = '$dni' ";
$rows = mysql_num_rows (mysql_db_query($base, $sql));
if ($rows) {
/* introducir un código válido */
$sql = "INSERT INTO $tabla1 (dni, fecha, hora)
VALUES ('$cirun',' ".date("Y-m-d h:i:s")." ',' ".date("h:i:s")." ')";

/* se ejecuta la consulta */
mysql_db_query($base ,$sql) ;
  #4 (permalink)  
Antiguo 20/07/2009, 08:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: insertar registro 8 veces

Creo tu if debería ser: if ($rows < 8).

Saludos.
  #5 (permalink)  
Antiguo 20/07/2009, 08:56
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: insertar registro 8 veces

pero a tu select tienes que agregarl el filtrado de la fecha actual, para que solo tome este dia
  #6 (permalink)  
Antiguo 20/07/2009, 09:26
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
estimado Sergestux
como haria eso que tendria que aumentarle a ese codigo

estimado GatorV,
aumentandole ese <8 en el if por alguna razon me quita el control de insertar solo dni validos

Última edición por GatorV; 20/07/2009 a las 10:17
  #7 (permalink)  
Antiguo 20/07/2009, 10:07
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

"SELECT * FROM $tabla WHERE dni = '$dni' AND CURDATE() <= fecha";

EDIT:
El insert tambien creo que seria mejor asi (dejando a mysql encargarse de la fecha)

"INSERT INTO $tabla1 (dni, fecha, hora) VALUES ('$cirun', NOW() , CURTIME() )";

EDIT2: No entiendo lo ultimo que has dicho ¿a que te refieres con "me quita el control de insertar solo dni validos"?

Saludos.

Última edición por El-FeNiX; 20/07/2009 a las 10:16
  #8 (permalink)  
Antiguo 20/07/2009, 12:33
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

Cita:
Iniciado por El-FeNiX Ver Mensaje
"SELECT * FROM $tabla WHERE dni = '$dni' AND CURDATE() <= fecha";

EDIT:
El insert tambien creo que seria mejor asi (dejando a mysql encargarse de la fecha)

"INSERT INTO $tabla1 (dni, fecha, hora) VALUES ('$cirun', NOW() , CURTIME() )";

EDIT2: No entiendo lo ultimo que has dicho ¿a que te refieres con "me quita el control de insertar solo dni validos"?

Saludos.
Lo que pasa estimado, es que GatorV me indico que con colocar en if($row<8) solucionaria el problema de la restricion de que cada usuario solo introduzca 8 veces solamente por dia pero no pasa nada.
  #9 (permalink)  
Antiguo 20/07/2009, 14:33
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

Puedes poner el codigo tal como lo tienes ahora?
  #10 (permalink)  
Antiguo 20/07/2009, 16:04
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

Cita:
Iniciado por El-FeNiX Ver Mensaje
Puedes poner el codigo tal como lo tienes ahora?
<?php
/* declaracion de variables */
$base = "TB";
$tabla = "control";
$tabla1 = "usuarios";
$dni = $_POST["dni"];

if ($dni) {
if ($link = mysql_connect("localhost","root","123456")) {
/* Conexión correcta */
$sql = "SELECT * FROM $tabla1 WHERE dni = '$dni' ";
$rows = mysql_num_rows (mysql_db_query($base, $sql));
if ($rows) {
/* introducir un código válido */
$sql = "INSERT INTO $tabla (dni, fecha, hora)
VALUES ('$dni',' ".date("Y-m-d h:i:s")." ',' ".date("h:i:s")." ')";

/* se ejecuta la consulta */
mysql_db_query($base ,$sql) ;
/* marcacion correcta de su carnet de identidad */
print "<h2><CENTER>CORRECTA</CENTER></b></H2>";
/* si hay error hacemos debug */
if (mysql_errno()) {
print "
<p>Se ha producido un error</p>
<p>Error en la consulta:</p>
SQL: $sql<hr />
<p>Error nº ".mysql_errno()."</p>
<p>MySQL dijo: ".mysql_error()."</p>
";
}
} else {
/* no existe ningun cirum en la base de datos o han metido mal su carnet */
print "<h2><CENTER>SU CARNET NO VALIDO</CENTER></b></H2>";
}
/* cierre de la conexion */
mysql_close($link);
} else {
/* La conexion MySQL falló */
die("Imposible conectar con la base de datos");
}
} else {
/* Falta carnet */
print "<h2><CENTER>DEBE INTRODUCIR DATOS</CENTER></b></H2>";
}
?>

estimado este codigo me funciona bien pero quiero agregarle una condicion que solo me permita introducir 8 veces cada dia y que a esas 8 veces por usuario me las identifique asi:
E primera vez
S segunda vez
E tercera vez
S cuarta vez
E quinta vez
S sexta vez
E septima vez
S octava vez
eso claro si se puede la tabla que utilizo contine cuatro campos:
TB
idc
dni
fecha
hora
te agradeceria mucho si puedes ayudarme con esto
  #11 (permalink)  
Antiguo 21/07/2009, 14:51
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

Cita:
Iniciado por pedroca Ver Mensaje
...
Te lo decia por lo mismo No has modificado lo que te dije arriba.

Sobre todo es importe lo del select... Lo que hace la ultima clapsula WHERE es cojer solo las filas que han sido insertadas ese mismo dia. Asi, despues con el "if ($rows < 8)" hace que se inserte UNICAMENTE si el numero de filas es menor ha ocho. Como con esa consulta mysql solo se cojeran las filas que tengan el mismo DNI y que hayan sido inseradas ese dia ya se cumple lo que has pedido: Limitar el numero de inserciones con el mismo DNI a 8 veces como maximo en un unico dia.

Un saludo.
  #12 (permalink)  
Antiguo 22/07/2009, 08:45
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

Cita:
Iniciado por El-FeNiX Ver Mensaje
Te lo decia por lo mismo No has modificado lo que te dije arriba.

Sobre todo es importe lo del select... Lo que hace la ultima clapsula WHERE es cojer solo las filas que han sido insertadas ese mismo dia. Asi, despues con el "if ($rows < 8)" hace que se inserte UNICAMENTE si el numero de filas es menor ha ocho. Como con esa consulta mysql solo se cojeran las filas que tengan el mismo DNI y que hayan sido inseradas ese dia ya se cumple lo que has pedido: Limitar el numero de inserciones con el mismo DNI a 8 veces como maximo en un unico dia.

Un saludo.
estimado gracias lo modifique y funciona perfecto pero ahora tengo el problemita que como identifico las ocho veces que inserto por decir:
E primera vez
S segunda vez
E tercera vez
S cuarta vez
E quinta vez
S sexta vez
E septima vez
S octava vez
o tendria que tener ocho campos en mi tabla, pero eso se complicaria mas creo porque tendria que controlar por fecha que cada usuario inserte las ocho veces y en diferente campo sera que me podrias dar una idea de como realizarlo porfa...
y gracias nuevamente por tu tiempo y disponibilidad.
  #13 (permalink)  
Antiguo 24/07/2009, 09:13
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

Hola de nuevo, pedroca.

No entiendo muy bien lo que quieres hacer.

He "limpiado" el codigo porque antes me parececia muy enrevesado. Te recomiendo que cuando hagas operaciones en las bases de datos compruebes el error inmediatamente en lugar se usar tantos bloques if/else, ya que termina el codigo ilegible.

Esto se consigue haciendo un if usando el operador not (!) que lo que hace es dar al vuelta al resultado (si es true lo cambia a false y si es false lo cambia a true). Dicho asi parece compliado pero si lo lees como "Si no... esto ... haz esto"

Ejemplo:

if (! mysql_query($link,etc..) ) {
die ("Error en la consulta");
}

Que significa: Si el valor devuelto por la funcion mysql_query es negativo, entonces terminar la ejecucion del script con un mensaje de error.

Asi se puede decir que "te quitas el error de en medio", ya que si hay error envia el mensaje de error y se deja de ejecutar el codigo. Y en caso contrario sigue adelante.

Te pongo el codigo aplicando eso:

Código PHP:
<?php
/* declaracion de variables */
$base "TB";
$tabla "control";
$tabla1 "usuarios";
$dni $_POST["dni"];

if (!
$dni) {
    
/* Falta carnet */
    
die("<h2><CENTER>DEBE INTRODUCIR DATOS</CENTER></b></H2>");
}

if (!
$link mysql_connect("localhost","root","123456")) {
    
/* La conexion MySQL falló */
    
die("Imposible conectar con la base de datos");
}

/* Conexión correcta */
$sql "SELECT * FROM $tabla WHERE dni = '$dni' AND CURDATE() <= fecha";;
$res mysql_db_query($base$sql);
$rows mysql_num_rows($res);

if (!
$rows) {
    
/* no existe ningun cirum en la base de datos o han metido mal su carnet */
    
die("<h2><CENTER>SU CARNET NO VALIDO</CENTER></b></H2>");
}

if (
$rows >= 8) {
    
// Se ha exceido el limite de que solo haya 8 consultas en un dia
    
die("<h2><CENTER>LIMITE EXCEDIDO/CENTER></b></H2>");
}

/* introducir un código válido */

$sql "INSERT INTO $tabla1 (dni, fecha, hora) VALUES ('$dni', NOW() , CURTIME() )";        
/* se ejecuta la consulta */
if (!$res mysql_db_query($base ,$sql)) {
    
/* La conexion MySQL falló */
    
die("
    Error al ejecutar la consulta en la base de datos
    SQL: $sql<hr />
    <p>Error nº "
.mysql_errno()."</p>
    <p>MySQL dijo: "
.mysql_error()."</p>
    "
);
}
/* marcacion correcta de su carnet de identidad */

print "<h2><CENTER>CORRECTA</CENTER></b></H2>";
?>
Lo que me has pedido no lo entiendo muy bien, ¿esa letra es para mostrarla en pantalla o para insertar en la base de datos junto con el numero?

Saludos.

Última edición por El-FeNiX; 24/07/2009 a las 09:29 Razón: Arreglos en el codigo
  #14 (permalink)  
Antiguo 24/07/2009, 12:52
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

Cita:
Iniciado por El-FeNiX Ver Mensaje
Hola de nuevo, pedroca.

No entiendo muy bien lo que quieres hacer.

He "limpiado" el codigo porque antes me parececia muy enrevesado. Te recomiendo que cuando hagas operaciones en las bases de datos compruebes el error inmediatamente en lugar se usar tantos bloques if/else, ya que termina el codigo ilegible.

Esto se consigue haciendo un if usando el operador not (!) que lo que hace es dar al vuelta al resultado (si es true lo cambia a false y si es false lo cambia a true). Dicho asi parece compliado pero si lo lees como "Si no... esto ... haz esto"

Ejemplo:

if (! mysql_query($link,etc..) ) {
die ("Error en la consulta");
}

Que significa: Si el valor devuelto por la funcion mysql_query es negativo, entonces terminar la ejecucion del script con un mensaje de error.

Asi se puede decir que "te quitas el error de en medio", ya que si hay error envia el mensaje de error y se deja de ejecutar el codigo. Y en caso contrario sigue adelante.

Te pongo el codigo aplicando eso:

Código PHP:
<?php
/* declaracion de variables */
$base "TB";
$tabla "control";
$tabla1 "usuarios";
$dni $_POST["dni"];

if (!
$dni) {
    
/* Falta carnet */
    
die("<h2><CENTER>DEBE INTRODUCIR DATOS</CENTER></b></H2>");
}

if (!
$link mysql_connect("localhost","root","123456")) {
    
/* La conexion MySQL falló */
    
die("Imposible conectar con la base de datos");
}

/* Conexión correcta */
$sql "SELECT * FROM $tabla WHERE dni = '$dni' AND CURDATE() <= fecha";;
$res mysql_db_query($base$sql);
$rows mysql_num_rows($res);

if (!
$rows) {
    
/* no existe ningun cirum en la base de datos o han metido mal su carnet */
    
die("<h2><CENTER>SU CARNET NO VALIDO</CENTER></b></H2>");
}

if (
$rows >= 8) {
    
// Se ha exceido el limite de que solo haya 8 consultas en un dia
    
die("<h2><CENTER>LIMITE EXCEDIDO/CENTER></b></H2>");
}

/* introducir un código válido */

$sql "INSERT INTO $tabla1 (dni, fecha, hora) VALUES ('$dni', NOW() , CURTIME() )";        
/* se ejecuta la consulta */
if (!$res mysql_db_query($base ,$sql)) {
    
/* La conexion MySQL falló */
    
die("
    Error al ejecutar la consulta en la base de datos
    SQL: $sql<hr />
    <p>Error nº "
.mysql_errno()."</p>
    <p>MySQL dijo: "
.mysql_error()."</p>
    "
);
}
/* marcacion correcta de su carnet de identidad */

print "<h2><CENTER>CORRECTA</CENTER></b></H2>";
?>
Lo que me has pedido no lo entiendo muy bien, ¿esa letra es para mostrarla en pantalla o para insertar en la base de datos junto con el numero?

Saludos.

gracias lo voy a revisar querido amigo de lo ultimo es que se inserte en la BD como lo indique en el otro tema gracias nuevamente por tu tiempo
  #15 (permalink)  
Antiguo 24/07/2009, 16:47
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

Hola.

Todavia no me has indicado si se inserta en la base de datos en otra columna o un la misma sumandoselo al numero?

Y despues esto que me dijiste:

E primera vez
S segunda vez
E tercera vez
S cuarta vez
E quinta vez
S sexta vez
E septima vez
S octava vez

Entiendo que cuando sea impar inserte una E y cuando sea par inserte una S. cierto?

Saludos.
  #16 (permalink)  
Antiguo 25/07/2009, 07:03
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

cierto asi tiene que ser, pero cada dia tiene que empezar nuevamente no te olvides que cada dia solo puede agregar 8 veces su dni
  #17 (permalink)  
Antiguo 25/07/2009, 07:05
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

mejor seria en otra columna
  #18 (permalink)  
Antiguo 25/07/2009, 12:42
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

Por favor, dame el codigo tal como lo tienes ahora, seguramente abras echo cambios.

Saludos.
  #19 (permalink)  
Antiguo 27/07/2009, 07:01
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

estimado lo que hice fue agregarle dos radio buton a mi formulario para que cuando coloque el dni selecione la E o la S y aumentarle un campo a la BD pero si tu tienes una solucion mejor seria me gustaria saberlo y gracias por la preocupacion y me gustaria tener tu msn si es posible, como recien estoy empezandso en esto del php siempre es bueno tener a alguien que conoce sobre el tema.
Gracias,
  #20 (permalink)  
Antiguo 27/07/2009, 07:30
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: insertar registro 8 veces

Tienes un MP.
  #21 (permalink)  
Antiguo 27/07/2009, 10:42
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: insertar registro 8 veces

Cita:
Iniciado por El-FeNiX Ver Mensaje
Tienes un MP.
disculpa mi ignorancia que es MP.
  #22 (permalink)  
Antiguo 27/07/2009, 11:08
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: insertar registro 8 veces

En mi tierra asi se le llama al Ministerio Publico

Jejeje no es cierto, aca se le llama asi al Mensaje Privado, tienes que darle en panel de control para poder leerlo
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 16:13.