transmition de Formulaire POST vers popup

Mammouth du PHP | 19672 Messages

23 avr. 2008, 14:37

Ok, alors très sommairement : c'est le onclick (avant l'ouverture du popup) qui va déclencher l'ajax, récupérer les données du formulaire et les envoyer en POST ou en GET avec une requête XHR vers le serveur. La réponse du serveur sera traitée, toujours en JavaScript et déclenchera l'ouverture du popup avec ce que tu veux y mettre dedans.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
AB
ViPHP | 5818 Messages

23 avr. 2008, 15:04

Oui ... ça fait longtemps que j'aurais essayé de revoir le fonctionnement ou l'ergonomie du système plutôt que de m'embarquer dans cette histoire. Enfin bon, si tu as du temps ou que c'est une demande impérative, cela t'apprendra les débuts d'ajax :)

Mammouth du PHP | 959 Messages

23 avr. 2008, 15:12

Ok
avec ce que tu veux y mettre dedans.
Et comment ça ?
Tout le code html de ma page avec les info sera dans le code JS ?

C'est la fin de ton post que je comprend pas trop là.. :?

Merci à toi :)

Mammouth du PHP | 19672 Messages

23 avr. 2008, 15:24

Hé, je t'indique des pistes, mais à tes réponses tu n'as visiblement pas exploré bien loin les techniques AJAX. Tu peux préparer tout le code HTML de sortie du popup du coté serveur et le récupérer. Fais des essais avec AJAX pour essayer d'en comprendre le fonctionnement sommaire, sinon, je perds mon temps, et tu auras compris que je n'en ai pas beaucoup :?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

23 avr. 2008, 19:50

Bon voilà, je me suis plus familiarisé avec AJAX...

j'ai réussi à faire un petit truc qui vérifi si le couple email/mot de passe est bon...
/* Création de la variable globale qui contiendra l'objet XHR */
var requete = null;
/**
 * Fonction privée qui va créer un objet XHR.
 * Cette fonction initialisera la valeur dans la variable globale définie
 * ci-dessus.
 */
function creerRequete()
{
    try
    {
        /* On tente de créer un objet XmlHTTPRequest */
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            /* La première méthode a échoué, on en teste une seconde */
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour ;) */
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
    }
}

function actualiserTic()
{
    var result = requete.responseText;
    var blocTic = document.getElementById('tic');
    blocTic.innerHTML = result;
} 

function getResult(email, password)
{
    /* Si il n'y a pas d'identifiant de région, on fait disparaître la seconde liste au cas où elle serait affichée */
    if(email == 'vide' || password == 'vide' )
    {
        document.getElementById('tic').innerHTML = '';
    }
    else
    {
        /* À cet endroit précis, on peut faire apparaître un message d'attente */
        var blocTic = document.getElementById('tic');
        blocTic.innerHTML = '<img src="./images/loading.gif" alt="" />';
        /* On crée l'objet XHR */
        creerRequete();
        /* Définition du fichier de traitement */
        var url = './test_couple.php?email=' + email + '&password=' + password;
        /* Envoi de la requête à la page de traitement */
        requete.open('GET', url, true);
        /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */
        requete.onreadystatechange = function()
        {
            /* Lorsque l'état est à 4 */
            if(requete.readyState == 4)
            {
                /* Si on a un statut à 200 */
                if(requete.status == 200)
                {
                    /* Mise à jour de l'affichage, on appelle la fonction apropriée */
                    actualiserTic();
                }
            }
        };
        requete.send(null);
    }
} 
test_couple.php
<?php
/* Inclusion du fichier de fonctions */
include('./functions.php');
/* Connexion à la BdD */ 
connect_db();

/* On récupère l'identifiant de la région choisie. */
$email = isset($_GET['email']) ? $_GET['email'] : false;
$password = isset($_GET['password']) ? $_GET['password'] : false;
/* Si on a une région, on procède à la requête */
if(false !== $email || false !== $password)
{
    /* Cération de la requête pour avoir les départements de cette région */
	$result = mysql_query('SELECT email, password FROM prescripteur_inscription WHERE email="'.$_GET['email'].'" AND password="'.$_GET['password'].'"');
	
	if ($enreg = @mysql_fetch_array($result)) {
		echo '<img src="./images/ok.png" alt="" />';
	} else {
		echo '<img src="./images/pas_ok.png" alt="" />';
	}

}
/* Sinon on retourne un message d'erreur */
else
{
    echo("<p>Une erreur s'est produite. La région sélectionnée comporte une donnée invalide.</p>\n");
}
?>

