[JAVASCRIPT & SQL] Envoie de formulaire, pb

Fermé
Dominick - 13 oct. 2009 à 00:00
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 13 oct. 2009 à 15:27
Bonjour,

Voilà, j'ai un problème lorsque je veux faire une requête Ajax sur mon serveur... Mais lorsque j'envoie le formulaire, il charge une nouvelle pages mais avec les champs et leur contenu en GET dans l'URL...

Je veux que le serveur envoie les données post et qu'ensuite il affiche si la requête à été effectué avec succès ou s'il y a eu une erreur dans une boite avec l'id sql...

Voici mon code Javascript:
// Requette AJAX
function makeRequest(id_ecrire1){
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", 'p.php?p=managearticle&job=mod&id=<?php echo $id; ?>', 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');
	
	///// ici tu peux rajouter les autres valeurs que tu as passees en arguments lors de l'appel de la fonction
	var a1=encodeURIComponent(document.getElementById("articlename").value);
	var a2=encodeURIComponent(document.getElementById("tiny").value);
	var a3=encodeURIComponent(document.getElementById("elm1").value);
	var a4=encodeURIComponent(document.getElementById("elm2").value);
	var a5=encodeURIComponent(document.getElementById("cat").value);
	var a6=encodeURIComponent(document.getElementById("modarticle").value);
	data="articlename="+a1+"&article="+a2+"&summary="+a3+"&source="+a4+"&cat="+a5+"&modarticle="+a6;
	http_request.send(data);
	alert('Donn&eacute;es envoy&eacute;s !'+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_list=http_request.responseText;
			obj = document.getElementById(id_ecrire); 
			obj.innerHTML = affich_list;
	} 
	else {
			alert('Un problème est survenu avec la requête.');
	}
}
}


Et ensuite voici mon code php à qui php fait appelle... Entre les if($p=='var')...:

<?php
$articlename = $_POST['articlename'];
$article = $_POST['article'];
$summary = $_POST['summary'];
$source = $_POST['source'];
$cat = $_POST['cat'];
$sql = 'UPDATE base SET articlename = "'.$articlename.'", article = "'.$article.'", summary = "'.$summary.'", 
source = "'.$source.'", cat = "'.$cat.'" WHERE id = "'.$id.'"';

$requete = mysql_query($sql);

if($requete)
{
	echo '<td bgcolor="#111111">La modification de l\'article s\'est effectu&eacute; avec succ&egrave;s!</td>';
}
else
{
	echo '<td bgcolor="darkred">Il eu une erreur dans la requ&ecirc;te.';
}
?>


et ensuite mon Formulaire:

<form name="modarticle">
<table>
<tr>
<td align="right">Upload de fichier:</td> 
<td align="left" colspan="2"><a href="#" id="iframe">Montrer/Cacher</a><br /> <iframe scrolling="no" height="200px" width="530px" src="up.php" id="upload" style="border:0px; display:none;"></iframe></td>
</tr>
<tr>
<td align="right">Nom de l'article :</td>
<td align="left" colspan="2"><input type="text" id="articlename" name="articlename" maxlength="50"  value="<?php echo $an['articlename']; ?>"/></td>
</tr>
<tr>
<td align="right">Utilisateur :</td>
<td align="left" colspan="2"><input type="text" value="<?php echo $an["username"]; ?>" disabled="disabled" /></td>
<tr>
<td align="right">Article :</td>
<td align="left" colspan="2"><textarea name="article" id="tiny" rows="10" cols="50" /><?php echo $an['article']; ?></textarea></td>
</tr>
<tr>
<td align="right">Extrait d'article :</td>
<td align="left" colspan="2"><textarea id="elm1" name="summary" rows="5" cols="40" /><?php echo $an['summary']; ?></textarea></td>
</tr>
<tr>
<td align="right">Via (Source)*:</td>
<td align="left"><textarea id="elm2" rows="2" cols="40" name="source" maxlength="250"><?php echo $an['source']; ?></textarea></td>
<td>*250 caract&egrave;res maximum</td>
</tr>
</tr>
<td align="right">Cat&eacute;gorie:</td>
<td align="left" colspan="2"><input type="text" id="cat" name="cat" value="<?php echo $an['cat']; ?>" /></td>
</tr>
<tr>
<td align="left" colspan="3"><small>*Champ optionnel.</small></td>
</tr>
<tr>
<td align="center" colspan="3"><input type="button" value="Soumettre l'article" id="modarticle" name="modarticle" onsubmit="makeRequest('sql');" /></td>
</tr>
</table>
</form>


