Foros del Web » Programando para Internet » PHP »

Un campo no debe tener los 2 mismos valores

Estas en el tema de Un campo no debe tener los 2 mismos valores en el foro de PHP en Foros del Web. Hola Esta pregunta es muy sencilla acerca de mysql/php, disculpen la ignorancia. Estoy haciendo un insert, 2 campos pueden tener valores repetidos, pero otro campo ...
  #1 (permalink)  
Antiguo 27/06/2006, 10:13
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 1 mes
Puntos: 10
Un campo no debe tener los 2 mismos valores

Hola

Esta pregunta es muy sencilla acerca de mysql/php, disculpen la ignorancia.

Estoy haciendo un insert, 2 campos pueden tener valores repetidos, pero otro campo en particular no debe repetirse, y en el caso que ese campo ya estuviera solo debe actualizarse ¿como le hago para obtener esto?

He visto que usan el DISTINCT, pero solo he visto que lo usan para los SELECT y no he visto un ejemplo para el INSERT

Mi insert es asi, me funciona bien

Código PHP:
$consulta_insertar "INSERT INTO resoluciones (userid, res, ip) VALUES ('$laid', '$res', '$laip')"
Se me ocurrio hacer un UPDATE, pero esto solo actualiza, no inserta si el campo no existe
Código PHP:
$consulta_insertar "UPDATE resoluciones SET res='$res' WHERE userid='$laid'"
  #2 (permalink)  
Antiguo 27/06/2006, 10:22
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo

Lo que puedes hacer es especificar en la base de datos como "unique" ese campo, o bien antes de insertar el dato realizar un Select sobre tu base datos buscado dicho dato
Código PHP:
<?
$query 
= ("Select res from mi_tabla where res=".$res)
if(
mysql_num_rows($query) > 0)
{
  echo 
"Dato repetido";
}
else
{
  
//tu rutina.....
}
?>
  #3 (permalink)  
Antiguo 27/06/2006, 11:00
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Como bien indica Mauled lo mejor es que indiques como unique ese campo, si intentas introducir un registro repetido te retornará error y lo puedes indicar.

$sql="INSERT INTO tabla VALUES (1,1)"
if($result=mysql_query($sql))
{
echo "el registro se introdujo, no está repetido";
}
else
{
echo "hubo un error, debe estar repetido";
}

Si me apuras hasta podrías mirar el error numérico que retorna con mysql_errno(), y ponerlo en el condicional para estar seguro que el error viene de ahí.

Ciao.
  #4 (permalink)  
Antiguo 27/06/2006, 12:14
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 1 mes
Puntos: 10
Muchas Mauled y Forecast

Con lo que me sugieres Mauled el problema es que me da este error

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/august7/public_html/Res/ins.php on line 15

Forecast, con lo que tu me dices me ahorro una consulta a la BD, el problema es que dice que no inserto los datos a la BD (mostrando el mensaje que se pone en el die() de la conexion), pero verifico en el phpMyAdmin y si inserto los datos

Que puedo hacer, para resolver el problema?

Saludos
  #5 (permalink)  
Antiguo 27/06/2006, 12:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Se trata de consultar a tu BBDD por el dato que es único o no ha de repetirse .. si no hay resultados (para eso se cuentan con mysql_num_rows()) .. haces tu otro proceso (tu insert):

Código PHP:
$sql "Select res from mi_tabla where res='".$res."'";
$resultado=mysql_query($sql) or die (mysql_error());

