begin process at 2010 09 03 08:36:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive ColdFusion

 > 

Archives

 > 

ColdFusion Studio

 > 

Tester une valeur avec CF ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Tester une valeur avec CF ?

mercredi 22 décembre 2004 à 18:38:56 | Tester une valeur avec CF ?

aresh

Membre Club
Bonsoir à tous ,

J'ai un petit soucis. J'ai une jolie base de donnée, avec 300 entrée environs, mais dans la structure, il y a des "trou" (certainne ligne se sont faite deletté). Ces trou ne géne en rien habituellement suaf pour une page de mon site.

En effet, j'affiche les données d'une ligne aléatoirement pour mes utilisateurs (pour les personnes qui désirent aller au gré du surf sur une page au hasard).

Je créer un id aléatoire entre 2 borne (le plus grand et le plus petit ID). Mais quand le hasard fait mal les choses je tombe sur mes "trous". Et là forcément rien ne s'affiche...

Comment faire ?

Parce que l'id n'existe pas ! un <cfif id eq 0> c'est un peut pisser dans un violoncelle du XIII éme siécle.

Aller le code de ma page (ainsi que le lien pour les gens qui voudrais tester les choses (en gros tous les 20/30 liens il tombe sur une ligne vide).

http://annuairejdra.liber-mundi.org/random.cfm

Le code :

<cfprocessingdirective pageencoding="ISO-8859-1">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--- Tri le plus haut id de la base annu --->

<cfquery datasource="#application.kaimdb#" name="getp" maxrows="1">

SELECT id
FROM annu
ORDER BY id DESC

</cfquery>
<!--- Tri le plus petit id de la base annu --->

<cfquery datasource="#application.kaimdb#" name="getg" maxrows="1">
SELECT id
FROM annu
ORDER BY id
</cfquery>

<!--- Trouve un id au hasard entre les deux bornes --->

<cfset idrandom=randrange(#getp.id#,#getg.id#)>

<!--- Test pour savoir si il y a quelques chose correspondant à cette id --->

<cfquery datasource="#application.kaimdb#" name="test">

SELECT id
FROM annu
WHERE (id = #idrandom#) and (valide = 1)


</cfquery>

<!--- Si il n'y a rien relance le random --->

<cfif test.id eq 0>
<cfset idrandom=randrange(#getp.id#,#getg.id#)>
</cfif>

<!--- Affiche la ligne correspondant à l'id trouvé --->

<cfquery datasource="#application.kaimdb#" name="getl">

SELECT id, title, adr, valide, type,notec, noteg, commentaire
FROM annu
WHERE (id = #idrandom#) and (valide = 1)


</cfquery>
<!--- Affichage RAS --->

<cfoutput>
<title>Zoom sur #getl.title# la selection de Axolotl</title>
<META name='description' content='annuaire de jeu de rôle amateur Français'>
<META name='keywords' content='jeux, rôle, jeux de rôles, jeux amateur, amateur, nephilim, add, dd, d&d, Appel de chtulhu, liber-mundi.rog, jeu on-line, D20 systeme, COPS, LA, Freind, serieTV, brain.soda, forum jdra, SDN, Casus Belli, Mangas'>
<META name='author' content='Calmes Christophe'>
<META name='generator' content='Cold Fusion'>
<META name='language' content='fr'>
<META name='robot' content='index, follow'>

<link rel="stylesheet" href="#Application.WebRoot#/css/stylea.css">
</head>

<div align="center">

<body>

<table border="1" align="center" width="800">
<caption>#getl.title#<br><br></caption>

<tr>

<td height="15" width="200" align="center"><b>Aller voir #getl.title#</b></td>
<td height="15" align="center" nowrap><b>  Type de Fichier  </b></td>
<td height="15" align="center" nowrap><b>  Etat d'avancement  </b></td>
<td height="30" align="center" nowrap><b>Commentaire sur le jeu</b></td>

</tr>
<tr>

<td align="center" nowrap><a class="annuaire" href="#getl.adr#" target="_blank">  #getl.title#  </a></td>

<td align="center" nowrap>#getl.noteg#</td>
<td align="center" nowrap>#getl.notec#</td>
<td align="left">
  <p>#getl.commentaire#</p>  </td>
</tr>
</table>
<br><br>
<table>
<tr>
<td>
<FORM>
<input type="button" value="Changer le Zoom !" style="width:150px" onClick="window.location='#application.WebRoot#/random.cfm?#Request.URLAppend#'">
</FORM>


</td>
<td>
<FORM>
<INPUT TYPE="button" value="Retour" style="width:150px" onClick="window.location='#application.WebRoot#/index.cfm?#Request.URLAppend#'">
</FORM>
</td>
</tr>
</table>




<!--- <font face="Papyrus,'Arial ',Arial" size="+1"><a href="#application.WebRoot#/index.cfm?#Request.URLAppend#">Retour à l'annuaire</a></font>
--->
</div>
</body>
</cfoutput>
</html>



Aresh mon site en CF :
http://kaim.liber-mundi.org/
Merci Code source
mercredi 22 décembre 2004 à 22:49:03 | Re : Tester une valeur avec CF ?

lfontaine

humm ca me parrait bien complexe tout ca

<cfquery datasource="#application.kaimdb#" name="getl">
SELECT id, title, adr, valide, type,notec, noteg, commentaire
FROM annu
</cfquery>

<cfset idrandom=randrange(1,#getl.RecordCount#)>

<cfoutput query="getl" startrow = idrandom maxrows = 1>

code ici

</cfoutput>

Laurent
mercredi 22 décembre 2004 à 23:49:15 | Re : Tester une valeur avec CF ?

aresh

Membre Club
Ma solution complexe a le merite d'afficher quelques chose une fois sur 20 environs...

Parcontre ton code est simple (je viend de tester), mais il m'affiche un jolie panneau d'erreur. Ou alors je suis trop truffe pour comprendre la subtenciel moelle de ton explication ;-).



Merci quand même de ton aide.




Aresh mon site en CF :
http://kaim.liber-mundi.org/
Merci Code source
jeudi 23 décembre 2004 à 00:00:23 | Re : Tester une valeur avec CF ?

lfontaine

Salut,

Le code poste n'est pas tester vu que je l'ai taper comme ca.
Maintenant le process devrait fonctionner.

Tu as quoi comme erreur ?

Laurent
jeudi 23 décembre 2004 à 00:21:14 | Re : Tester une valeur avec CF ?

lfontaine

Salut,

Pour donner un peu plus d'explications:
Vu que tu ne peut te fier a tes indices, je propose de faire une requette qui te donne tout les enregistrements. (disons que tu as 302 enregistrements dans ta base)

Ensuite tu genere un nombre aleatoire allant de 1 a 302

Ensuite tu affiches par l'intermediare du cfoutput uniquement 1 enregistrement en debutant par l'enregistrement d'index, ton nombre aleatoire.

Dans ce cas tu n'a plus a travailler avec tes IDs.

Maintenant si tu prefere, on peut envisager la creation d'un module qui comporterait en entree ton ID min et ton ID max.
tu utilises donc un cfmodule avec ces deux indices.
Le module genere un nombre aleatoire entre min et max et teste si l'ID est present dans ta bdd. Si oui tu sort du module en sauvant ton nombre aleatoire si non, tu apelles une nouvelle fois ton module ce qui le rend recurcif.

Laurent
jeudi 23 décembre 2004 à 00:25:31 | Re : Tester une valeur avec CF ?

lfontaine

Tu pourrais egalement faire une requete qui te renvoit tout tes indices, les placer dans un tableau et utiliser arraylen pour avoir ton nombre maximal pour ta fonction randrange. Ensuite tu recupere l'indice qui est place dans le array[idrandom]

bref pas mal de possibilites, mais je persiste a dire que la premiere offerte est la plus simple.

Laurent
jeudi 23 décembre 2004 à 00:43:44 | Re : Tester une valeur avec CF ?

aresh

Membre Club
Il est tard, donc j'ai pas trop les idées clair...

Je suis débutant en CF. Je ne connais pas encore bien l'utilisation des variable....

Par exemple quand tu me par de array... moi ça m'évoque rien de bien précis.

Maintenant, je veux quand même 2/3 trucs à mon sens trés important.

1 Que le id mini et maxi soit dynamqiue (imagine que je mette en dure le 1.... et que je suprime de ma base ensuite.... ) Ce qui est le cas, mes id vont de 10 à 407 et je n'ai de 359 lien valide ! Donc il a un GROS trou entre de 1 à 9.... et puis ensuite deci de là... et celà va aller en empirant avec le temps (+ de "trou" donc plus d'affichage foireux... chier ce truc !).

Tas derniére proposition me parait être la plus élégeante et la plus intéressante...

Mais simplement, il n'y a pas un moyen de dester un Id si il n'existe pas tous bêtement ?

Genre Id eq Null... pas 0 Null rien dedans... ID n'existe pas néant JE TE DIT serveur de mes....

J'ai essayé mes ce c... de machin semble pas fait pour les solutions simples qui arrangerai tous le monde (et accésoirement ma qualité de vie).

Mais, je penche + pour mon incapacité à me faire comprendre plutôt.

Sinon j'aime bien CF.... Je trouve que c'est un langage facile d'accée (par rapport à php).

Et puis pendant que nous sommes dans les considairation philosophique... vive Fire Fox...

La suite demain suis trop NRV là

Aresh mon site en CF :
http://kaim.liber-mundi.org/
Merci Code source
jeudi 23 décembre 2004 à 00:48:50 | Re : Tester une valeur avec CF ?

aresh

Membre Club
J'ai mieux...

Je vais ajouter un colonne qui aurat le rôle d'un compteur indépendant.... Avec un module qui a chaque fois que je delleterai un truc dans la base remettra à jour le compteur.... Histoire de plus avoir de trou.

Mais je perciste à dire que c'est quand même une sacré usine à gaz, pour un truc qui serai simplement résumable par un

<Cfif Id truc muche eq null>
Faire sa popotte internet...
<cfelse>
Truc muche machin chose... tous le monde est heureux
</cfif>



Aresh mon site en CF :
http://kaim.liber-mundi.org/
Merci Code source
jeudi 23 décembre 2004 à 01:32:27 | Re : Tester une valeur avec CF ?

lfontaine

Salut,

En fait comme tu as des trous comme tu le dis, le mieux est simplement de ne pas te servir de tes ID. A la place tu utilises le numero du recorset (enregistrement ou ligne si tu prefere). Quand tu fait une requete le resultat comporte toujours une ligne 1 (qui peut avoir l'ID 9 ou 3 ou 13 ca n'a pas d'importance)
La premiere solution travaille sur le nombre d'enregistrements retournes par ta requete et pas sur les valeurs de l'ID de chaque enregistrement.

<Cfif Id truc muche eq null> ne fonctionne pas parceque lors de ta requete tu ne peut pas recuperer les elements qui sont supprimes, c'est aussi simple que ca, ces ID sont supprimes de ta base et ne peuvent donc pas etre recuperes lors d'une requete.

C'est pour cela que la solution preconisee en terme de gestion de bdd est de ne jamais supprimer d'info, le mieux aurait ete d'ajouter une collone de type booleen (oui/non) appellee supprime. Au lieu de supprime, tu marque l'enregistrement comme supprime.
Une autre preconisation est d'utiliser des idenfieurs uniques pour les ID au lieu de simples entiers incrementes (mais bon pour plus d'infos il te faut regarder dans un bouquin de bdd)

Laurent

PS: Tu m'as toujours pas dit quelle erreur tu as.

jeudi 23 décembre 2004 à 01:36:28 | Re : Tester une valeur avec CF ?

lfontaine

Desole j'ai oublie: Array = tableau.
C'est une structure de donnee. Tu pourrais aussi bien dans ton cas utiliser une liste.

Laurent

1 2

Cette discussion est classée dans : title, select, id, from, getl


Répondre à ce message

Sujets en rapport avec ce message

cfoutput l'un dans l'autre [ par Metrox ] 'lut all,je me demandais, si ya moyen de mettre deux cfoutput qui concernent deux query différentes l'un dans l'autre...Exemple: select cc from ee<cfo Balise CFPOP et variable #FROM# [ par charek ] Bonjour a tous, je voudrais connaître le moyen de recuperer l'adresse email des expediteurs des messages que je recoit afin de les supprimer de ma bas Balise CFPOP et variable #FROM# [ par charek ] Bonjour a tous, je voudrais connaître le moyen de recuperer l'adresse email des expediteurs des messages que je recoit afin de les supprimer de ma bas SELECT dynamique [ par lefevrey ] Bonjour !Je recherche une methode magique qui me permettrai d'avoir des select dynamiques...Je m'explique... Dans une interface, j'ai plusieurs , et j trouver record [ par lemmings ] salut a tousje viens d'enregistrer un record mais je voudrais le retrouver comme je sais que c'est le dernier record que j'ai encoder, y a t-il un moy affichage query sur plusieurs page [ par raf0002 ] Salut à tous,Je veux afficher le résultat d'une query sur plusieurs pages, ma query mesort 9300 enregistrements et je voudrais paginer par paquet de p Valeurs CFPARAM URL.ID [ par zorro699 ] J'ai deux page cfm.La première contient une requete qui affiche le contenu d'une db access2000.SELECT ID, Titres,"Date", introFROM ModeWHERE ID = #URL urgent...pb tres bete avec un form [ par peejee ] Bonjour a tous, j'ai un probleme avec un formulaire.Je vs explique.....Je crée un formulaire sur ma page accueil.cfm dans lequel se trouve le cfselect Troublant et agaçant... [ par smathios ] Bonjour,Je fais afficher dans un tableau les enregistrements récupérés dans ma base de données.Jusqu'ici , aucun problème.Par exemple, je fais affiche Nom d'attribut d'une requette dans un srtring [ par xenlo ] bon[jour/soir] J'ai un problème pour récupérer le resultat d'une requette, parce que le nom des champs(attributs) se trouvent dans une variable strin


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,156 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales