transmition de Formulaire POST vers popup

Mammouth du PHP | 959 Messages

27 avr. 2008, 14:49

Ah ! ben oui ! :P

J'ai fais ça mais ça marche pas... :? :shock:

Le formulaire :
<script language="javascript" type="text/javascript" src="./ajax_pop.js"></script>
<form action="waitpop.php" method="post" class="identification_fields">
N&deg; de commande : <input type="text" name="num_com" id="num_com" size="10" maxlength="10"></input><br />
Mot de passe :&nbsp;&nbsp;<input type="password" name="password" id="password" size="13" maxlength="10"></input><br />
<input type="submit" value="Voir votre commande" onclick="getResult(document.getElementById('num_com').value, document.getElementById('password').value);"></input>
</form>
</div>
ajax_pop.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 getResult(num_com, 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(num_com != 'vide' || password != 'vide' ) {
        /* 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 = "num_com=" + num_com +  "&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 */
					 window.open("./popup.php","nom_popup","menubar=no, status=no, scrollbars=no, menubar=no, width=200, height=100");
                }
            }
        };
        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. */
$num_com = isset($_POST['num_com']) ? $_POST['num_com'] : false;
$password = isset($_POST['password']) ? $_POST['password'] : false;
/* Si on a une région, on procède à la requête */
if(false !== $num_com || false !== $password)
{
    /* Cération de la requête pour avoir les départements de cette région */
	$result = mysql_query('SELECT num_com, password FROM contact_par_passwords WHERE num_com="'.$_POST['num_com'].'" 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");
}
?>

popup.php :
<?php echo $_POST['num_com']; ?>
<br />
<?php echo $_POST['password']; ?>
Voilà voilà
Merci à toi :)

Mammouth du PHP | 19672 Messages

27 avr. 2008, 16:32

Je commence à avoir une vague idée du problème, on va procéder autrement.

Sais-tu créer un popup à partir de rien, je veux dire, sans que la page html correspondant à ce popup n'existe, donc en créant ce code HTML directement dans le JavaScript ? Si tu ne sais pas faire ça, il est normal que tu tournes en rond parce que du coup tu ne te poses pas les bonnes question : pour avoir les bonnes réponses, ça n'aide pas des masses :-k
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, 16:42

Oui, j'ai remarqué que je tourné autour du pot :P

Ben.... je suis pas spécialiste des popups moi ^^
Donc non jsais pas le faire ça :oops:

Merci à toi :D

Mammouth du PHP | 19672 Messages

27 avr. 2008, 19:15

Bien, alors voici un code de page que tu vas pouvoir tester, il est fonctionnel. Explore le code et essaye d'en comprendre chaque élément. Tu devrais normalement commencer à voir comment adapter certains points à ce que tu veux faire.

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" xml:lang="fr" /> <title></title> <meta http-equiv="Content-language" content="FR-fr" xml:lang="fr" dir="ltr" /> <script type="text/javascript"> /* <![CDATA[ */ function ouvrirPopup(retour) { // -1- Construire le code de la fenêtre. var contenuHtml = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n'; contenuHtml += '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">\n'; contenuHtml += ' <head>\n'; contenuHtml += ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" xml:lang="fr" />\n'; contenuHtml += ' <meta http-equiv="Content-language" content="FR-fr" xml:lang="fr" dir="ltr" />\n'; contenuHtml += ' <title>Fenêtre contrôlée par JavaScript</title>\n'; contenuHtml += ' </head>\n'; contenuHtml += ' <body>\n'; contenuHtml += ' <p id="contenu">&nbsp;</p>\n'; contenuHtml += ' <p><a href="./" onclick="window.close();" title="Fermeture du popup.">Fermer cette fenêtre.</a></p>\n'; contenuHtml += ' </body>\n'; contenuHtml += '</html>\n'; // -2- Ouvrir une nouvelle fenêtre var options = 'height=200,width=400,toolbar=no'; var fenetre = window.open('', 'Nouvelle_fenetre', options); // -3- Mettre le contenu dans la fenêtre fenetre.document.write(contenuHtml); // -4- Mettre la valeur souhaitée dans cette nouvelle fenêtre fenetre.document.getElementById('contenu').innerHTML = retour; } var info = 'Je suis un contenu généré à la volée'; /* ]]> */ </script> </head> <body> <p><a href="./" onclick="ouvrirPopup(info); return false;" title="Ouverture d'un popup.">Ouvrir la fenêtre.</a></p> </body> </html>
[EDIT]
Tiens, en bonus, regarde ce qu'on peut trouver sur le net : http://www.ac-creteil.fr/util/programma ... indow.html
[/EDIT]
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, 19:25

