Forum Clubic

Un bouton image pour la suppression d'une donnée qui ne marche pas.pourquoi?

Bonjour,

J’ai ma page d’affichage de ma base de données :


<div align='center'>
		<table border=5 width='100%'>
			<tr>
				<td align=center>Multicast</td>
				<td align=center>Chaine</td>
				<td align=center>Port</td>
				<td align=center>Codage</td>
				<td align=center>Définition</td>
				<td align=center>Systeme</td>
				<td align=center>Temporaire</td>
				<td align=center>Visuel</td>
				<td align=center>Diffusé</td>
				<td align=center>Type</td>
				<td align=center>Modifier</td>
				<td align=center>Supprimer</td></tr>


<?php
include "Controleur.php";
if(Connecter())
{
	//j'affiche dans mon tableau
	while($tuple=mysql_fetch_array($CurseurMult)) 
	{
		$num = $tuple['Num'];
		echo"<tr><td align=center>".$tuple['Multicast']."</td>";
		echo"<td align=center>".$tuple['Chaine']."</td>";
		echo"<td align=center>".$tuple['Port']."</td>";
		echo"<td align=center>".$tuple['Codage']."</td>";
		echo"<td align=center>".$tuple['Definition']."</td>";
		echo"<td align=center>".$tuple['Systeme']."</td>";
		echo"<td align=center>".$tuple['Permanent']."</td>";
		echo"<td align=center><img src='images.jpg' height='30'width=45' ></td>";
		echo"<td align=center>...</td>";
		echo"<td align=center>".$tuple['Type']."</td>";
		echo"<td align=center><input name='button' type='image' src='b_edit.jpg' height='20'width=20' alt='modifier' title='modifier' onclick='ModifierMulticast()'></td>";
		echo"<td align=center><input name='button' type='image' src='b_drop.jpg' height='20'width=20' alt='Effacer' title='Effacer' [b]onclick=DeleteMulticast2(".$num.")[/b]></td></tr>";
	} 
	echo"</table></div>";
}

seulement, j’aimerais que mon bouton efface ma ligne donc avec la fonction :


<?php
function DeleteMulticast2($num){
	$MonSQL = "DELETE * FROM information WHERE Num = '".$num."'";
	mysql_query($MONSQL);
	}
?>

Celà ne marche pas, j’ai pas de message d’erreur, donc je ne sais pas d’où ça vient, est-ce la relation avec la base de données au niveau de la suppression? est-ce que mon $Num est mal déclaré? est-ce que ma fonction n’est pas bonne???

Si quelqu’un peut m’éclairer, ce serait avec graaaaaaaaaaaaaand plaisir!!!

Merci d’avance en tout cas!

Le passage des minuscules aux majuscules, c’est volontaire ?

oups, non c’est pas volontaire… une erreur de ma part vite modifiée…
Mais…ça marche quand même pas…

Je ne vois vraiment pas d’où celà peut venir…

Un indice :
PHP est un langage s’exécutant côté serveur
Javascript est un langage s’exécutant côté client

Donc côté client tu as :

<input name=‘button’ type=‘image’ src=‘b_drop.jpg’ height=‘20’width=20’ alt=‘Effacer’ title=‘Effacer’ onclick=DeleteMulticast2(".$num.")>

(qui appelle donc la fonction Javascript DeleteMulticast2)

Et côté serveur tu as <?php function DeleteMulticast2($num) { ... } ?>, donc la fonction PHP DeleteMulticast2.

Tu vois où je veux en venir ?
Edité le 22/09/2008 à 13:58

ooooooooooook en gros, il faudrait pour que celà soit correcte, une fonction javascript avec ma requête à la place de ma fonction php. Onclick c’est que valable en javascript?

je vois pas comment faire alors pour que ma fonction marche lorsque je clique sur l’image de mon bouton supprimer…

Il faut que tu dises au serveur, quand tu cliques sur ton bouton, de déclencher la suppression. En général on utilise un formulaire pour ça, du genre :

Côté client (HTML) :


<form action="tapage.php" method="post">
<input type="hidden" id="valeur" name="valeur" value="3"/>
<input type="button" id="Tonbouton" name="Tonbouton" value="Supprimer"/>
</form>

Et côté serveur (PHP donc) :


<? if (isset($_POST['Tonbouton'] && isset($_POST['valeur']))
{
$num = intval($_POST['valeur']);
DeleteMulticast2($num);
}

(A adapter / perfectionner)
Edité le 22/09/2008 à 14:33

justement je voulais éviter de refaire un formulaire pensant que c’était plus simple au niveau du code d’adapter a méthode que j’avais avancer. en affichant le code source d’une page dont je me sert comme modèle, j’ai :


<a href="sql.php?db=multicast&table=information&token=8c5931cb6cba858c4eaae52828b85d9d&pos=0&session_max_rows=30&disp_direction=horizontal&repeat_cells=100&dontlimitchars=0&sql_query=DELETE+FROM+%60information%60+WHERE+%60information%60.%60Num%60+%3D+1+LIMIT+1&zero_rows=L%27enregistrement+a+%C3%A9t%C3%A9+effac%C3%A9&goto=sql.php%3Fdb%3Dmulticast%26table%3Dinformation%26token%3D8c5931cb6cba858c4eaae52828b85d9d%26pos%3D0%26session_max_rows%3D30%26disp_direction%3Dhorizontal%26repeat_cells%3D100%26dontlimitchars%3D0%26sql_query%3DSELECT%2B%252A%2BFROM%2B%2560information%2560%26zero_rows%3DL%2527enregistrement%2Ba%2B%25C3%25A9t%25C3%25A9%2Beffac%25C3%25A9%26goto%3Dtbl_properties_structure.php" onclick="return confirmLink(this, 'DELETE FROM `information` WHERE `information`.`Num` = 1 LIMIT 1')"><img class="icon" width="16" height="16" src="./themes/original/img/b_drop.png" alt="Effacer" title="Effacer" /></a>
 

je n’ai voulu retenir que


onclick="return confirmLink(this, 'DELETE FROM `information` WHERE `information`.`Num` = 1 LIMIT 1')"

et ai voulu l’adapter à mon code…pourquoi est-ce que celà ne parait pas trop correcte?

c’est possible non?

Dans ton premier lien, il fait appel à la page “sql.php” qui va exécuter la requête. Les informations sont donc transmies à PHP dans la page sql.php à l’aide des paramètres dans l’url (?db=multicast&table=information…).
Dans ton cas, tu ne transmets pas les informations au serveur. PHP ne sait donc pas qu’il doit exécuter la requête. Et pour transmettre l’information au serveur, il n’y a pas de secret : il faut charger une page (par un formulaire, un lien, une iframe, ou AJAX).
Edité le 22/09/2008 à 16:10

niarf, bon bon bon, je vais essayer dans cette vois là alors!!! (vraiment ce que je voulais éviter!!!
Merci merci

Il faut vraiment que tu vois PHP comme un programme sur le serveur qui va générer un simple fichier texte. Ce fichier texte va être ensuite téléchargé et interprété par le navigateur. Une fois le fichier généré, il n’y a plus la moindre interaction entre le client et le serveur, jusqu’à ce que le client demande un nouveau fichier. Ce qui est très limitant, j’en conviens.
Edité le 22/09/2008 à 17:44

grrrrrrrrrrrr, je ne suis vraiment pas à l’aise avec ajax, donc à éviter, une iframe why not, un lien, why not, un formulaire, un peu lourd les formulaire!!!

Mon idée à la base de chez base, c’est de pouvoir en appuyant sur mon bouton supprimer une fenêtre de confirmation (javascript) s’ouvre me demandant si je veux bien supprimer, et si oui, effectuer la fonction deleteMulticast2($num)…

Disons que si j’utilise un iframe, ou un lien ou un formulaire, je sens que je vais réfléchir trop longtemps pour savoir comment récupérer ma donnée… sniiiiiiiiiiiiiiiif je n’ai pas le php innée!!! hélàs!!!

<a href="mapage.php?action=delete&id=2" onclick="return confirm('Etes vous sur de vouloir supprimer xxxx ?')">Supprimer</a>

Puis dans ta page :



<?php
if (isset($_GET['action'] && $_GET['action'] == 'delete' && isset($_GET['id']))
{
$num = intval($_GET['id']);
deleteMulticast2($num);
}

?>


Non ?

merci pour ta réponse, j’ai fait un truc plus banal!!!
je te montre :


echo"<form name='button' method='post' action='supprimer.php'>"; 
		echo"<td align=center><input name='button' type='image' src='b_edit.jpg' height='20'width=20' alt='modifier' title='modifier' onclick='ModifierMulticast()'></td>";
		echo"<td align=center><input type='image' name='btnSup' value='".$num."'  src='b_drop.jpg' height='20'width=20' alt='Effacer' title='Effacer' onClick='button.submit()'></td></tr>";
		echo"</form>";

et à supprimer.php ;


<?php
include "connect.php";
if(Connecter())
{
	$num = $_POST['btnSup'];
	echo $num;echo'<br>';
	$MonSQL = "DELETE * FROM information WHERE Num = '".$num."'";
	echo $MonSQL;echo'<br>';
	$result = mysql_query($MonSQL);
	
	if($result)
	{
	echo 'suppression réussi';
	}
	else
	{
		echo 'php qui marche pas et qui fais ****';
		}

}
?>

mais lorsque je lance, j’ai :


21
DELETE * FROM information WHERE Num = '21'
php qui marche pas et qui fais ****

j’ai bien le bon num, ma requete s’affiche pas, donc je présume que c’est au niveau de mysql_query non???, mais je vois pas le soucis!!!


pffffffffffff!!!!! c'est mon sql qui n'était pas bon....

Delete From information …

au lieu de

Delete * from information …

la honte…

Dans ton echo ‘php qui marche pas’, affiche le contenu de mysql_error() pour savoir ce qui ne marche pas. Du genre :


echo 'php qui marche pas et qui fais **** mais il a peut être une bonne raison : ' . mysql_error();

:wink:

et j’ai même rajouter


<SCRIPT LANGUAGE="JavaScript">
function confirmation() {
var msg = "Êtes-vous sur de vouloir supprimer?";
if (confirm(msg))
location.replace(supprimer.php);
}
</SCRIPT> 

et


<input type='image' name='btnSup' value='".$num."'src='b_drop.jpg' height='20'width=20' alt='Effacer' title='Effacer' onClick='confirmation();'>

mais même quand je fais annuler, ça lance quand même ma page supprimer.php, donc même si j’annule, ça efface ma donnée!!! comment ça se fait??

Tu met la fonction confirmation dans le onsubmit du et tu fait en sorte que ta fonction renvois false quand Annuler et true quand accepter.

mais bon gros soucis c’est que même quand j’annule et bien devinez quoi??? ça me renvoie quand même sur supprimer.php, alors que ça ne devrais pas, je pense que c’est dû au form avec action =‘supprimer.php’ mais quand je ne le mets pas, ça ne me fait rien du tout, pas de suppression, et si je ne mets pas de form, c’est btnSup qui n’est pas reconnu…


<form action="supprimer.php" ... onsubmit="javascript:confirmation()" >

et le script :


<SCRIPT LANGUAGE="JavaScript">
function confirmation() {
  var msg = "Êtes-vous sur de vouloir supprimer?";
  return confirm(msg);
}
</SCRIPT> 

je veux bien, mais c’est pas vraiment ce que je veux…du moins, ça ne donne pas ce que je veux!
j’ai dans test.php :


echo"<form name='button' method='post' action='supprimer.php' >"; 
echo"<td align=center><input type='image' name='btnMod' value='".$num."' src='b_edit.jpg' height='20'width=20' alt='modifier' title='modifier' onclick='modification()'></td>";
echo"<td align=center><input type='image' name='btnSup' value='".$num."'src='b_drop.jpg' height='20'width=20' alt='Effacer' title='Effacer' onClick='confirmation();'></td></tr>";
echo"</form>";

j’ai aussi :


<SCRIPT LANGUAGE="JavaScript">
function confirmation() {
	var msg = "Êtes-vous sur de vouloir supprimer?";
	if (confirm(msg))
	{
		location.replace("supprimer.php");
	}
	else
	{
		location.replace("test.php");
		}
	
}
</SCRIPT> 

ma page supprimer.php correspond à :


<body>
<?php
include "connect.php";
if(Connecter())
{
	$num = $_POST['btnSup'];
	$MonSQL = "DELETE FROM information WHERE Num = '$num'";
	$result = mysql_query($MonSQL);


}
?>
<META HTTP-EQUIV="Refresh" CONTENT="1;URL='test.php'">
</body>

ce que je veux maintenant c’est qu’en cliquant sur input type=image name = btnSup j’ai ma fenêtre de confirmation qui s’ouvre, que lorsque je clique sur oui, le traitement de supprimer.php se fasse, et que lorsque je clique sur annuler, celà ne fasse rien, donc reste sur test.php!

Or,

  • si je ne mets pas de form, le $_Post[‘btnSup’] de supprimer.php n’est pas ‘reconnu’, donc je n’ai pas la suppression
  • si j’enlève le action, rien ne se passe, si suppression, ni rien
  • si je mets action =’’ idem
  • si je mets action=‘supprimer.php’ quoi qu’il se passe, la page ira sur supprimer.php
  • lorsque je clique sur annuler dans ma boite de confirmation, le traitement, s’effectue quand même.
  • si je mets onSubmit=confirmation() => que je clique sur btnSup ou btnMod, l’invit de confirmation s’ouvre quand même

je ne sais plus quoi faaaaaaaaaaaaaaaaaaire!!! merci pour vos réponses, et futures réponses!!!

Pourquoi est-ce que lorsque j’‘annule’?? et bien ça l’envoie quand même sur supprimer.php???


echo"<form name='button' method='post' action='supprimer.php' >";
		echo"<td align=center><input type='image' name='btnSup' value='".$num."' src='b_drop.jpg' height='20'width=20' alt='Effacer' title='Effacer' onClick='confirmation()'></td></tr>";
		echo"</form>";

je me doute que c’est au niveau de mon action = ‘supprimer.php’ mais je vois pas, je sais pas!!!