Page 1 sur 1

submit dans une boucle

Posté : 19 avr. 2009, 04:44
par qc_can
<?php 
if (isset($_POST['imprimer'])){
	$_SESSION['Id_Facturation'] = $ligne['Id_Facture'];
	header("Location: impression.php");
}elseif (isset($_POST['payer'])){
	$result=mysqli_query($bd, "Select Id_Facture, Facture_Payer  from facturation WHERE Id_Facture = '".$ligne['Id_Facture']."'");
	$ligne=mysqli_fetch_assoc($result);
	mysqli_query($bd,"UPDATE facturation SET Facture_Payer='Oui' WHERE Id_Facture = '".$ligne['Id_Facture']."'");
} ?>
<?php
$result=mysqli_query($bd, "Select Id_Facture, Prenom_Client, Nom_Client, Date_Facturation from facturation WHERE Facture_Payer = 'Non'");
	while ($ligne=mysqli_fetch_assoc($result)){
		echo "<tr>";
			echo "<td>".$ligne['Id_Facture']." ".$ligne['Prenom_Client']." ".$ligne['Nom_Client']." ".$ligne['Date_Facturation']."</td>";
			echo "<td><input type='submit' name='imprimer' value='Imprimer'/></td>";
			echo "<td><input type='submit' name='payer' value='Payer'/></td>";
		echo "</tr>";
	}?>
Boujour,

J'ai un petit problème pour identifier les boutons submit payer ou imprimer des lignes correspondant ainsi que d'obtenir Id_Facture de ses meme ligne afin d'être capable d'appliquer les actions indiquées dans le premier code affiché. Sa serait vraiment apprécié si quelqu'un pourrai me sortir du pétrin, car mes recherches et mes tentatives ont été malheureusement des échecs.

Merci

Posté : 19 avr. 2009, 11:11
par Ryle
Ton problème vient vraissemblablement du fait que tu dois avoir un seul formulaire pour l'ensemble de tes données, avec 2 boutons submit par ligne, chacun soumettant le formulaire, mais sans jamais spécifier ce qui distingue le bouton "Payer" d'une ligne, de celui de la ligne suivante...