Ahh ok :)
J'ai compris le fonctionnement de ton code :)

Maintenant, se que je ne comprend pas, c'est :
par rapport au champs "num_com" et "password", PHP va voir si le couple existe, si oui, il affiche d'autres info genre => par qui la commande à été passée, à quelle heure, se qu'il veux etc... dans mysql grace à WHERE num_com=$_POST['num_com'] ......

et la, je ne sais pas du tout comment faire :?

Merci à toi :)

EDIT: je bookmark ton bonus ;p :)
Modifié en dernier par chrislabricole le 27 avr. 2008, 21:43, modifié 1 fois.

ViPHP
AB
ViPHP | 5818 Messages

27 avr. 2008, 19:33

Concernant la documentation tu peux également penser à aller voir selfhtml.org Toutes les fonctions ont un exemple d'utilisation http://fr.selfhtml.org/javascript/objets/window.htm

EDIT désolé j'ai tardé avant de poster et ce message ne répond pas au dernier que tu as laissé :?

Mammouth du PHP | 19672 Messages

27 avr. 2008, 20:18

J'ai compris le fonctionnement de ton code :)
Excellent...
Maintenant, se que je ne comprend pas, c'est :
par rapport au champs "num_com" et "password", PHP va voir si le couple existe, si oui, il affiche d'autres info genre => par qui la commande à été passée, à quelle heure, se qu'il veux etc... dans mysql grace à WHERE num_com=$_POST['num_com'] ......

et la, je ne sais pas du tout comment faire :?
Ben là, c'est beaucoup moins excellent : Tu as peut-être bien répondu trop vite sans trop prendre le temps d'analyser de quelle manière exploiter ces fonctionnalités.

Et encore une fois, je dirais que tu ne te poses pas les bonnes questions. Quelles questions t'es-tu donc posées :?: Là, ce n'est plus de la technique, tu as tout ce qu'il faut maintenant : à présent, c'est de la méthodologie. Je vais donc te laisser y réfléchir et essaye de prendre un peu plus que 10mn pour ça. Je te donne quand même une piste : que te renvoie le PHP en retour de ton appel XHR ?
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, 20:57

ah !! j'ai tout compris !!! (enfin je pense :P)

bon, maintenant, c'est AJAX qui déconne...

voilà ma boite d'erreur sous FF :
Image

Ligne 66 :
                if(requete.status == 200)
Merci à toi :)

Mammouth du PHP | 19672 Messages

27 avr. 2008, 21:18

Ok, c'est le moment de sortir un outil pratique pour déboguer : si tu utilises Firefox, tu devrais t'intéresser à une extension pratique : Firebug. Installe ça et tu vas trouver un onglet [Net] qui va te montrer un peu ce qui se passe lors d'une requête XHR.
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, 21:25

ok, alors, dans l'onglet "Net" puis "JS" et "Headers", j'ai :
Date Sun, 27 Apr 2008 19:20:03 GMT
Server Apache
Connection Keep-Alive
Keep-Alive timeout=15, max=99
Etag "de59f00-db1-22e3fe80"
Request Headers
Host ***********.fr
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept */*
Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Referer http://********/index.php
If-Modified-Since Sun, 27 Apr 2008 18:40:42 GMT
If-None-Match "de59f00-db1-22e3fe80"
et dans l'onglet "Response", j'ai le code JS... (ajax_pop.js)


Merci à toi :)
Modifié en dernier par chrislabricole le 27 avr. 2008, 21:30, modifié 1 fois.

Mammouth du PHP | 19672 Messages

27 avr. 2008, 21:29

C'est l'onglet Response qui aurait été intéressant... et je saisis mal pourquoi tu y trouves du JavaScript qui n'a rien à y faire.... Je doute fort que ta requête SQL te retourne du JavaScript :-k
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, 21:38

Moi je sais pas, je connais juste vite fais Firebug mais je m'en suis jamais vraiment servi...
Sinon j'ai vérifié test_couple.php si il marché bien (et renseignant action="" dans le formulaire et en enlevant le onclick...) il y a se que je désir... donc, pas de bêtise du côté php... c'est du côté JS que ça foire...
Je comprend pas du tout là :?

Merci

Mammouth du PHP | 19672 Messages

27 avr. 2008, 21:49

En attendant, comme je ne peux pas voir ce que te retourne PHP dans cet onglet Response, je peux difficilement deviner ce qui bafouille....
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, 21:52