Code : Tout sélectionner

E-mail : <input type="text" name="identifiants_email" id="identifiants_email" maxlength="30" onkeyup="getResult( document.getElementById('identifiants_email').value, document.getElementById('identifiants_password').value );"></input><br /> Mot de Passe : <input type="password" name="identifiants_password" id="identifiants_password" maxlength="10" onkeyup="getResult( document.getElementById('identifiants_email').value, document.getElementById('identifiants_password').value );"></input>
Bon voilà, cet exemple n'est pas fait pour la même chose, ça marche bien :)

Après, je ne vois pas trop comment envoyer un popup comme ça...
et pour travailler avec du POST aussi...

Un grand Merci à toi pour toute tes aides :)

Mammouth du PHP | 19672 Messages

23 avr. 2008, 20:00

Réfléchis donc trente secondes : le retour est traité par JavaScript : comment ouvre-t-on un popup ? avec du JavaScript : window.open(...) : CQFD ... :-*
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

23 avr. 2008, 20:59

oui, je connais cette fonction. :P
function popup(page,largeur,hauteur,options) {
	var top=(screen.height-hauteur)/2;
	var left=(screen.width-largeur)/2;
	window.open(page,"","top="+top+",left="+left+",width="+largeur+",height="+hauteur+","+options);
}
Mais je préfère utiliser ça ^^

Code : Tout sélectionner

<input type="button" onclick="popup('./view_details.php', 800, 600, 'Voir les Details...','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=800, height=600');" value="Voir la commande"></input>
Jcapte pas tout sur la fin de tes expliquation en fait :roll:

Merci à toi, on va finir par y arriver ;p

Mammouth du PHP | 19672 Messages

23 avr. 2008, 21:46

Ben oui, mais un input suppose que l'ouverture est actionnée par l'internaute. Or là, ça doit être déclenché en fonction du retour du serveur. Donc... :arrow: window.open() et si tu te documentes un peu sur le net, tu vas trouver dans divers endroits comment construire le code de la page de ton popup à faire ouvrir avec window.open().
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

23 avr. 2008, 22:04

mmhmm :oops: en cherchant des truc sur window.open et ajax, j'ai trouvé ça totalement par hazard...
http://www.asp-php.net/ressources/codes ... +POST.aspx
Ca marche mais... firefox fait un bordel avec un input de type password...

Pourtant ils utilise pas ajax là... :?

Ca m'a l'air astucieux non ?
Qu'est-ce que t'en pense ??

Mammouth du PHP | 959 Messages

26 avr. 2008, 21:16

Up s'il vous plait :oops:
J'ai besoin de savoir :?

Mammouth du PHP | 19672 Messages

26 avr. 2008, 21:37

Et si tu montrais ton code qu'on aie une idée de la nature du problème ? Fais voir en particulier :
- comment tu récupères le retour AJAX :
- Comment tu ouvres ton popup à partir d ce contenu.

Là on aura de la matière et on pourra t'aider en t'indiquant ce qui doit être revu pour que ça fonctionne. :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

26 avr. 2008, 21:44

Oui, pas de problème mais je ne sais vraiment pas du tout comment envoyer des données POST avec AJAX, et comment le popup les récupèreras, et ou je peux mettre le window.open ? :?

Merci à toi :)

PS: tu peux me dire de se que tu pense de mon précédent post ? merci :)

Mammouth du PHP | 19672 Messages

26 avr. 2008, 21:48

J'ai pas fouillé le code de l'exemple que tu as indiqué.

Mais du coup j'en déduis que tu n'as pas encore écrit grand chose : ça ne va pas aider pour la correction :roll:
Avec un objet XHR, on peut envoyer des données au serveur en POST ou en GET : si tu sais les envoyer en GET, la différence n'est pas considérable. Montre déjà ce que tu as fait et on va avancer pas à pas.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

