IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Transaction php mysql


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Par défaut Transaction php mysql
    Bonjour, j'ai un souci avec mes ligne de commande je debute et je n'arive pas a finir ma commande j'ai besoin d'aide svp

    // créer la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    				$insert = $conn->prepare("INSERT INTO detail (art_id,com_id,det_prix,det_quantite) VALUES(".$idart['id'].", '2', ".$total_panier.", ".$idart['q'].")");	
    				$insert->execute();			
    					/*echo "<pre>";
    					print_r($insert);
    					echo "</pre>";		
    					die("here");*/
    je peux founir le code entier

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Quel est le problème ? Qu'est ce que tu veux faire de plus ?

    Au passage n'utilise pas prepare() si tu n'as pas de paramètres.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Par défaut re
    Citation Envoyé par sabotage Voir le message
    Quel est le problème ? Qu'est ce que tu veux faire de plus ?

    Au passage n'utilise pas prepare() si tu n'as pas de paramètres.

    merci pour ton aide

    en fait j'ai créer un site de vente de vêtement avec base de donnée
    je l'ai pratiquement terminé mais il me manque le plus important la transaction
    c'est a dire que quand je met un article dans mon panier et que je veux acheter rien ne se passer je retrouve pas la comande dans la base de donnée
    je te met le code entier du panier.php

    code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
     
    <?php 
    	require_once('includes/header.php'); //on inclus 1 fois le dossier concerner		
     
    	//Creation du panier 
    	if (! isset($_SESSION['bag'])) {
    		$_SESSION['bag'] = array();
    	}
    	//Donnees externes utilisee par le panier
    	$id = (isset($_POST['id'])?$_POST['id']:(isset($_GET['id'])?$_GET['id']:null));
    	 $l = (isset($_POST['l']) ?$_POST['l'] :(isset($_GET['l'])?$_GET['l']  :null));
    	 $q = (isset($_POST['q']) ?$_POST['q'] :(isset($_GET['q'])?$_GET['q']  :null));
    	 $p = (isset($_POST['p']) ?$_POST['p'] :(isset($_GET['p'])?$_GET['p']  :null));
     
    	//Traitements du panier
    	if($id != null){
    		// Ajouter un nouvel article
     
    		if ( isset ( $_GET['action'] ) ){
    			$_SESSION['bag'][$id]['id']  = $id;
    			$_SESSION['bag'][$id]['l']   = $l;
    			$_SESSION['bag'][$id]['q']   = $q;
    			$_SESSION['bag'][$id]['p']   = $p;	
     
    		//vider le panier
    		}elseif ( isset ( $_GET['vider'] ) ){
    			unset($_SESSION['bag']); 	
     
    		//Supprimer un article du panier
    		}elseif ( isset ( $_GET['delete'] ) ){ 		
    			if(isset($_GET['id'])){
    				$id = $_GET['id']; //reference du produit a retirer
    				unset($_SESSION['bag'][$id]);				
     
    				/*echo "<pre>";
    				print_r( $_SESSION['bag'] );
    				echo "</pre>";
    				die();*/
    			}	
     
    		//Modifier la quantité achetée + TRANSACTION
    		}elseif ( isset ( $_GET['q'] ) && isset ( $_GET['modify'] ) ){		
    			$q = $_GET['q'];
    			$_SESSION['bag'][$_GET['id']]['q'] = $q;
     
    			// traitement SQL dans un bloc try catch
    			try {
    				// démarrer la transaction
    				$conn->beginTransaction();
     
    				// mettre à jour stock
    				$update = $conn->prepare("UPDATE detail SET det_quantite = ".$q." WHERE art_id = ".$id." && com_id = '1' ");					
    				$update->execute();	
     
    				// mettre à jour stock
    				$update2 = $conn->prepare("UPDATE article SET art_stock = art_stock - ".$q." WHERE art_id = ".$id." ");					
    				$update2->execute();	
     
    				/*echo "<pre>";
    				print_r($update);
    				echo "</pre>";
    				//die("here");*/
     
    				// vérifier le stock				
    				$squery = "SELECT art_stock from article WHERE art_id = " .$id;
    				$result = $conn->query($squery);
     
    				$row = $result->fetch();
    				if ($row['art_stock'] < 0){
    				// stock insuffisant : rollBack (ajout commande et mise à jour du stock)
    					$conn->rollBack();
    					$conn = null;
    					// vider panier
    					//unset($_SESSION['bag']);
    					die("<h1 style='color:red'; align='center'>Commande annulée : stock insuffisant !!!</h1>");
     
    				}					
    				//ici, tout est en ordre donc commit
    				$conn->commit();											
     
    			} catch(PDOException $ex){
    				// erreur catchée : rollBack
    				$conn->rollBack();
    				die("ATTENTION Commande NON enregistrée : " . $ex->getMessage());
    			}		
    		}	
    	}		
    ?>
     
    <body style="background-color:#F0F0F0 ;margin-top: 20px">
    	<div style="background-color:#FFFFFF;width:960px; margin:0 auto;padding: 10px">						
    		<table >
    			<ul align="right"; class='panier'>				
    				<li ><a href="?vider&amp;id=$id">Vider le panier</a></li>	
    			</ul>	
    			<h3 align="center">VOTRE PANIER</h3>		
    			<table align='center' border='1px' style='width:50%'>				
    				<tr >
    					<th width="50" >#</th>
    					<th width="100">Libellé</th>	
    					<th width="50" >Prix</th>
    					<th width="150">Quantité</th>					
    					<th width="150" >Action</th>
    				</tr>		
    				<tr align="center">							
    					<?php	
    						if (!isset($_SESSION['client']['cli_id'])){						
    							die("<h2 style='color:red';>Vous devez d'abord vous connecter !!!</h2>");
    						}
    						if(isset($_SESSION['bag'])){						
     
    							$total_panier = 0;
    							foreach	($_SESSION['bag'] as $key){							
    								$i = 0;
    								if($key != 0){ 											
    									echo "<tr>";
    									echo "<td align='center'>".$key['id']."</td>";
    									echo "<td align='center'>".$key['l']."</td>";
    									echo "<td align='center'>".$key['p']."</td>";
    						?> 
    								<form >		
    									<a href="?modify&amp;id=<?php echo $key['id']?>&amp;q=<?php echo $key['q']; ?>"></a>
    									<td align='center'>
    										<input  type="text" name="q" size="5" value="<?php echo $key['q'] ?>"/>	
     
    										<input type="hidden" name="id" value="<?php echo $key['id'] ?>"/>
    										<input type="submit" name="modify" value="Modifier"/>
    									</td>									
    								</form>	
     
    								<td align='center'; size="5"><a  href="?delete&amp;id=<?php echo $key['id'] ?>">Delete</a></td>
     
     
     
    						<?php
    									echo "</tr>";
    									// Calcule le prix total du panier 
    									$total_panier += $key['p'] *  $key['q'];											
    									$i++;
     
    									// Calcule le prix TTC du panier 
    									$select = $conn->query("SELECT art_tva FROM article");
    									$s = $select->fetch(PDO::FETCH_OBJ);									
    									$tva = $s->art_tva;
    									$ttc = $total_panier + ($total_panier * $tva / 100);
     
    								}																																		
    								echo "</tr>";		
     
    							}
     
    						?>	
    			</table>
    		</table><br/>	
     
    		<table align='center' border='1px' style='width:50%'>	
    			<tr >
    			<?php	
     
     
    					// Affiche le prix total du panier
    					echo "<th >Total:<br/>";  													
    					echo "$total_panier Euros</th>";										
    					// Affiche le total TTC du panier
    					echo "<th >TTC:<br/>"; 	
    					echo "$ttc Euros</th>"; 										
    				}else{ 
    					// Message si le panier est vide
    					die ('Votre panier est vide'); 
     
    				}				
    			?>			
    			</tr>
    		</table>
     
    		<ul align="right"; class='panier'>				
    			<li ><a href="my_Account.php">Acheter</a></li>			
    			<?php	
     
    			if(isset($_SESSION['bag'])){												
    				foreach ($_SESSION['bag'] as $idart){
    					if($idart != 0){ 											
    						/*echo "<br/><br/>";
    						echo $idart['id']."<br/>";
    						echo $idart['l']."<br/>";
    						echo $idart['p']."<br/>";
    							
    						/*echo "<pre>";
    						print_r($idart);
    						echo "</pre>";	*/										
    					}
    				}					
    				// créer la commande									
    				$insert = $conn->prepare("INSERT INTO detail (art_id,com_id,det_prix,det_quantite) VALUES(".$idart['id'].", '2', ".$total_panier.", ".$idart['q'].")");	
    				$insert->execute();			
    					/*echo "<pre>";
    					print_r($insert);
    					echo "</pre>";		
    					die("here");*/
    			}						
    			?>
     
    		</ul>	
    	</div>
    </body>
    base de donnée

    Nom : Sans titre.jpg
