Petit problème de variable et de base de données

Link - 21 sept. 2001 à 18:23
 Link - 25 sept. 2001 à 10:37
<cfinclude template="Connections/maconn.cfm">
<cfscript>
// *** Edit Operations: declare variables

// set the form action variable
MM_editAction = CGI.SCRIPT_NAME;
If (CGI.QUERY_STRING NEQ "") {
MM_editAction = MM_editAction & "?" & CGI.QUERY_STRING;
}

// boolean to abort record edit
MM_abortEdit = false;

// query string to execute
MM_editQuery = "";
</cfscript>
<cfscript>
// *** Insert Record: set variables

If (IsDefined("MM_insert")) {

MM_editDatasource = #MM_maconn_DSN#;
MM_editUserName = #MM_maconn_USERNAME#;
MM_editPassword = #MM_maconn_PASSWORD#;
MM_editTable = "user";
MM_editRedirectUrl = "";
MM_fieldsStr = "ID|value|Surnom|value|Nom|value|Prenom|value|Naiss|value|Pays|value|Mail|value";
MM_columnsStr = "ID|',none,''|surnom|',none,''|nom|',none,''|prenom|',none,''|naissance|',none,''|pays|',none,''|mail|',none,''";

// create the MM_fields and MM_columns arrays
MM_fields = ListToArray(MM_fieldsStr,"|");
MM_columns = ListToArray(MM_columnsStr,"|");

// set the form values
For (i=1; i+1 LE ArrayLen(MM_fields); i=i+2) {
MM_fields[i+1] = IIf(IsDefined(MM_fields[i]),"FORM." & MM_fields[i],DE(""));
}

// append the query string to the redirect URL
If (MM_editRedirectUrl NEQ "" AND CGI.QUERY_STRING NEQ "") {
If (Find("?", MM_editRedirectUrl) EQ 0) {
MM_editRedirectUrl = MM_editRedirectUrl & "?" & CGI.QUERY_STRING;
} Else {
MM_editRedirectUrl = MM_editRedirectUrl & "&" & CGI.QUERY_STRING;
}
}
}
</cfscript>
<cfscript>
// *** Insert Record: construct a sql insert statement

If (IsDefined("MM_insert")) {

// create the insert sql statement
MM_tableValues="";
MM_dbValues="";
For (i=1; i+1 LE ArrayLen(MM_fields); i=i+2) {
FormVal = MM_fields[i+1];
MM_typesArray = ListToArray(MM_columns[i+1],",");
Delim = IIf(MM_typesArray[1] NEQ "none","MM_typesArray[1]",DE(""));
AltVal = IIf(MM_typesArray[2] NEQ "none","MM_typesArray[2]",DE(""));
EmptyVal = IIf(MM_typesArray[3] NEQ "none","MM_typesArray[3]",DE(""));
If (FormVal EQ "") {
FormVal = EmptyVal;
} Else {
If (AltVal NEQ "") {
FormVal = AltVal;
} Else If (Delim EQ "'") { // escape quotes
FormVal = "'" & Replace(FormVal,"'","''","ALL") & "'";
} Else {
FormVal = Delim & FormVal & Delim;
}
}
If (i GT 1) {
MM_tableValues = MM_tableValues & ",";
MM_dbValues = MM_dbValues & ",";
}
MM_tableValues = MM_tableValues & MM_columns[i];
MM_dbValues = MM_dbValues & FormVal;
}
MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")";
}
</cfscript>
<cfif Not #MM_abortEdit# AND IsDefined("MM_insert")>
<cfquery name="MM_editCmd" datasource=#MM_editDatasource# username=#MM_editUserName# password=#MM_editPassword#>
#PreserveSingleQuotes(MM_editQuery)#
</cfquery>
<cfif #MM_editRedirectUrl# NEQ "">
<cflocation url="#MM_editRedirectUrl#" addtoken="no">
</cfif>
</cfif>
<cfset random_number = "#RandRange(10000000,99999999)#">
<cfset password = "#random_number#">

Le cfset password crée une variable je voudrais quel soit mis dans le champ password de ma base de données comment puis-je affecté cette variable?

4 réponses

Oulà....
Toi, tu utilises ultradev...

Déjà, petite remarque, ton password est généré au hasard, certes, mais pas de façon unique (ok, il y a peu de chance de retomber facilement sur le même numéro...).
Si tu ne veux pas te prendre la tete pour la creation du mot de passe unique utilise plutot la fonction CreateUUID()
qui te créera une chaine unique (avec Hexadecimal et tirets)
<cfset password="#CreateUUID()#">

Ensuite si j'étais a ta place, je réecrirai tout moi-même, (surtout pas avec ULTRADEV, sauf pour la mise en page !!! c'est bon pour faire des maquettes dynamiques ou des sites avec des fonctions simples). A la main, c'est beaucoup plus souple et pas tellement plus long.

Si tu ne veux pas tout réécrire à la main, 2 solutions simples s'offrent à toi et te permettent de garder le code généré par ultradev intact :
- tu insere un champ caché dans ton formulaire

puis tu utilises l'interface d'ultradev pour lui indiquer que le champ de formulaire "password" s'insere dans le champ
de données "password" (problème -> le contenu du champ est facilement lisible au moment de la validation du formulaire)
ou alors
- idem, mais tu mets value="" , et tu rajoutes au dessus de la balise <cfscript> ceci : <cfset form.password="#createUUID()#"> (meme manip pour l'interface d'ultradev)

evidemment dans les deux cas tu n'as plus besoin de ces lignes :
<cfset random_number = "#RandRange(10000000,99999999)#">
<cfset password = "#random_number#">
0
Merci et oui tu as devinez juste j'utilise ultradev :)
0
bon... suite à un probléme de mail, je met le message sur le forum...

aie....
là, le createuuid ne pourra malheureusement pas t'aider... Il ne gère que des longues séries, et si tu les tronque tu as des risques de retomber sur un chiffre déjà existant (surtout sous windows).

Ce que tu peux faire, c'est générer ta suite de 8 chiffres en héxadécimal, au hasard, comme tu le ferais normalement (en utilisant formatBaseN(chiffre,base numérique) ) et vérifier si cette suite n'existe pas dans ta base de données..., et boucler jusqu'à ce que tu tombes sur une suite n'existant pas dans ta base. Le problème est que c'est plus lourd, et ça peux tourner énormément longtemps dans certains cas (quoique, vu le nombre de possibilité, 16^8, ça risque de ne pas tomber souvent).

Si tu as besoin que je t'envoie un morceau de code, fais moi signe.

@+
----- Original Message -----
From: Link
To: crossword@parisfree.com
Sent: Saturday, September 22, 2001 12:24 PM
Subject: Merci pour l'info

pour limité le #CreateUUID()# à huit chiffre hexa comment dois-je m'y prendre?
0
Ca sera bon alors :) parce que le code ne sert qu'a verifier l'adresse e-mail de l'inscrit... je m'explique :

la personne qui s'inscrit ne choisi pas son mot de passe, mais il sera invité à le changer à sa première connection grace a une variable oui non dans la base de donnée donc tout ce que j'ai besoin c'est une variable de 8 chiffre ou lettre générée par la page (différente pour chaque inscription) à envoyer par mail... une fois le code recu par mail il est invité à modifié son mot de passe à sa convenance :big)
0
Rejoignez-nous