ok, donc je met 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. */
$num_com = isset($_POST['num_com']) ? $_POST['num_com'] : false;
$password = isset($_POST['password']) ? $_POST['password'] : false;
/* Si on a une région, on procède à la requête */
if(false !== $num_com || false !== $password)
{
    /* Cération de la requête pour avoir les départements de cette région */
	$result = mysql_query('SELECT num_com, password FROM contact_par_passwords WHERE num_com="'.$_POST['num_com'].'" AND password="'.$_POST['password'].'"');
	
	if ($enreg = @mysql_fetch_array($result)) {
		$liste_infos = mysql_query('SELECT * FROM contact_par WHERE num_com="'.$_POST['num_com'].'"');
		
		while( $donnee = mysql_fetch_array($liste_infos) ) { ?>
		
            <fieldset>
    <legend> Description</legend>
    N&deg; de Commande : <?php echo $donnee['num_com']; ?><br />
    Commande Affectu&eacute;e le <?php echo DateFr($donnee['timestamp']); ?><br /><br />
    Nom : <?php echo stripslashes(utf8_encode($donnee['nom'])); ?><br />
    Pr&eacute;nom : <?php echo stripslashes(utf8_encode($donnee['prenom'])); ?><br />
    Adresse : <?php echo stripslashes(utf8_encode($donnee['adresse'])); ?><br />
    Adresse (suite) : <?php echo stripslashes(utf8_encode($donnee['adresse_suite'])); ?><br />
    Code postal : <?php echo $donnee['code_postal']; ?><br />
    Ville : <?php echo stripslashes(utf8_encode($donnee['ville'])); ?><br />
    T&eacute;l&eacute;phone : <?php echo $donnee['tel']; ?><br />
    E-Mail : <?php echo stripslashes(utf8_encode($donnee['email'])); ?><br />
    </fieldset>
    
    <fieldset>
    <legend> Objets</legend>
    <?php echo stripslashes(utf8_encode($donnee['total_checked'])); ?><br />
    </fieldset>
    
    <fieldset>
    <legend> Pi&egrave;ce Jointe</legend><i>
	<?php
	if( $donnee['file_name'] != "no_file" ) {
		echo 'Vous avez envoy&eacute; un fichier';
	} else {
		echo 'Vous n\'avez pas envo&eacute; de fichier';
	}
	?></i>
    </fieldset>
    
    <fieldset>
    <legend> Remarques</legend>
	<?php echo nl2br(stripslashes(htmlentities(utf8_decode($donnee['remarques'])))); ?>
    </fieldset>
        
		<?php }
		
	} else {
		echo 'Le couple Num&eacute;ros de Commande/Mot de passe est invalide...';
	}

}
/* Sinon on retourne un message d'erreur */
else
{
    echo("<p>Une erreur s'est produite.</p>\n");
}
?>
Mais lui il est nickel... je vois pas pourquoi c'est lui qui déconne...
ajax_pop.js (on sais jamais :P)
/**
 * 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 getResult(num_com, 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(num_com != 'vide' || password != 'vide' ) {
        /* 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 = "num_com=" + num_com +  "&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 */
					var contenuHtml = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n';
					contenuHtml += '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">\n';
					contenuHtml += '  <head>\n';
					contenuHtml += '    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" xml:lang="fr" />\n';
					contenuHtml += '    <meta http-equiv="Content-language" content="FR-fr" xml:lang="fr" dir="ltr" />\n';
					contenuHtml += '    <title>Fenêtre contrôlée par JavaScript</title>\n';
					contenuHtml += '  </head>\n';
					contenuHtml += '  <body>\n'; 
					contenuHtml += '    <div id="corps">&nbsp;</div>\n';
					contenuHtml += '  </body>\n';
       				contenuHtml += '</html>\n';
					
					var options = 'height=200,width=400,toolbar=no';
					var fenetre = window.open('', 'Nouvelle_fenetre', options); 
					
					fenetre.document.write(contenuHtml); 
					
					 // -4- Mettre la valeur souhaitée dans cette nouvelle fenêtre
        			fenetre.document.getElementById('corps').innerHTML = requete.responseText; 
                }
            }
        };
        requete.send(null);
    }
}

Mammouth du PHP | 19672 Messages

27 avr. 2008, 21:54

:shock: À la vitesse où tu réponds, je me demande si tu prends le temps de lire ce que j'écris... ça te retourne quoi dans ce foutu onglet Response ???????
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: