[PHP/JaveScript]

Fermé
xXPika74Xx - 26 mai 2009 à 12:03
 xXPika74Xx - 26 mai 2009 à 23:12
Bonjour,

Je voudrait savoir si quelqu'un pourrait m'aider.

Voila j'ait un tableaux connecter a une base de données qui ressemble a ceci:

echo "<table BORDER='2' CELLPADDING='10' CELLSPACING='1'>";
echo "<caption><h2><center>Source:</center></h2></br></caption>";

echo "<tr>";
echo "<TH> ID </TH>";
echo "<TH> Poste </TH>";
echo "<TH> URL </TH>";
echo "<TH> Extension </TH>";
echo "</tr>";

while ($donnees = mysql_fetch_array($recup_donnee))
{
echo $donnees['ID'];

echo "<tr>";
echo "<td>" . $donnees['ID'] . "</td>";
echo "<td>" . $donnees['Poste'] . "</td>";
echo "<td>" . $donnees['URL'] . "</td>";
echo "<td>" . $donnees['Extension'] . "</td>";
echo "<td>" Bouton Supprimer "</td>";
> echo "</tr>";
}



echo "</table>";


Je voudrait a l'endroit en gras ou il y a bouton supprimer mettre un petit code javascript qui me permettrait de supprimer cette ligne de mon tableau et donc de la base de donnée pour regénéré le tableau sans recharger cette page (puisque d'après ce que j'ait comprit le javascript actualise sans recharger la page dites moi si je me trompe) mais comme je n'y connait rien en javascript je voudrait savoir si quelqu'un pourrait m'aider pour le code a mettre car je ne sais même pas par ou commencer.

Merci d'avance ;)
A voir également:

18 réponses

Yorundr Messages postés 289 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 11 juin 2012 44
26 mai 2009 à 13:27
Salut,

il faut que tu voi du coté de l'AJAX, parce que le js est uniquement coté client.
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
26 mai 2009 à 15:54
bon avec de l'AJAX voilà une solution (il reste peut être des erreurs de frappe)

<html>
<script type="text/javascript">
//fonctions AJAX
function makeRequest(url,id_table,id_ligne){
	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_table,id_ligne); } //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='id_a_supprimer='+id_ligne; //on envoie au script php le numéro de l'ID a supprimer
        http_request.send(data);
}
//fonction traitement de la réponse à la requette AJAX
function traitementReponse(http_request,id_table,id_ligne) {
	
	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 reponse=http_request.responseText;
			//alert(reponse);
			//si reponse positive c a d si la ligne a bien été supprimée par php on la supprime dans le tableau
			if(reponse="OK"){
				deleteLigne(id_table,id_ligne); //appel fonction delete ligne du tableau dans la page
			}
				
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}

//fonction supression de la ligne dans la page
function deleteLigne(id_table,id_ligne){
	var obj_table=document.getElementById(id_table);
	for (i=0;i<obj_table.rows.length;i++){
		if(obj_table.rows[i].id == id_ligne){
			var num_ligne_a_suppr=i;
		}
	
	}
	//alert("num a supprimer: "+num_ligne_a_suppr);
	obj_table.deleteRow(num_ligne_a_suppr);

}
</script>
<?php
echo "<table id='table1' BORDER='2' CELLPADDING='10' CELLSPACING='1'>";
echo "<caption><h2><center>Source:</center></h2></br></caption>";

echo "<tr>";
echo "<TH> ID </TH>";
echo "<TH> Poste </TH>";
echo "<TH> URL </TH>";
echo "<TH> Extension </TH>";
echo "<TH> $nbsp; </TH>"; //il faut absolument le meme nombre de colonnes
echo "</tr>";

while ($donnees = mysql_fetch_array($recup_donnee))
{
	//echo $donnees['ID']; //ne mets pas d'echo en dehors des balises tr td

	echo "<tr id='".$donnees['ID']."'>";
	echo "<td>" . $donnees['ID'] . "</td>";
	echo "<td>" . $donnees['Poste'] . "</td>";
	echo "<td>" . $donnees['URL'] . "</td>";
	echo "<td>" . $donnees['Extension'] . "</td>";
	echo "<td> <a href=\"javascript:makeRequest('suppression_ligne.php','table1','".$donnees['ID']."');\">supprimer ligne</a> </td>"; 
	echo "</tr>";
}



echo "</table>";
?>





</html>



et le script supression_ligne.php:
<?php
if(isset($_POST['id_a_supprimer'])){

 $id_a_suprimer=$_POST['id_a_supprimer'];
 
 //la tu fais ta suppression dans la base
 //......
 //$suppr=mysql_query("DELETE.....
 //et la réponse a AJAX
 if($suppr){
	//la suppression s'est bien passee alors on repond OK
	echo "OK";
 }
 
 
 
 
 }


?>
0
Euh je n'est jamais fait d'ajax de ma vie ni de java script j'essaye de comprendre le code comme je peut mais je ne comprend pas trop le fonctionnement si :( je te donne les information sur ma base de donnée tu pourrait m'aider a compléter le code svp ?

mysql_connect("localhost","root","")
or die("Impossible de se connecter");

mysql_select_db("sauvegarde_zf")
or die("Impossible de se connecter");

$recup_donnee = mysql_query("SELECT * FROM source");

c'est c'est la connexiona ma base bon je suppose qu'il faut la mettre juste au dessus du tableaux jusque la tout va bien

les attribut de ma table sont les même nom que ceux donner au colonne de mon tableaux c'est a dire que la table source et constituer de:
ID
Poste
URL
Extension

quand je teste il me dit qu'il y a une erreur avec la requète mais je comprend pas ou elle est sans vouloir faire mon boulet ><

'id_a_supprimer' est une valeur que je doit remplacer ou sais une valeur pour le code?
je sais pas comment sa fonctionne alors pour aller modifier quelque chose la dedans...

Sa serait sympa si les information que je t'es donner suffise (sinon demande moi se qu'il manque) de m'aider a compléter le code ^^
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
26 mai 2009 à 16:52
est ce que ton tableau s'affiche normalement ?

essayes comme ça: tu devrais avoir un message d'alert avec OK ou Problème avec la suppression par php

as tu bien fait le script supression_ligne.php, l'as tu nommé ainsi et l'as tu mis dans le même dossier que la page actuelle ?

<html>
<script type="text/javascript">
//fonctions AJAX
function makeRequest(url,id_table,id_ligne){
	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_table,id_ligne); } //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='id_a_supprimer='+id_ligne; //on envoie au script php le numéro de l'ID a supprimer
        http_request.send(data);
}
//fonction traitement de la réponse à la requette AJAX
function traitementReponse(http_request,id_table,id_ligne) {
	
	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 reponse=http_request.responseText;
			//TEST mettre la ligne ci dessous en commentaire qd ça marche
			alert("Reponse du script php: "+reponse);
			//si reponse positive c a d si la ligne a bien été supprimée par php on la supprime dans le tableau
			if(reponse="OK"){
				deleteLigne(id_table,id_ligne); //appel fonction delete ligne du tableau dans la page
			}
				
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}

//fonction supression de la ligne dans la page
function deleteLigne(id_table,id_ligne){
	var obj_table=document.getElementById(id_table);
	for (i=0;i<obj_table.rows.length;i++){
		if(obj_table.rows[i].id == id_ligne){
			var num_ligne_a_suppr=i;
		}
	
	}
	//alert("num a supprimer: "+num_ligne_a_suppr);
	obj_table.deleteRow(num_ligne_a_suppr);

}
</script>
<?php
echo "<table id='table1' BORDER='2' CELLPADDING='10' CELLSPACING='1'>";
echo "<caption><h2><center>Source:</center></h2></br></caption>";

echo "<tr>";
echo "<TH> ID </TH>";
echo "<TH> Poste </TH>";
echo "<TH> URL </TH>";
echo "<TH> Extension </TH>";
echo "<TH> $nbsp; </TH>"; //il faut absolument le meme nombre de colonnes
echo "</tr>";
//connexion a la base:
mysql_connect("localhost","root","") or die("Impossible de se connecter");
mysql_select_db("sauvegarde_zf") or die("Impossible de se connecter");
//requette
$recup_donnee = mysql_query("SELECT * FROM source"); 
//affichage
while ($donnees = mysql_fetch_array($recup_donnee))
{
	//echo $donnees['ID']; //ne mets pas d'echo en dehors des balises tr td

	echo "<tr id='".$donnees['ID']."'>";
	echo "<td>" . $donnees['ID'] . "</td>";
	echo "<td>" . $donnees['Poste'] . "</td>";
	echo "<td>" . $donnees['URL'] . "</td>";
	echo "<td>" . $donnees['Extension'] . "</td>";
	echo "<td> <a href=\"javascript:makeRequest('suppression_ligne.php','table1','".$donnees['ID']."');\">supprimer ligne</a> </td>"; 
	echo "</tr>";
}



echo "</table>";
?>


</html>