if(
mysql_num_rows($resultado) > 0) {
   echo 
"el registro se introdujo, no está repetido";
} else {
    
// ejecutas tu INSERT ...

Otra técnica es la de crear tu campo con propiedad "unico" (UNIQUE) y "esperar" el error, .. al ser único se origina un código de error el cual puedes detectar y filtrar con la función mysql_errno() .. (A mi en lo personal no me gusta tratar este método de esta forma . .pero si colocar como "UNIQUE" el campo que no quiero que existan repetidos por si "meto" mano a la BBDD por algún GUI o me llegase a "fallar" mi própio código).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 27/06/2006, 13:51
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 1 mes
Puntos: 10
Gracias a todos y tambien a ti Cluster, lo mas extraño es que tengo que recargar la pagina para que no me salga este error:

Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 2

Aunque esto es cuando hago el SELECT para obtener los datos insertados en esta misma tabla
  #7 (permalink)  
Antiguo 27/06/2006, 14:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si indicas el código exacto (todo) que usas ahí podremos ver con más detalle donde pueda estar tu problema concreto.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 27/06/2006, 17:45
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 1 mes
Puntos: 10
Hola, Cluster, gracias por tu ayuda, mysql_data_seek y mysql_result son similares para escoger un solo campo, y yo se que no deberia poner un ciclo porque no es necesario pero ya lo intente de varios modos,

Lo unico que quiero es obtener un campo de la BD , por eso uso el WHERE, pero tengo que volver a actualizar la pagina, para que me muestre el campo, sino actualizo la pagina no muestra el campo y si no pongo el ciclo ni recargando la pagina muestra el campo

Código PHP:
$filares=mysql_query("SELECT * FROM resoluciones WHERE userid='".$_SESSION['usuario_sesion']."'");

mysql_data_seek($filares0);

while (
$row mysql_fetch_array($filares)) {
   
$laresolucion=$row['res'];

Te agradesceria me dieran su consejo gracias
  #9 (permalink)  
Antiguo 28/06/2006, 06:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No debes usar mysql_data_seek() .. esa función se usa para "mover" el puntero interno de una consulta SQL dada hacia donde necesites ..

Si sólo tienes un resultado (o cero) puedes usar mysql_fetch_row() sin bucle alguno (sin el while) o incluso mysql_result() para acceder al resultado concreto.

Tu ejemplo podría quedar tipo:

Código PHP:
$filares=mysql_query("SELECT * FROM resoluciones WHERE userid='".$_SESSION['usuario_sesion']."'");
if (
mysql_num_rows()==1){
   
$laresolucionmysql_result($filares,0,'res');
} else {
   
$laresolucion="no hay resultados";
}

echo 
$laresolucion
Si te fijas .. aunque según parece ser en tu caso el resultado posible de tu consulta SQL podría ser entre 1 registro o 0 .. igual valido que sea un resultado el esperado o ninguno y trabajo ese caso con mysql_num_rows() que nos cuenta el n° de resultados de una consulta SQL.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 28/06/2006, 19:38
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 1 mes
Puntos: 10
Realmente muchas gracias Cluster, creeme que realmente esto es muy importante y te agradesceria me ayudaras

Me dice que hay un error de parametro incorrecto en mysql_num_rows()

Lo habia intentado asi, lo cual me funcionaba, solo si recargaba la pagina, si no da un error diciendo en mysql_result que row 0, no puede ser obtenido

Código PHP:
$filares=mysql_query("SELECT * FROM resoluciones WHERE userid='".$_SESSION['usuario_sesion']."'");
   
$laresolucionmysql_result($filares,0,'res');
echo 
$laresolucion
Sin embargo, ya descubri el error, lo que intento es usar un principio basico de "remote scripting"

hago lo siguiente:

1. Genero una session unica
Código PHP:
<?php
session_start
();
if(!isset(
$_SESSION['usuario_sesion']))
{
$token=uniqid("");
$better_token uniqid(rand());
$_SESSION['usuario_sesion']=$better_token;
}

?>
2. Envio los datos por URL, atravez de un iframe ya tambien intente usar AJAX pero no los pude enviar los datos
Código PHP:

<script type="text/javascript"> 
function autoresol(){
var imagen = document.getElementById("imagen");
imagen.src = 'http://augustino.net/Res/ins.php?resolucion='+screen.width+'&idusuario=<?php print($_SESSION['usuario_sesion']);?>';
}
</script></head>
<body onLoad="autoresol();">
<iframe id="imagen"></iframe>
Utilizo un iframe, por que la W3C para XHTML 1.0 no me valida imagenes u object con id y sin src, e iframe si lo hace, no he probado con mas etiquetas html

3.Posteriormente intento hacer la consulta a la base de datos, pero cuando el iframe tarda en cargar mas, entonces logicamente me da un error porque estoy tratando de hacer un consulta a un campo inexistente, entonces por eso si recargo la pagina ya me muestra el campo en la Base de datos
Esto ya lo conocen
Código PHP:
$filares=mysql_query("SELECT * FROM resoluciones WHERE userid='".$_SESSION['usuario_sesion']."'");
   
$laresolucionmysql_result($filares,0,'res');
echo 
$laresolucion
La solucion es que el iframe carge antes que toda la pagina o tambien pensaba en "retrazar" la consulta usando un microtime pero lo unico que haria es gastar tiempo de ejecucion

Entonces, lo primero que se carge en la pagina debe ser el iframe, lo cual todavia no lo se hacer o de otra manera

Te agradesceria infinitamente me dijeras como le puedo hacer para que el iframe sea "cargado completamente" y ya despues pueda hacer la consulta o alguna otra idea, para que esto funcione

Muchas gracias y espero me puedan decir como hacer esto
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 17:47.