Loading...
 
Français

Français


modification adhoc de l'enregistrement

posts: 7 France

Bonjour,
J'aimerai faire la chose suivante mais j'ai besoin de votre aide car mes connaissances en php et en tiki sont très minces.

Je voudrais enregistrer mes utilisateurs de la façon suivante :
1) un user anonyme entre un nom (seulement) pour s'enregistrer
2) un password est généré par le site et envoyé par email a ce user. En fait il s'agit d'une requête sur un autre site qui, lui, connait l'email associé à ce nom et qui va lui envoyer le password.
3) le user est affecté à un groupe particulier
4) quand le user recevra le password il pourra se connecter avec et s'il le souhaite changer le password.
5) ceux qui n'auront pas entrer un nom valide ne recevront pas d'email et donc ne pourront pas se connecter

Merci de me dire comment je peux m'y prendre et quelques fichiers je dois modifier pour cela.

posts: 1001 Canada

Salut andras,
je m'excuse de te faire une réponse si peu utile mais je pense qu'il te faudrait éclaircir le point 2...tu veux obtenir ça à partir d'une base de données externe quelconque?

posts: 7 France

> Chealer9:
> Salut andras,
> je m'excuse de te faire une réponse si peu utile mais je pense qu'il te faudrait éclaircir le point 2...tu veux obtenir ça à partir d'une base de données externe quelconque?

Bonjour chealer9. Oui c'est exactement cela. Le script d'enregistrement doit envoyer une requette (un post http) sur un serveur en passant le nom en paramètre et aussi le password (et 2 ou 3 autres paramètres qui eux ont des valeurs constantes). Cet autre serveur va alors retrouver l'adresse mail correspondant à ce nom (si ce nom est bien dans la base de ce serveur) et envoyer un email dont le corps contiendra le password.

j'espère avoir été assez clair. Sinon, n'hésites pas à me dire.


posts: 7 France

> Chealer9:
> Salut andras,
> je m'excuse de te faire une réponse si peu utile mais je pense qu'il te faudrait éclaircir le point 2...tu veux obtenir ça à partir d'une base de données externe quelconque?

Bonjour chealer9. Oui c'est exactement cela. Le script d'enregistrement doit envoyer une requette (un post http) sur un serveur en passant le nom en paramètre et aussi le password (et 2 ou 3 autres paramètres qui eux ont des valeurs constantes). Cet autre serveur va alors retrouver l'adresse mail correspondant à ce nom (si ce nom est bien dans la base de ce serveur) et envoyer un email dont le corps contiendra le password.

j'espère avoir été assez clair. Sinon, n'hésites pas à me dire.


posts: 1001 Canada

OK, il y a un truc qu'il me manque mais si ça peut éclaircir...

  1. Tout va bien.php
  2. Modifier tiki-register.php (je suppose) pour passer une requête HTTP...comment? j'aimerais bien savoir. Créer un script sur l'autre site, probablement PHP pour gérer la requête.
  3. Comment le groupe est-il déterminé?
  4. Comportement normal.
  5. Rien de compliqué s'agit de bien faire le script PHP.

Script
  1. Interroger la BDD à partir du paramètre REQUEST pour trouver l'email et générer le message
  2. Envoyer le mail


As-tu une idée de comment faire ces deux étapes?

Pour déclencher le script à distance tu pourrais essayer fopen("http://domaine/script.php?utilisateur=" . $user, "r")

posts: 7 France