et le script supression_ligne.php:
<?php
if(isset($_POST['id_a_supprimer'])){

	 $id_a_suprimer=$_POST['id_a_supprimer']; //la on recupere le numero de l'ID a supprimer cette valeur est transmise par AJAX, ne change rien
	 
	 //connexion a la base:
	mysql_connect("localhost","root","") or die("Impossible de se connecter");
	mysql_select_db("sauvegarde_zf") or die("Impossible de se connecter");
	//requette
	 $suppr=mysql_query("DELETE fROM source WHERE ID='".$id_a_suprimer."'");
	 //et la réponse a AJAX
	 if($suppr){
		//la suppression s'est bien passee alors on repond OK
		echo "OK";
	 }else{
		echo "Pb avec la suppression par php";
	 }

 }
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Non sa me mets un message d'alerte me disant:

"Un problème est survenu avec la requête."

Donc je sais pas si tu voit pourquoi??

sinon question qu'à rien a voir mais $nbsp a une utiliter dans le programme ou c'est juste histoire de mettre quelque chose dans le <th></th>?
0
Au faite oui mon tableaus s'affiche correctement sauf la petite erreur a cause de $nbsp qui n'est pa définie d'après le naviguateur et donc affiche juste ";" dans le <th></th> des bouton
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
26 mai 2009 à 17:17
Houp erreur de frappe c'est   au lieu de $nbsp
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
26 mai 2009 à 17:18
c'est un & au lieu de $ devant nbsp pour simuler un espace
0
Et pour le problème d'erreur de requète ta une idée???

pasque moi si j'doit me mettre a l'ajax pour trouver j'y suis encore le mois prochain XD
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
26 mai 2009 à 17:34
Surement Pb avec le script:
essayes avec le script suppression.php comme ça:

<?php
if(isset($_POST['id_a_supprimer'])){

	 $id_a_suprimer=$_POST['id_a_supprimer']; //la on recupere le numero de l'ID a supprimer cette valeur est transmise par AJAX, ne change rien
	 
	 //connexion a la base:
	mysql_connect("localhost","root","") or die("Impossible de se connecter");
	mysql_select_db("sauvegarde_zf") or die("Impossible de se connecter");
	//requette
	 $suppr=mysql_query("DELETE FROM source WHERE ID=$id_a_suprimer ");
	 //et la réponse a AJAX
	 if($suppr){
		//la suppression s'est bien passee alors on repond OK
		echo "OK";
	 }else{
		echo "Pb avec la suppression par php";
	 }

 }
?>
0
Le problème doit pas venir de la sa m'affiche toujours le même message d'erreur:

"Un problème est survenu avec la requète" :(
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
26 mai 2009 à 17:56
la requette AJAX apeelle le script php et le message est à:

//fonction traitement de la réponse à la requette AJAX
function traitementReponse(http_request,id_table,id_ligne) {

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 reponse=http_request.responseText;
//TEST mettre la ligne ci dessous en commentaire qd ça marche
alert("Reponse du script php: "+reponse);
//si reponse positive c a d si la ligne a bien été supprimée par php on la supprime dans le tableau
if(reponse="OK"){
deleteLigne(id_table,id_ligne); //appel fonction delete ligne du tableau dans la page
}

}
else {
alert('Un problème est survenu avec la requête.');
}
}
}


donc au traitement de la réponse, après le else du test if (http_request.status == 200) donc ça veut dire que l'on ne reçoit pas le =200

verifies ton script, son nom, son, emplacement etc...
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
26 mai 2009 à 18:04
attention le script doit se nommer:
suppression_ligne.php


avec deux p
0
C'est bon sa marche niquel chè pas pourquoi j'suis pas sur le même ordi et la sa ma mit le message d'erreur:

"Pb avec la suppression par php";

Et en faite le problème et qu'il avait un tout petit oublie dans:

$suppr=mysql_query("DELETE FROM source WHERE ID=$id_a_suprimer ");

Qui devient:

$suppr=mysql_query("DELETE FROM source WHERE ID=\"$id_a_suprimer \" ");


C'est vraiment parfait merci beaucoups je sais trop pas comment te remercier t'es le meilleur ;)
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
26 mai 2009 à 19:40
qd tu changes d'ordi tu accedes qd même sur le même serveur distant ou tu es sur un serveur local à ton micro ?
0
Non je suis en local j'ait recreer la base de donnée le seul truc qui a changer (enfin faudrat que je vérifie le non de suppression_ligne.php mais j'avait fait copier coller donc sa dvrait être bon) c'est le nom du fichier sur lequel depuis lequel j'appel suppression_ligne.php sa change quelque chose???
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
26 mai 2009 à 21:14
le nom du fichier a partir duquel tu appelle ne joue pas mais par contre est-il dans le même dossier ?
0
Ouai il était dans le même dossier sa se trouve c'est le suppression_ligne.php ou y manquait un p j'regarde dem1 mat1 en arrivant au boulot et j'te dirait ^^
0