27 avr. 2008, 01:23

Bon, j'ai fais un pas, pour ma popup, il va falloir utiliser du AJAX en POST...

donc, voilà mon code d'exemple (en POST) :
code JS :
/**
 * XMLHTTPRequest.
 */
/* Création de la variable globale qui contiendra l'objet XHR */
var requete = null;
/**
 * Fonction privée qui va créer un objet XHR.
 * Cette fonction initialisera la valeur dans la variable globale définie
 * ci-dessus.
 */
function creerRequete()
{
    try
    {
        /* On tente de créer un objet XmlHTTPRequest */
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            /* La première méthode a échoué, on en teste une seconde */
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour ;) */
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
    }
}

function actualiserTic()
{
    var result = requete.responseText;
    var blocTic = document.getElementById('tic');
    blocTic.innerHTML = result;
} 

function getResult(email, password)
{
    /* Si il n'y a pas d'identifiant de région, on fait disparaître la seconde liste au cas où elle serait affichée */
    if(email == 'vide' || password == 'vide' )
    {
        document.getElementById('tic').innerHTML = '';
    }
    else
    {
        /* À cet endroit précis, on peut faire apparaître un message d'attente */
        var blocTic = document.getElementById('tic');
        blocTic.innerHTML = '<img src="./images/loading.gif" alt="" />';
        /* On crée l'objet XHR */
        creerRequete();
        /* Définition du fichier de traitement */
	var url = './test_couple.php'; 
	requete.open('POST', url, true);
	var data = "email=" + email +  "&password=" + password;
	requete.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	/* Envoi de la requête */
	requete.send(data);

        /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */
        requete.onreadystatechange = function()
        {
            /* Lorsque l'état est à 4 */
            if(requete.readyState == 4)
            {
                /* Si on a un statut à 200 */
                if(requete.status == 200)
                {
                    /* Mise à jour de l'affichage, on appelle la fonction apropriée */
                    actualiserTic();
                }
            }
        };
        requete.send(null);
    }
}
test_couple.php
<?php
/* Inclusion du fichier de fonctions */
include('./functions.php');
/* Connexion à la BdD */ 
connect_db();

/* On récupère l'identifiant de la région choisie. */
$email = isset($_POST['email']) ? $_POST['email'] : false;
$password = isset($_POST['password']) ? $_POST['password'] : false;
/* Si on a une région, on procède à la requête */
if(false !== $email || false !== $password)
{
    /* Cération de la requête pour avoir les départements de cette région */
	$result = mysql_query('SELECT email, password FROM prescripteur_inscription WHERE email="'.$_POST['email'].'" AND password="'.$_POST['password'].'"');
	
	if ($enreg = @mysql_fetch_array($result)) {
		echo '<img src="./images/ok.png" alt="" />';
	} else {
		echo '<img src="./images/pas_ok.png" alt="" />';
	}

}
/* Sinon on retourne un message d'erreur */
else
{
    echo("<p>Une erreur s'est produite.</p>\n");
}
?>

Code : Tout sélectionner

E-mail : <input type="text" name="identifiants_email" id="identifiants_email" maxlength="30" onkeyup="getResult( document.getElementById('identifiants_email').value, document.getElementById('identifiants_password').value );"></input><br /> Mot de Passe : <input type="password" name="identifiants_password" id="identifiants_password" maxlength="10" onkeyup="getResult( document.getElementById('identifiants_email').value, document.getElementById('identifiants_password').value );"></input>
Donc, ça, c'est du POST, c'est déjà ça... après, le problème, c'est de déclencher un popup et d'in mettre les infos dedans....

Merci à toi :)

Mammouth du PHP | 19672 Messages

27 avr. 2008, 08:04

Bien, on va enfin avancer. Et le pire, c'est que tu as la réponse quasiment sous les yeux.

Ta fonction actualisetTic(), elle sert à quoi à ton avis ? Si j'en crois ce code, elle insère la réponse renvoyée par le serveur dans un bloc de la page.

Or si j'ai bien suivi, tu voudrais mettre cette réponse dans un popup. As-tu envisagé de mettre un window.open() dans cette fonction ?? :-*
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: