Précédent   Forum des professionnels en informatique > PHP > Scripts > CMS > Spip
Spip Forum d'entraide sur le script de CMS SPIP.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2010, 14h00   #1
Invité de passage
 
Jean-Marie
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Jean-Marie

Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Par défaut extraire d'une base de données

Bonjour
objet : obtenir le prénom d'un candidat dont on connaît le nom

L'utilisateur (formulaire partie publique) entre le nom ce qui produit la variable $nom_candidat

La table "candidats" (non spip) est rentrée dans la base de données par Phpmyadmin avec la commande importer, elle comprend les champs "nom" et "prenom"

Toute la partie CVT "roule" jusqu'à la requête

Elle est faite avec sql_getfetsel (bon choix?), sur le champ "prenom" de la table "candidats", mais je n'arrive pas écrire le "where" càd dire obtenir la ligne dans laquelle "nom" est "$nom_candidat"..

Spip 2.1.2 en local

Merci d'avance

jm

PS : si possible, ajouter le critère LIKE pour ne rentrer que les premières lettres du nom...
cfacile0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 11h17   #2
Membre régulier
 
Inscription : février 2005
Messages : 183
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 183
Points : 84
Points : 84
Ca manque de précisions tout ça.

Est-ce dans le cadre de la réalisation d'un plugin ?
__________________
LikeZone
Le meilleur du like
loacast est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 11h29   #3
Invité de passage
 
Jean-Marie
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Jean-Marie

Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
bjr

Du tout, c'est un formulaire dans un article appelé par

<formulaire|nom_du_formulaire>

construit en suivant la "Documentation technique sur SPIP 2.1", de Matthieu Marcillaud, et la doc officielle.

Ce qui me fait problème dans la partie "Traiter" est le fonctionnement de sgl_getfetsel, qui fait partie de l'API SQL SPIP.

La séquence :
Code :
1
2
3
4
5
6
7
8
9
 
$prenom = sql_getfetsel('prenom','candidats','nom = $nom_candidat');
 
if ($prenom) { 
		$retour['message_ok'] = "Le pr&eacute;nom est $prenom";
	} else {
		$retour['message_erreur'] = "Erreur lors de la recherche !";
	}
	return $retour;
retourne "Erreur lors de la recherche".

Il y a une erreur de syntaxe?

J'ai remarqué que si la variable est un nombre entier, "ça marche"

De fait, dans les exemples (enfin ceux consultés), on a toujours qqe chose comme "intval($variable)"

J'ai donc rajouté dans la table un champ "id_nom", le nom du champ "nom" est transformé en nombre dans "id_nom" en affectant a chaque lettre son code ASCII et effectivement la bonne ligne est trouvée (et donc la bonne cellule)

Resterait plus qu'à transformer le nom saisi par le visiteur selon le même procédé (en cours), je mettrais bien cette nouvelle fonction au début de la partie Traiter...

Il n'y a pas plus simple?
cfacile0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 16h25   #4
Invité de passage
 
Jean-Marie
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Jean-Marie

Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
La suite de mon message précédent :

Quelques lignes insérées dans la partie traitement

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Début :
	$tmp=0;	
	$res=0;
//initialisation des variables.
	$lgnom = strlen($nom_candidat);
//on récup la longueur du nom
//Tadpole considère les chaines comme étant des tableaux de caractères...
//on boucle en analysant chaque caractère tour à tour jusqu'au bout du nom.
for ($i = 0; $i < $lgnom; $i++) {
	$tmp = ord($nom_expert[$i]);
	$res += $tmp * pow(1000,$i);
//on ajoute la valeur ascii multipliée par 1000 puissance i (ASCII est sur trois chiffres, i commence à zéro)
//noter que les lettres à gauche ont leur code à droite (garder la même convention pour le remplissage de la table!!
}
 
Fin
Note_1 : utiliser toutes les lettres conduit à un nombre énorme

Dans mon cas je limite pour le moment aux quelques premières

En utilisant par exemple une correspondance bi-univoque entre les lettres de l'alphabet et leur numéro d'ordre, on devrait mieux s'en tirer, question à suivre...autres solutions?

Note_2 : je teste le remplissage de la BDD avec Excel

Bonne année en attendant
cfacile0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 14h56   #5
Membre régulier
 
Inscription : février 2005
Messages : 183
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 183
Points : 84
Points : 84
Tu devrais trouver ici la fonction qui te correspond le mieux

http://doc.spip.org/abstract_sql-php
__________________
LikeZone
Le meilleur du like
loacast est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h38.


 
 
 
 
Partenaires

Hébergement Web