Et comme à aucun moment tu ne récupères ni n'envoi d'Id_Facture (on ne sait d'ailleurs pas à quoi correspond ton $ligne ?) il doit pas mettre à jour grand chose...

Il te faut donc trouver une solution pour, lorsque l'on clique sur l'un des boutons, tu transmettes non seulement l'information Payer/Imprimer, mais aussi et surtout, l'id de l'élément concerné :)

Posté : 19 avr. 2009, 17:46
par qc_can
Bien dit, cepandant cela ne me donne pas la reponse :(, mais tu as tres bien comprit quel était le problème. Pourse qui est d'identifier le bon Id_Facture, je peux utiliser un tableau. Mais pour faire cela, je doit etre capable d'identifier le bon payer et le bon imprimer se qui est un défit. Je ne suis pas pro en php, je ne fait que débuter, alors mes connaisance ne m'aide pas a trouver la reponse. :( Si tu as une ider, je suis ouvert.

$ligne['Id_Facture'] dans la première partit n'équiveau a rien, car aucune solution d'identification n'a été trouver. Mais je l'ai quand meme mit pour dire que sa valeur devrai le bon Id_Facture apres avoir fait un submit.

Posté : 19 avr. 2009, 19:15
par orgerix
Une petite piste pour la différentiation payer/imprimer. Tu peux donner un même nom pour tes bouton de validation. La valeur que prendra cette variable correspond au bouton sur lequel on a cliqué.

Pour faire passer l'id de la commande. Tu as plusieurs choix. Parmi elles, tu as la possibilité d'utiliser un champ hidden ou utiliser les sessions.

Posté : 19 avr. 2009, 22:03
par qc_can
Merci pour le coup de main a toi et a quelqu'un que je connai.

Je connaisais pas le type="hidden", mais tres pratique. Par contre, je ne comprend pas comment fait le code pour savoir quel est le bon formulaire ou on fait un submit et ses un élément tres important au code pour que sa fonctionne.

Solution:
if (isset($_POST['imprimer'])){
	$_SESSION['Id_Facturation'] = $_POST['id_facture'];
	header("Location: impression.php");
}elseif (isset($_POST['payer'])){
	$result=mysqli_query($bd, "Select Id_Facture, Facture_Payer  from facturation WHERE Id_Facture = '".$_POST['id_facture']."'");
	$ligne=mysqli_fetch_assoc($result);
	mysqli_query($bd,"UPDATE facturation SET Facture_Payer='Oui' WHERE Id_Facture = '".$_POST['id_facture']."'");
}
<?php
$result=mysqli_query($bd, "Select Id_Facture, Prenom_Client, Nom_Client, Date_Facturation from facturation WHERE Facture_Payer = 'Non'");
	while ($ligne=mysqli_fetch_assoc($result)){
	echo "<form method='post'>";
		echo "<table  cellspacing='16'>";
			echo "<tr>";
				echo "<td>".$ligne['Id_Facture']."</td>";
				echo "<td>".$ligne['Prenom_Client']."</td>";
				echo "<td>".$ligne['Nom_Client']."</td>";
				echo "<td>".$ligne['Date_Facturation']."</td>";
				echo "<td><input type='submit' name='imprimer' value='Imprimer' /></td>";
				echo "<td><input type='submit' name='payer' value='Payer' /></td>";
				echo "<td><input type='hidden' name='id_facture value='".$ligne['Id_Facture']."' /></td>";
			echo "</tr>";
		echo "</table>";
	echo "</form>";
	}?>

Posté : 20 avr. 2009, 09:07
par orgerix
Avec ton code, si tu clique sur imprimer, tu auras ça dans ton tableau
Array (
'imprimer'=>'Imprimer'
'id_facture'=>tonID
)
Si tu clique sur payer, ce sera ça
Array (
'payer'=>'Payer'
'id_facture'=>tonID
)
Les champs de type submit n'envoient leur valeur que si c'est le bouton qui a été utilisé pour valider le formulaire. Tu peux te servir de ça pour voir sur quel bouton l'utilisateur a cliqué.

Cependant comme tu as des noms de variables différents, c'est pas très facile à gérer. Si par exemple, tu appelle tes deux submit action, il suffira juste de regarder quelle valeur a $_POST['action'] pour savoir quoi faire.

Posté : 22 avr. 2009, 02:50
par qc_can
J'aurai une autre question sur un page tres similaire a la derniere. Mais au lieu d'avoir un seul Id_Facture a conservé, j'en ai plusieurs et en nombre indéterminer que je place dans une variable de type tableau. Comment pourrait-on récupérer cette variable?

Posté : 23 avr. 2009, 00:42
par AB
Heu, en passant ton tableau en revue ?

Pour bien visualiser ce que te retourne tes formulaires post, tu peux faire :
echo '<pre>';
print_r($_POST);
echo '</pre>';

Posté : 23 avr. 2009, 10:24
par D4Y
Voici une solution à ton problème.
Passer par javascript, je veux dire par là créer une fonction qui submit une form dans laquel tu injectes tes variables.

Voici en gros:
//Coté javascript

function submitFacture(action,id){
document.getElementById('action').value = action;
document.getElementById('id_fact').value = id;
document.submitfact.submit();
}

//Coté html(PHP)


<form name="submitfact" method="post">
<input type="hidden" id="action" name="action"/>
<input type="hidden" id="id_fact" name="id"/>
</form>


<?php
$result=mysqli_query($bd, "Select Id_Facture, Prenom_Client, Nom_Client, Date_Facturation from facturation WHERE Facture_Payer = 'Non'");
    while ($ligne=mysqli_fetch_assoc($result)){
        echo "<table  cellspacing='16'>";
            echo "<tr>";
                echo "<td>".$ligne['Id_Facture']."</td>";
                echo "<td>".stripslashes($ligne['Prenom_Client'])."</td>";
                echo "<td>".stripslashes($ligne['Nom_Client'])."</td>";
                echo "<td>".$ligne['Date_Facturation']."</td>";
                echo "<td><input type=\"button\" onclick=\"submitFacture('imprimer','".$ligne['Id_Facture']."')\" name=\"imprimer\" value=\"Imprimer\" /></td>";
                echo "<td><input type=\"button\" onclick=\"submitFacture('payer','".$ligne['Id_Facture']."')\" name=\"payer\" value=\"Payer\"/></td>";
            echo "</tr>";
        echo "</table>";
    }?>