L'alerte apparait disant que les données on étés envoyées mais, le seul problème est que rien n'est envoyé !!!

Je ne trouves pas l'erreur,

Cordialement,
Dominick Labrie

4 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 oct. 2009 à 00:26
Tiens je reconnais une de mes fonctions Ajax

pour qu'une reponse soit affichee il faut que dans ta page de formulaire il y ait un div avec l'id_ecrire
dans ton cas
<div id="sql"></div>


ensuite inutile de mettre des trucs dans l'url en post
// lancement de la requete
http_request.open("POST", 'p.php?p=managearticle&job=mod&id=<?php echo $id; ?>', true);


// lancement de la requete
	http_request.open("POST", 'p.php', true);


ensuite pourquoi encodeURIComponent c'est inutile

ensuite tu mets un bouton type="button" et tu mets onsubmit=.... ??

il faut:

<input type="button" value="Soumettre l'article" id="modarticle" name="modarticle" onClick="makeRequest('sql');" />
0
1. La Div y est déjà
2. Je dois mettre des variables... Car la pages où je modifie l'article à cette adresse... :

Ma page où je modifie à du style donc: index.php?p=managearticle&job=mod&id=23
Tandis que la page que j'appelle est p.php?p=managearticle&job=mod&id=23 et n'a PAS de style... Elle a une sécurité d'include...

Code source de p.php...

	//=========================================================SESSION START=========================================================
$p = $_GET['p']; 
define("secureinclude", true);
include('../pages/config.php');
	//=========================================================SQL CONNECT=========================================================
mysql_connect( SERV, USER, PASS );
mysql_select_db( BASE );
	//=========================================================FETCH $check=========================================================
	$reponse = mysql_query('SELECT ... FROM accountsbase WHERE user = "'. $_COOKIE["user"] .'"');
	$result = mysql_fetch_array($reponse);
	
	if(param de securité, si admin log on affiche)
	{ 
				switch($p){
				case 'deleteticket':	$p2='deleteticket.php'; 	break;
				case 'deleteuser': 		$p2='deleteuser.php'; 		break;
				case 'manageticket': 	$p2='manageticket.php'; 	break;
				case 'manageuser': 		$p2='manageuser.php'; 		break;
				case 'modifyu2': 		$p2='modifyu2.php'; 		break;
				case 'modifyuser': 		$p2='modifyuser.php'; 		break;
				case 'newticket2': 		$p2='newticket2.php'; 		break;
				case 'newticket': 		$p2='newticket.php'; 		break;
				case 'showticket': 		$p2='showticket.php';		break;
				case 'showuser': 		$p2='showuser.php';			break;
				case 'newarticle': 		$p2='newarticle.php';		break;
				case 'managearticle': 	$p2='managearticle.php';	break;
				case 'managecomment':	$p2='managecomment.php';	break;
				case 'upadd':			$p2='upadd.php';		break;
				case 'files':			$p2='files.php';		break;
				};
				include($p2);
	} 
	else
	{
		if(isset($p)) { $x = '&ref=../admin/?p='.$p; } else { $x = '&ref=../admin/'; }
		echo'Vous n\'avez pas les droits d\'acc&egrave;s<meta http-equiv="Refresh" content="5 ;URL=../?p=connexion'.$x.'">';
	}
?>


et ensuite la page managearticle.php que j'appel avec le $p qui ensuite redirige vers un if $job et qui ensuite est redivisé avec un autre if... je vous montre le contenu du if $job=='mod'

Va sur ce lien... je vais arrêter de polluer
http://pastebin.com/m3c8ef240
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 oct. 2009 à 01:10
Normal qe ca ne marche

tu appelle une page p>php en lui passant des parametres ar l'url OK

quoique avec ajax en method POST ?? a voir

les donnees lues dans ton formulaire tu les envoie en Ajax en POST au script p.php et pas aux autres scripts

C'est tres tres complique comme tu fais, tes valeurs ne suivent pas
0
ok... j'ai essayé de mettre la page de process dans modarticle.php... ça ne fonctionne pas:

Ma page avec formulaire: http://pastebin.com/m5f6f645c
Ma page Modarticle.php: http://pastebin.com/m48c95f77

Veuillez m'aider s.v.p., Bref, je suis ici pour ça !
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 oct. 2009 à 15:27
J'ai decele une erreur:
function makeRequest(id_ecrire1)

tu mets id_ecrire1 et dans ta fonction qd tu appelles traitement de la reponse tu mets id_ecrire
0