> Chealer9:
> #Modifier tiki-register.php (je suppose) pour passer une requête HTTP...comment? j'aimerais bien savoir. Créer un script sur l'autre site, probablement PHP pour gérer la requête.
non, pas la peine (et d'ailleurs pas possible) : le script est déjà en place sur l'autre site.

> #Comment le groupe est-il déterminé?
il est fixé a priori, pas de soucis.

> #Comportement normal.
> #Rien de compliqué s'agit de bien faire le script PHP.
oui, c'est là que ça coince. voir ci-dessous

> #Interroger la BDD à partir du paramètre REQUEST pour trouver l'email et générer le message
> #Envoyer le mail
>
> As-tu une idée de comment faire ces deux étapes?
euh j'ai progressé mais je ne suis pas encore parvenu à faire marcher le truc. En fait le pb est un peu plus complexe que ce que j'ai dit : en effet on ne peut exécuter le script distant (qui envoie le mail) que si l'on a un cookie de session valide. Il va donc falloir (je pense) que mon script s'identifie sur le serveur distant, récupère le cookie et le stocke en base, puis quand un user s'enregistre envoter la requete http avec le cookie. Je laisse de côté pour le moment le problème du rafraichissement du cookie.

Pour le moment j'ai déjà réussi à faire des get mais ça coince avec les posts. Voici le script que j'ai écrit (en cherchant sur la toile et dans les librairies tiki) pour s'authentifier sur tikiwiki.org (par exemple)et récupérer le cookie. Le script finit en timeout dans tiki-setup ou dans pear.php sans afficher la page de retour ni le cookie. Est-ce que quelqu'un peut m'aider à débugger ?
Merci d'avance. — Andras

Script


bon il se fait très tard et je ne parviens pas à insérer mon script ici.
donc voici un lien vers un site perso où je vais le mettre :
http://perso.wanadoo.fr/andras/test-cookie.php
... bon ça ne marche pas pour l'instant, mon serveur est inaccessible. peut-être que ça va remarcher demain. Sinon, merci de m'expliquer comment on insère un script dans un post. Danke !


posts: 7 France

> Chealer9:
> #Modifier tiki-register.php (je suppose) pour passer une requête HTTP...comment? j'aimerais bien savoir. Créer un script sur l'autre site, probablement PHP pour gérer la requête.
non, pas la peine (et d'ailleurs pas possible) : le script est déjà en place sur l'autre site.

> #Comment le groupe est-il déterminé?
il est fixé a priori, pas de soucis.

> #Comportement normal.
> #Rien de compliqué s'agit de bien faire le script PHP.
oui, c'est là que ça coince. voir ci-dessous

> #Interroger la BDD à partir du paramètre REQUEST pour trouver l'email et générer le message
> #Envoyer le mail
>
> As-tu une idée de comment faire ces deux étapes?
euh j'ai progressé mais je ne suis pas encore parvenu à faire marcher le truc. En fait le pb est un peu plus complexe que ce que j'ai dit : en effet on ne peut exécuter le script distant (qui envoie le mail) que si l'on a un cookie de session valide. Il va donc falloir (je pense) que mon script s'identifie sur le serveur distant, récupère le cookie et le stocke en base, puis quand un user s'enregistre envoter la requete http avec le cookie. Je laisse de côté pour le moment le problème du rafraichissement du cookie.

Pour le moment j'ai déjà réussi à faire des get mais ça coince avec les posts. Voici le script que j'ai écrit (en cherchant sur la toile et dans les librairies tiki) pour s'authentifier sur tikiwiki.org (par exemple)et récupérer le cookie. Le script finit en timeout dans tiki-setup ou dans pear.php sans afficher la page de retour ni le cookie. Est-ce que quelqu'un peut m'aider à débugger ?
Merci d'avance. — Andras

Script


bon il se fait très tard et je ne parviens pas à insérer mon script ici.
donc voici un lien vers un site perso où je vais le mettre :
http://perso.wanadoo.fr/andras/test-cookie.php
... bon ça ne marche pas pour l'instant, mon serveur est inaccessible. peut-être que ça va remarcher demain. Sinon, merci de m'expliquer comment on insère un script dans un post. Danke !


posts: 1001 Canada

Inclure un script ne semble pas si difficile :


Par contre pour les sessions là j'ai aucune idée :-(

Update : oups! Il semblerait que l'aperçu ne corresponde pas trop au résultat... enlève les < ? php et ? > ça devrait aider.

posts: 7 France

> Update : oups! Il semblerait que l'aperçu ne corresponde pas trop au résultat... enlève les < ? php et ? > ça devrait aider.

merci c'était bien cela.
...mais ce n'est pas suffisant, Keep-Alive se voit affublé d'un ? par exemple.

J'ai cherché à circonscrire le problème et mon premier problème se situe au niveau du fgets() pour récupérer les resultats de mon post. Même si je cherche à ne récupérer que les 1024 premiers octets, je ne reçois rien et le process se termine en timeout. J'ai essayé de changer le paramètre Connexion en Close au lieu de Keep-Alive mais c'est pareil. J'ai réduit le script appelé à sa plus simple expression (il revoit juste "ok"). Appelé dans un formulaire HTML en post, ça marche (ouf!) mais appelé par mon script ça ne donne rien. Si je ne fais pas de fgets(), alors j'ai une seule valeur dans le tableau $_REQUEST, un offset positionné à 1024. Une idée pour me décoincer ?

Script


require_once('tiki-setup.php');
include_once('lib/taglines/taglinelib.php');

function http_post($server, $port, $url, $vars) {
$user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)";
$urlencoded = "";
while $key,$value) = each($vars
$urlencoded.= urlencode($key) . "=" . urlencode($value) . "&";
$urlencoded = substr($urlencoded,0,-1);
$content_length = strlen($urlencoded);

$headers = "POST $url HTTP/1.1
Accept: */*
Accept-Language: en-au
Content-Type: application/x-www-form-urlencoded
User-Agent: $user_agent
Host: $server
Connection: Keep-Alive
Cache-Control: no-cache
Content-Length: $content_length
";
$fp = fsockopen($server, $port, $errno, $errstr);
if (!$fp) {
echo "ERREUR: $errno - $errstr\n";
return false;
}
fputs($fp, $headers);
fputs($fp, $urlencoded);
$ret = "";
while (!feof($fp))
$ret.= fgets($fp, 1024);

fclose($fp);
return $ret;
}
$user = ""; //mettre son login ici
$pass = ""; //mettre son password

$result = http_post("tikiwiki.org", 80, "/tiki-login.php",
array("user" => $user, "pass" => $pass));
echo($result);

if(!isset($_REQUEST%22cookieId%22)) {
$_REQUEST%22cookieId%22 = 0;
}

if($_REQUEST%22cookieId%22) {
$info = $taglinelib->get_cookie($_REQUEST%22cookieId%22);
} else {
$info = Array();
$info%22cookie%22='';
}
echo "cookie: " . $info%22cookie%22;

posts: 7 France

> mon premier problème se situe au niveau du fgets() pour récupérer les
> resultats de mon post. Même si je cherche à ne récupérer que les 1024
> premiers octets, je ne reçois rien et le process se termine en timeout.

j'ai finalement résolu ce problème en utilisant la class Snoopy (projet sourceforge) qui émule en PHP les fonctions réseau d'un navigateur web. Merci à Monte Ohrt de ispi.net ! Je réussis à faire des post depuis PHP et à récupérer la réponse. biggrin Maintenant je vais essayer de comprendre les cookies ... confused


posts: 7 France

> Update : oups! Il semblerait que l'aperçu ne corresponde pas trop au résultat... enlève les < ? php et ? > ça devrait aider.

merci c'était bien cela.
...mais ce n'est pas suffisant, Keep-Alive se voit affublé d'un ? par exemple.

J'ai cherché à circonscrire le problème et mon premier problème se situe au niveau du fgets() pour récupérer les resultats de mon post. Même si je cherche à ne récupérer que les 1024 premiers octets, je ne reçois rien et le process se termine en timeout. J'ai essayé de changer le paramètre Connexion en Close au lieu de Keep-Alive mais c'est pareil. J'ai réduit le script appelé à sa plus simple expression (il revoit juste "ok"). Appelé dans un formulaire HTML en post, ça marche (ouf!) mais appelé par mon script ça ne donne rien. Si je ne fais pas de fgets(), alors j'ai une seule valeur dans le tableau $_REQUEST, un offset positionné à 1024. Une idée pour me décoincer ?

Script


require_once('tiki-setup.php');
include_once('lib/taglines/taglinelib.php');

function http_post($server, $port, $url, $vars) {
$user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)";
$urlencoded = "";
while $key,$value) = each($vars
$urlencoded.= urlencode($key) . "=" . urlencode($value) . "&";
$urlencoded = substr($urlencoded,0,-1);
$content_length = strlen($urlencoded);

$headers = "POST $url HTTP/1.1
Accept: */*
Accept-Language: en-au
Content-Type: application/x-www-form-urlencoded
User-Agent: $user_agent
Host: $server
Connection: Keep-Alive
Cache-Control: no-cache
Content-Length: $content_length
";
$fp = fsockopen($server, $port, $errno, $errstr);
if (!$fp) {
echo "ERREUR: $errno - $errstr\n";
return false;
}
fputs($fp, $headers);
fputs($fp, $urlencoded);
$ret = "";
while (!feof($fp))
$ret.= fgets($fp, 1024);

fclose($fp);
return $ret;
}
$user = ""; //mettre son login ici
$pass = ""; //mettre son password

$result = http_post("tikiwiki.org", 80, "/tiki-login.php",
array("user" => $user, "pass" => $pass));
echo($result);

if(!isset($_REQUEST%22cookieId%22)) {
$_REQUEST%22cookieId%22 = 0;
}

if($_REQUEST%22cookieId%22) {
$info = $taglinelib->get_cookie($_REQUEST%22cookieId%22);
} else {
$info = Array();
$info%22cookie%22='';
}
echo "cookie: " . $info%22cookie%22;

posts: 7 France

> mon premier problème se situe au niveau du fgets() pour récupérer les
> resultats de mon post. Même si je cherche à ne récupérer que les 1024
> premiers octets, je ne reçois rien et le process se termine en timeout.

j'ai finalement résolu ce problème en utilisant la class Snoopy (projet sourceforge) qui émule en PHP les fonctions réseau d'un navigateur web. Merci à Monte Ohrt de ispi.net ! Je réussis à faire des post depuis PHP et à récupérer la réponse. biggrin Maintenant je vais essayer de comprendre les cookies ... confused


posts: 111 Taiwan

Essaie php-curl si tu peux, pour robotiser des actions utilisateurs c'est top, et ca marche en https, avec les cookies, et tout. Un exemple d'usage (simpliste) est lisible dans lib/wiki-plugins/wikiplugin_sf.php

mose


Upcoming Events

1)  21 Mar 2024 18:00 GMT-0000
Tiki Roundtable Meeting
2)  25 Mar 2024 17:00 GMT-0000
29th anniversary WikiBirthday (With Ward Cunningham)
3)  18 Apr 2024 18:00 GMT-0000
Tiki Roundtable Meeting
4)  16 May 2024 18:00 GMT-0000
Tiki Roundtable Meeting
5)  20 Jun 2024 14:00 GMT-0000
Tiki Roundtable Meeting
6)  18 Jul 2024 14:00 GMT-0000
Tiki Roundtable Meeting
7)  15 Aug 2024 14:00 GMT-0000
Tiki Roundtable Meeting
8)  19 Sep 2024 14:00 GMT-0000
Tiki Roundtable Meeting
9) 
Tiki birthday
10)  17 Oct 2024 14:00 GMT-0000
Tiki Roundtable Meeting