Affichages : 149
Taille : 28,1 Ko

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Par défaut re
    ERREUR QU IL ME DONNE SUR LE SITE AVANT MEME LE CLIC SUR ACHETER

    Nom : Sans titre2.png
Affichages : 191
Taille : 29,8 Ko

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    A quoi correspond le 2 que tu as mis manuellement dans la requête ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Par défaut
    une erreur c'est un L

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Par défaut re
    Citation Envoyé par sabotage Voir le message
    A quoi correspond le 2 que tu as mis manuellement dans la requête ?
    jai corriger la requête et elle fonctionne mais mon problème maintenant c'est que quand je veux commande 2x le meme article il pose problème car il créer 2 ligne avec le même id article et quantité 1 et il me donne erreur donc la 2eme ligne est pas enregistré il soit normalement me donner 1 ligne avec le article et quantité 2 mais j y arrive pas

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    et il me donne erreur
    laquelle ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Par défaut re
    Citation Envoyé par sabotage Voir le message
    laquelle ?
    Nom : Sans titre2.png
Affichages : 160
Taille : 42,2 Ko

    Nom : 3.png
Affichages : 146
Taille : 9,1 Ko

    j'ai choisi 2 en quantité mais dans la base de données j'ai que 1 lignes

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux utiliser ON DUPLICATE KEY UPDATE pour faire un UPDATE au lieu d'un INSERT quand la clef existe déjà.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Par défaut re
    Citation Envoyé par sabotage Voir le message
    Tu peux utiliser ON DUPLICATE KEY UPDATE pour faire un UPDATE au lieu d'un INSERT quand la clef existe déjà.
    TU sais me montrer avec mon code stp car je comprend pas tres bien se que tu veux me dire

    merci

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne pense pas qu'en 6 minutes tu aies beaucoup cherché ...
    https://dev.mysql.com/doc/refman/5.7...duplicate.html
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Apache, Serveur PHP, MySQL besoin d'aide.
    Par Marion8919 dans le forum Langage
    Réponses: 1
    Dernier message: 06/02/2015, 14h12
  2. [php/Mysql] besoin d'aide
    Par Alex35 dans le forum Outils
    Réponses: 15
    Dernier message: 09/06/2006, 17h14
  3. Windows 2003 server et php mysql besoin d'aide ^^
    Par iceje dans le forum Windows Serveur
    Réponses: 47
    Dernier message: 25/03/2006, 09h19
  4. [PHP-JS] Liste déroulante + Javascript + Php et Mysql : Besoin d'aide
    Par vampyrx dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/03/2006, 01h40
  5. [PHP-JS] besoin d'aide pour menu déroulant avec lien
    Par Damarus dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 18h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo