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 :

Transactions et validation automatique (autocommit)


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Par défaut Transactions et validation automatique (autocommit)
    bonjour je suis un etudiant j ai un devoir en mysql&php ; je doit utilise un autocommit mais je sais pas comment faire merci pour votre idee a l avance


    C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\Projet_php\modele\fiche.php
    Code PHP : 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
    <?php
     
    	function get_infos_film($id_film)
    	{
    		global $bdd;
    		$requete = $bdd->prepare('SELECT * FROM films WHERE id_film = ?');
    		$requete->execute(array($id_film));
    		$reponse = $requete->fetch();
    		$requete->closecursor();
    		return $reponse;
    	}
     
    	function get_seances_film($id_film)
    	{
    		global $bdd;
    		$sauvegarde = array();
    		$i = 0;
    		$requete = $bdd->prepare('SELECT * FROM seances WHERE id_film = ?');
    		$requete->execute(array($id_film));
    		while($donnees = $requete->fetch())
    		{
    			$sauvegarde[$i] = $donnees;
    			$i++;
    		}
    		$requete->closecursor();
    		$sauvegarde['taille'] = $i;
     
    		return $sauvegarde;
    	}
     
    	function deja_inscrit($id_seance, $login)
    	{
    		global $bdd;
    		$requete = $bdd->prepare('SELECT COUNT(id_seance) as rep FROM inscriptions WHERE id_seance = ? AND login = ?');
    		$requete->execute(array($id_seance, $login));
    		$reponse = $requete->fetch();
    		$requete->closecursor();
     
    		return $reponse['rep'] == 1;
    	}
     
    	function seance_pleine($id_seance)
    	{
    		global $bdd;
     
    		$requete = $bdd->query('SELECT COUNT(login) as rep FROM inscriptions WHERE id_seance = ' . $id_seance);
    		$nb_inscriptions = $requete->fetch();
    		$requete->closecursor();
     
    		$requete = $bdd->query('SELECT max FROM seances WHERE id_seance = ' . $id_seance);
    		$nb_max_inscriptions = $requete->fetch();
    		$requete->closecursor();
     
    		return $nb_inscriptions['rep'] == $nb_max_inscriptions['max'];
    	}
     
    	function inscrire_a_une_seance($id_seance, $login)
    	{
    		global $bdd;
    		$bdd->exec('INSERT INTO inscriptions(id_seance, login) VALUES(' . $id_seance . ',\'' . $login . '\')');
    	}
     
    	function desinscrire_d_une_seance($id_seance, $login)
    	{
    		global $bdd;
    		$bdd->exec('DELETE FROM inscriptions WHERE id_seance = ' . $id_seance . ' AND login = \'' . $login . '\'');
    	}
     
    	function supprimer_seance($id_seance)
    	{
    		global $bdd;
    		$requete = $bdd->prepare('SELECT COUNT(id_seance) as rep FROM inscriptions WHERE id_seance = ?');
    		$requete->execute(array($id_seance));
    		$reponse = $requete->fetch();
    		$requete->closecursor();
     
    		if($reponse['rep'] == 0)
    		{
    			$bdd->exec('DELETE FROM seances WHERE id_seance = ' . $id_seance);
    			return true;
    		}
    		else return false;
    	}
    C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\Projet_php\fonctions_html\fiche.php

    Code PHP : 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
    <?php
    	include_once("modele/fiche.php");
    	function afficher_seances($id_film)
    	{
    		$liste_seance = get_seances_film($id_film);
    		echo '<table STYLE="border:none;width:100%;">';
    		echo '<tr><td>Date</td><td>Heure</td></tr>';
    		for($i=0;$i<$liste_seance['taille'];$i++)
    		{
    			echo '<form method="post" action="index.php?p=fiche&id=' . $_GET['id'] . '">';
    				echo '<tr>';
    					echo '<input type="hidden" name="seance" value="' . $liste_seance[$i]['id_seance'] . '" />';
    					echo '<td>' . $liste_seance[$i]['date'] . '</td>';
    					echo '<td>' . $liste_seance[$i]['heure'] . '</td>';
    					if(!deja_inscrit($liste_seance[$i]['id_seance'], $_SESSION['login'])) echo '<td><input type="submit" name="action" value="S\'inscrire" /></td>';
    					if(deja_inscrit($liste_seance[$i]['id_seance'], $_SESSION['login'])) echo '<td><input type="submit" name="action" value="Se d&eacute;sinscrire" /></td>';
    					if(seance_pleine($liste_seance[$i]['id_seance'])) echo '<td><strong><font color="red">Pleins !</font></strong></td>';
    					if(isset($_SESSION['connecter']) AND $_SESSION['connecter'] AND isset($_SESSION['user']) AND $_SESSION['user'] == 'admin')
    					echo '<td><input STYLE="color:red;width:100px;" type="submit" name="action" value="Supprimer" /></td>';
    				echo '</tr>';
    			echo '</form>';
    		}
    		echo '</table>';
    	}



    C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\Projet_php\controleur\fiche.php

    Code PHP : 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
    <?php
    	include_once('modele/fiche.php');
    	include_once('fonctions_html/fiche.php');
    	if(isset($_POST['action']) AND preg_match("#S'inscrire|Se désinscrire|Supprimer#", $_POST['action']))
    	{
    		switch($_POST['action'])
    		{
    			case "S'inscrire" :
    				if(!deja_inscrit($_POST['seance'], $_SESSION['login']))
    				{
    					if(!seance_pleine($_POST['seance'])) inscrire_a_une_seance($_POST['seance'], $_SESSION['login']);
    				}
    				else header('Location:index.php?p=hacker');
    				break;
    			case "Se désinscrire" :
    				if(deja_inscrit($_POST['seance'], $_SESSION['login'])) desinscrire_d_une_seance($_POST['seance'], $_SESSION['login']);
    				else header('Location:index.php?p=hacker');
    				break;
    			case "Supprimer" : 
    				if(!supprimer_seance($_POST['seance'])) $erreur = 'Il y a des personnes inscrites &agrave; à cette s&eacute;ance !';
    				break;
    			default:
    				header('Location:index.php?p=accueil');
    				break;
    		}
    	}
    	if(isset($_GET['id'])) $infos = get_infos_film($_GET['id']);
    	if(!(empty($infos)))
    	{
    		$titre_film = $infos['titre'];
    		$image = $infos['image'];
    		$genre = $infos['genre'];
    		$synopsis = $infos['synopsis'];
    	}
    	include_once('vue/fiche.php');



    le devoir c'est de change la partie en rouge et la rendre en mode transactionnelle en doit utilise beginTransaction ....
    mais je sais pas comment rendre cette function dans ce mode
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 668
    Par défaut
    de quelle partie en rouge parles-tu ?

    pour en savoir plus sur les transactions regarde là :
    http://sqlpro.developpez.com/cours/sqlaz/techniques/

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Par défaut RE
    VOILA LES DEUX PARTIE:

    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
    function inscrire_a_une_seance($id_seance, $login)
    	{
    		global $bdd;
    		$bdd->exec('INSERT INTO inscriptions(id_seance, login) VALUES(' . $id_seance . ',\'' . $login . '\')');
    	}
     function seance_pleine($id_seance)
    	{
    		global $bdd;
     
    		$requete = $bdd->query('SELECT COUNT(login) as rep FROM inscriptions WHERE id_seance = ' . $id_seance);
    		$nb_inscriptions = $requete->fetch();
    		$requete->closecursor();
     
    		$requete = $bdd->query('SELECT max FROM seances WHERE id_seance = ' . $id_seance);
    		$nb_max_inscriptions = $requete->fetch();
    		$requete->closecursor();
     
    		return $nb_inscriptions['rep'] == $nb_max_inscriptions['max'];
    	}

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Par défaut
    ma soulution que j ai reussi a faire c est cela en gardant la function inscrit_seance_plein
    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
    function inscrire_a_une_seance($id_seance, $login)
        {
            global $bdd;
            $bdd->beginTransaction();
            $bdd->exec('INSERT INTO inscriptions(id_seance, login) VALUES(' . $id_seance . ',\'' . $login . '\')');
            $requete = $bdd->query('SELECT COUNT(login) as rep FROM inscriptions WHERE id_seance = ' . $id_seance);
            $nb_inscriptions = $requete->fetch();
            $requete->closecursor();
            $requete = $bdd->query('SELECT max FROM seances WHERE id_seance = ' . $id_seance);
            $nb_max_inscriptions = $requete->fetch();
            $requete->closecursor();
    			If ($nb_inscriptions['rep'] <= $nb_max_inscriptions['max'])
                {         
                $bdd->commit(); echo(" inscrit a la séance");
                }
                else
    			{
    			$bdd->rollBack();                 
    			}
        }


    Vous pensez quoi de cette solution Mr Mathieu ??
    vu que j ai la fonction inscrit_seance_pleine en relation avec autre page php .

Discussions similaires

  1. valider automatiquement le formulaire
    Par Mike35 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/09/2006, 11h18
  2. Validation automatique d'une fenêtre non WinDev
    Par ahmet57 dans le forum WinDev
    Réponses: 4
    Dernier message: 18/08/2006, 08h35
  3. [DTD] pas de validation automatique ?
    Par Emplyst dans le forum Valider
    Réponses: 2
    Dernier message: 23/07/2006, 23h25
  4. [Javascript] validation automatique à partir d'une liste
    Par lau_the_raptor dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/06/2006, 07h05
  5. Validation automatique de formulaire (sans clic)
    Par budiste dans le forum Langage
    Réponses: 6
    Dernier message: 13/04/2006, 16h31

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