Re: [PHP-ES] Consulta sobre php y mysql
[email protected] (Satyam) Wed, 14 Mar 2012 17:51:51 +0100
| Newsgroups | php.general.es |
|---|---|
| Message-ID | <[email protected]> |
Antes de otorgar el premio debes hacer, mediante AJAX o técnica similar, una conexión con el servidor que haga dos operaciones en la base de datos que verifique que el premio no ha sido otorgado. Esto, habitualmente, se traduce en hacer un update de un campo booleano en el premio que indique que ha sido otorgado, solo si ese campo es falso. Update TablaPremios set otorgado= 1 where premio='xxxxx' and otorgado = 0; Luego verificas el numero de registros afectados. Si se ha afectado un registro, es que no habÃa sido otorgado. Si no se afecto ningun registro, es que ya estaba otorgado. Nota que en esta unica instrucción, que no admite interrupciones, verificas que no haya sido otorgado y lo marcas otorgado, todo en una operación indivisible. Satyam On 03/14/2012 05:01 PM, Ricardo Vila wrote: > Bueno estoy usando innodb, el tema es que quiero ver como prevenir que un > premio se entregue a dos personas. > > porque el proceso como lo mencione es: > - veo si hay premios (una consulta a la bd) > - genero un arreglo de 10 posiciones (el # de posiciones puede cambiar, > solo a modo de ejemplo puse 10) > - Si hay premios (en este caso se asume que solo queda 1 premio), lo agrego > al arreglo > teniendo : $arrpremio = array(0,0,0,1,0,0,0,0,0,0) > - Luego obtengo un random de 0 a 9,(asumo que me manda 3) > - Ese valor es el indice del arreglo, entonces obtengo su valor, es decir > $gano = $arrpremio[3] ( y esto es igual a 1) > - aca pregunto si valor es 1, gano si no que siga intentando > - Entonces bajo este esquema, se puede dar que a dos usuarios jugando > simultaneamente les muestre el premio. > > Agradezco de antemano sus respuestas > > Saludos, > Ricardo Vila > > > > 2012/3/14 Ricardo Martinez<[email protected]> > >> Mmm, en mi opinión: >> >> entiendo que como motor estás usando MyIsam. En caso contrario >> especificalo. >> >> Todas las consultas que dices que haces y acciones, deberÃas de hacerlas >> todas la vez dentro de un >> >> try >> { >> sentencias >> } >> >> Un saludo!!! >> >> >> On Wed, Mar 14, 2012 at 12:14 AM, Ricardo Vila<[email protected]>wrote: >> >>> Buenas listeros, >>> >>> La presente es para consultarles respecto a como podrÃa hacer para evitar >>> que un registro se muestre igual a dos usuarios distintos, me explico con >>> un ejemplo >>> >>> Tengo una tabla premios, con los campos idpremio, cantidad >>> >>> entonces como puedo prevenir que si tengo un registro que tenga en el >>> campo >>> cantidad = 1, y dos usuarios ingresan a la vez, el sistema lo que hace es >>> ver si hay premios, en este caso, obtiene 1, luego genero un arreglo de 10 >>> posiciones y coloco este id dentro, genero un random y luego obtengo un >>> indice y con esto veo si gano o no, entonces, si dos usuarios estan a la >>> vez ingresando, hay la posibilidad de que a ambos le salga que ganaron el >>> premio cuando en realidad solo hay un premio. >>> >>> Como podrÃa evitar este problema, estuve pensando en bloquear las tabla >>> hasta que termine de jugar un usuario, pero eso tomarÃa tiempo por cada >>> usuario, de ser asÃ, serÃa factible usar colas, para poder procesar esta >>> información >>> >>> agradezco de antemano su respuesta >>> >>> Saludos, >>> Ricardo Vila >>> >> >> >> -- >> Ricardo >> _______________________________________________ >> IT Architect >> website: http://www.pulsarinara.com >>