|
|
|
|
vct, le dimanche 27 juillet 2008 à 11:11:23Configuration: Windows Vista Firefox 2.0.0.16
Salut,
Php s'exécute côté serveur, javascript côté client (navigateur) document.getElementById("conteneur").innerHTML = "Requête exécutée avec succès.<input type='button' value='Terminer' onclick='location.href=\"index.php\"' />"; ça c'est bon mais tu ne peux pas rajouter du php dans une page déja chargée dans ton navigateur par document.getElementById("conteneur").innerHTML = ajouter(); puisque la page est chargée, le php rajouté ne sera pas interprété Le principe de Ajax dans ta page HTML, par une action par exemple un click sur un bouton, tu lances la fonction Javascript/Ajax cette dernière appelle un script php sur le serveur, et à la réponse la fonction Ajax écrit le résultat dans la page. Un exemple de script Javascript/Ajax:
<html>
<head>
<script language="javascript" type="text/javascript">
function makeRequest(url,id_ecrire){
var http_request = false;
//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Abandon :( Impossible de créer une instance XMLHTTP');
return false;
}
http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
// lancement de la requete
http_request.open('POST', url, true);
//changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'....
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
data="";
http_request.send(data);
}
function traitementReponse(http_request,id_ecrire) {
var affich="";
if (http_request.readyState == 4) {
if (http_request.status == 200) {
// cas avec reponse de PHP en mode texte:
//chargement des elements reçus dans la liste
var affich_rep=http_request.responseText;
//alert(affich_rep);
obj = document.getElementById(id_ecrire);
obj.innerHTML = affich_rep;
}
else {
alert('Un problème est survenu avec la requête.');
}
}
}
</script>
</head>
<form name="ma_form" method="post">
<!-- bouton qui appelle la fonction Ajax en lui passant le nom du script php et le div ou charger la réponse -->
<input type="button" name="ajouter" value="ajouter" onClick="makeRequest('ajouter.php','conteneur');">
</form>
<br />
<div id="conteneur"><!-- la sera ecrite la reponse Ajax, ce div tu le mets ou tu veux dans ta page--></div>
</html>
et le script ajouter.php:
<?php
//la tu peux mettre les données que tu veux
echo "Requête exécutée avec succès.<input type='button' value='Terminer' onclick='location.href=\"index.php\"' />";
?>
notes que par data= tu peux envoyer une valeur au script php @lain |
Salut Alain merci pour ta réponse et désolé pour le retard (vacances).
Ton code fonctionne nickel je l'ais adapté à ma page mais je voudrais savoir s'il s'agit d'ajax à proprement dit, car finalement je rafraichit quand même toute la page ?! J'ai pas essayé d'intégrer du design pour voir s'il saute ou pas. Voici mon code : <html> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <head> <script language="javascript" type="text/javascript"> function makeRequest(url,id_ecrire){ var http_request = false; //créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Abandon :( Impossible de créer une instance XMLHTTP'); return false; } http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse // lancement de la requete http_request.open('POST', url, true); //changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'.... http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); data=""; http_request.send(data); } function traitementReponse(http_request,id_ecrire) { var affich=""; if (http_request.readyState == 4) { if (http_request.status == 200) { // cas avec reponse de PHP en mode texte: //chargement des elements reçus dans la liste var mon_affichage = "Success"; obj = document.getElementById(id_ecrire); obj.innerHTML = mon_affichage; } else { alert('Un problème est survenu avec la requête.'); } } } </script> </head> <form name="ma_form" method="post"> <!-- bouton qui appelle la fonction Ajax en lui passant le nom du script php et le div ou charger la réponse --> <input type="button" name="ajouter" value="ajouter" onClick="makeRequest('ajax.php?valide=ok','conteneur');"> </form> <br /> <div id="conteneur"></div> </html> <?php if (isset($_GET['valide']) && $_GET['valide']=="ok"){ mysql_connect("localhost", "root", ""); mysql_select_db("carnet_adresse"); mysql_query("INSERT INTO carnet VALUES ('', 'prenom', 'nom', 'lieu', '0389535603', '0389535603', 'adresse', 'email', '2008-07-07')"); } ?> |
En fait j'ai étudié le code et je vais vous expliquer ce que je souhaite faire parce que finalement il ne me passe pas les variables POST.
j'ai un formulaire d'inscription (ajouter-personne.php) après validation on tombe sur une nouvelle page avec un récapitulatif des infos (nouvelle-personne.php) avec un formulaire et des champs cachés de type hidden de garde en mémoire les paramètres pour la validation mon bouton (submit) pour valider le récapitulatif envois vers lui même (nouvelle-personne.php) mais dans le code je vérifie si il existe une variable 'valide' qui est égale à 'ok' pour faire ma requête SQL En revanche votre code ajax ne me permet pas de passer ces variables post que je stock en variable php. Une idée pour compléter l'ajax ? merci, vct
|
AJAX ne gère pas le POST, mais il gère le GET (enfin, on peux passer des paramètres dans l'url de la requête qui peuvent être interprétés par le script PHP)
|
Hello, merci à vous deux pour vos réponses.
Oui effectivement y a une ligne data qui est nulle mais comme j'ai 6 paramètres à envoyer comment je sépare les données ? Est ce que ça se présente sous cette forme par exemple : data = prenom=moi&nom=lui&age=25 finalement l'ajax ça parait compliqué mais je trouve que ça va, c'est pas mal de par coeur.. Bonne journée
|
Hello,
C'est exactement ce que je souhaitais, je test cela ce soir et je vous tiens au courant, nickel et merci ! |
Hello,
J'ai essayé mais je dois vraiment être nul ça ne marche toujours pas ... je vous donne tout mon code : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Nouvelle personne dans le carnet d'adresse</title> <link rel="stylesheet" type="text/css" href="carnet-dadresse.css" /> <script language="javascript" type="text/javascript"> function submitForm(valide, prenom, nom, lieu, tel_fixe, tel_portable, adresse, email, date) { var xhr; try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e2) { try { xhr = new XMLHttpRequest(); } catch (e3) { xhr = false; } } } xhr.onreadystatechange=function(){ if(xhr.readyState==4){ if(xhr.status==200) document.getElementById('info').innerHTML="ok! <a href='index.php'>back</a>"; else document.getElementById('info').innerHTML="Error code " + xhr.status; } }; xhr.open("POST", "nouvelle-personne.php", true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); var data = "valide"+valide+"&prenom"+prenom+"&nom"+nom+"&lieu"+lieu+"&tel_fixe"+tel_fixe+"&tel_portable"+tel_portable+"&adresse"+adresse+"&email"+email+"&date"+date; xhr.send(data); } </script> </head> <body> <h1>Nouvelle personne dans le carnet d'adresse</h1> <?php if(isset($_POST['prenom']) && isset($_POST['nom']) && isset($_POST['lieu'])){ if($_POST['prenom']!=NULL && $_POST['nom']!=NULL && $_POST['lieu']!=NULL){ $prenom=$_POST['prenom']; $nom=$_POST['nom']; $lieu=$_POST['lieu']; if(isset($_POST['tel_fixe']) && $_POST['tel_fixe'] != NULL){ $tel_fixe=$_POST['tel_fixe']; }else{ $tel_fixe=""; } if(isset($_POST['tel_portable']) && $_POST['tel_portable'] != NULL){ $tel_portable=$_POST['tel_portable']; }else{ $tel_portable=""; } if(isset($_POST['adresse']) && $_POST['adresse'] != NULL){ $adresse=$_POST['adresse']; }else{ $adresse=""; } if(isset($_POST['email']) && $_POST['email'] != NULL){ $email=$_POST['email']; }else{ $email=""; } $date=date("Y-m-d H:i:s"); echo "<div id='conteneur'>"; echo "Prénom : ".$prenom."<br />"; echo "Nom : ".$nom."<br />"; echo "Lieu de connaissance : ".$lieu."<br />"; echo "Téléphone fixe : ".$tel_fixe."<br />"; echo "Téléphone portable : ".$tel_portable."<br />"; echo "Adresse : ".$adresse."<br />"; echo "Email : ".$email."<br />"; echo "Les données sont correctes et je valide le nouveau membre du répertoire : "; ?> <form name="ma_form" method="post"> <?php echo "<input type='hidden' name='prenom' value='$prenom' />"; echo "<input type='hidden' name='nom' value='$nom' />"; echo "<input type='hidden' name='lieu' value='$lieu' />"; echo "<input type='hidden' name='tel_fixe' value='$tel_fixe' />"; echo "<input type='hidden' name='tel_portable' value='$tel_portable' />"; echo "<input type='hidden' name='adresse' value='$adresse' />"; echo "<input type='hidden' name='email' value='$email' />"; echo "<input type='hidden' name='date' value='$date' />"; ?> <input type="button" value="Valider" onClick="submitForm( <?php echo "ok,".$prenom.",".$nom.",".$lieu.",".$tel_fixe.",".$tel_portable.",".$adresse.",".$email.",".$date; ?> );" /> <?php echo "</form>"; echo "</div>"; } } ?> <div id="info"></div> </body> </html> <?php if (isset($_POST['valide']) && $_POST['valide']=="ok"){ $prenom=$_POST['prenom']; $nom=$_POST['nom']; $lieu=$_POST['lieu']; $tel_fixe=$_POST['tel_fixe']; $tel_portable=$_POST['tel_portable']; $adresse=$_POST['adresse']; $email=$_POST['email']; $date=$_POST['date']; mysql_connect("localhost", "root", ""); mysql_select_db("carnet_adresse"); mysql_query("INSERT INTO carnet VALUES ('', '$prenom', '$nom', '$lieu', '$tel_fixe', '$tel_portable', '$adresse', '$email', '$date')"); } ?> |
Alain_42 pas d'idée ? je suis perdu ...
vct |
Cc.
Suis-je dans les oubliettes déjà ? A+ Vct
|
Hello,
Merci alain pour la petite correction j'avais pas fait attention. Le problème persiste. Si ça peut aider, quand je clic sur le bouton ma div info initialement comme cela : <div id='info'></div> ...ne se rempli même pas par un message que j'ai défini dans le javascript : document.getElementById('info').innerHTML="ok! <a href='index.php'>back</a>"; else document.getElementById('info').innerHTML="Error code " + xhr.status; Tous ces efforts pour apprendre l'ajax c'est dingue. a+ vct
|
Hello,
en fait j'ai deux pages : index.php > formulaire qui envois les données vers nouvelle-personne.php nouvelle-personne.php >donnée à valider avec un formulaire caché <input type="hidden"> et au clic sur le bouton j'appel l'ajax et j'envois les variables avec un valide=ok dans la meme page je vérifie si il existe un valide et s'il est égale à ok et alors je fais la requete sql Vct
|
Hello,
wow merci pour cette tonne d'explication! Je pensais pouvoir appeler une partie de la page elle même je ne pensais pas qu'il fallait qu'elle soit externalisée. En ce qui concerne le fait qu'on peut s'enregistrer plusieurs fois, ne t'inquiète pas c'est un utilitaire qui me sert à moi même en guise de carnet d'adresse mais si j'en ais besoin je saurais le faire, merci. Je test cela ce soir. Bonne journée!
|
C'est quand même incroyable, bien que j'ai fait un copié collé du code que tu viens de me donner, rien ne se passe : ni la requête et même pas l'affichage du texte "ok" ou "error".
Tu crois qu'on peut encore trouver un problème dans le code ou c'est la fin du monde ? vct
|