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 :

Mise à jour de quantités dans une table


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Points : 34
    Points
    34
    Par défaut Mise à jour de quantités dans une table
    Bonjour,
    Je réalise un petit module de gestion de documentation.

    J'ai deux tables :
    Code sql : 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
    `documentation` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `code_publication_doc` varchar(50) NOT NULL,
      `description` varchar(100) NOT NULL,
      `image` varchar(300) NOT NULL,
      `version_numerique` varchar(300) NOT NULL,
      `categorie_publication` int(11) NOT NULL,
      `division` varchar(50) NOT NULL,
      `qte_stock` int(11) NOT NULL,
      `qte_demande` int(11) NOT NULL,
      `date_maj` date NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
     
    `demande_publications` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `code_publication` varchar(50) NOT NULL,
      `id_prospect` int(11) NOT NULL,
      `date_maj` date NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

    Je souhaite grâce à mon script ci-dessous permettre à l'utilisateur de mettre à jour la quantité en stock en soustrayant la quantité demandée pour chaque documentation demandée. Voici ma requête que j'ai testé dans ma base sql sous cette forme, cela fonctionne :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE documentation SET qte_stock=qte_stock-4 WHERE code_publication_doc = 0002

    Par contre dans mon code, cela ne fonctionne pas, il ne met rien à jour, je n'arrive pas à récupérer ma valeur $code_publication je pense. J'envoie dans l'url les données suivantes : delete_demandedoc.php?id=31&code_publication_doc=0002&qte_stock=-2&qte_demande=5&code_publication=0002.

    J'ai essayé de passer par des variables session, ça ne fonctionne pas.
    Merci beaucoup d'avance pour votre éclairage.

    Voici le code de ma page delete_demandedoc.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
    session_start(); 
    if (!$_SESSION['admin'])
    		{
    echo "<SCRIPT LANGUAGE=\"JavaScript\">document.location.href=\"default.htm\"</SCRIPT>";
    		}
     
    $code_publication = $_SESSION['code_publication'];
     
        require 'database.php';
     
        if(!empty($_GET['id'])) 
        {
            $id = checkInput($_GET['id']);
        }
     
        if(!empty($_POST)) 
        {
            $id = checkInput($_POST['id']);
            $db = Database::connect();
     
    		$statement = $db->prepare("DELETE FROM demande_publications WHERE id = ?");
            $statement->execute(array($id));
     
     
     
    		echo $code_publication;
     
     
    		//$statement2 = $db->prepare('UPDATE documentation SET qte_stock=qte_stock-qte_demande WHERE code_publication_doc = "'.$_SESSION['code_publication'].'"');
    		$statement2 = $db->prepare('UPDATE documentation SET qte_stock=qte_stock-qte_demande WHERE code_publication_doc = $code_publication');
    		$statement2->execute(array($id));
     
     
     
     
     
            Database::disconnect();
            header("Location: Demandes_doc.php"); 
        }
     
        function checkInput($data) 
        {
          $data = trim($data);
          $data = stripslashes($data);
          $data = htmlspecialchars($data);
          return $data;
        }
    ?>
     
    <!DOCTYPE html>
    <html>
        <head>
            <title>Documentation</title>
            <meta charset="utf-8"/>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
            <link href='http://fonts.googleapis.com/css?family=Holtwood+One+SC' rel='stylesheet' type='text/css'>
            <link rel="stylesheet" href="css/styles.css">
        </head>
     
        <body>
            <h1 class="text-logo"><span class="glyphicon glyphicon-book"></span> Documentation <span class="glyphicon glyphicon-book"></span></h1>
    		<hr style="height: 3px; color: #01c0d2; width: 50%; border: 1px dashed #01c0d2;">
             <div class="container admin">
                <div class="row">
                    <h1><strong>Supprimer une publication </strong></h1>
                    <br>
                    <form class="form" action="delete_demandedoc.php" role="form" method="post">
                        <input type="hidden" name="id" value="<?php echo $id;?>"/>
    					<input type="hidden" name="code_publication" value="<?php echo $code_publication;?>"/>
                        <p class="alert alert-warning">Etes vous sur de vouloir supprimer ?</p>
                        <div class="form-actions">
                          <button type="submit" class="btn btn-warning">Oui</button>
                          <a class="btn btn-default" href="index_biologie.php">Non</a>
                        </div>
                    </form>
                </div>
            </div>   
        </body>
    </html>

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par crastinette Voir le message
    je n'arrive pas à récupérer ma valeur $code_publication je pense.
    il ne faut pas penser, il faut tester
    affichez le contenu des variables pour vérifier qu'elles contiennent bien ce que vous souhaitez.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ici, tu as un paramètre passé directement dans la requête (qui devrait être passé dans l'exécution), ainsi qu'un paramètre dans l'exécution et pas de marqueur correspondant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $statement2 = $db->prepare('UPDATE documentation SET qte_stock=qte_stock-qte_demande WHERE code_publication_doc = $code_publication');
    $statement2->execute(array($id));
    Est-ce que les erreurs PDO sont activées ? Tu peux le faire directement dans la construction de la connexion, ou juste après par $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    Bonjour et merci pour vos réponses.
    Désolé dans le retard de réponse.

    Voici mon code qui fonctionne :

    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
    84
    85
    86
     
    <?php
    session_start();
    if (!$_SESSION['admin'])
            {
    echo "<SCRIPT LANGUAGE=\"JavaScript\">document.location.href=\"default.htm\"</SCRIPT>";
            }
     
        require 'database.php';
     
        if(!empty($_GET['id']))
        {
            $id = checkInput($_GET['id']);
    		$qte_stock = checkInput($_GET['qte_stock']);
    		$stock_a_jour = checkInput($_GET['stock_a_jour']);
    		$qte_demande = checkInput($_GET['qte_demande']);
    		$code_publication = checkInput($_GET['code_publication']);
    		$code_publication_doc = checkInput($_GET['code_publication_doc']);
     
        }
     
        if(!empty($_POST))
        {
            $id = checkInput($_POST['id']);
    		$qte_stock = checkInput($_POST['qte_stock']);
    		$stock_a_jour = checkInput($_POST['stock_a_jour']);
    		$qte_demande = checkInput($_POST['qte_demande']);
    		$code_publication = checkInput($_POST['code_publication']);
    		$code_publication_doc = checkInput($_POST['code_publication_doc']);
     
     
    		$db = Database::connect();
     
     
    		$statement = $db->prepare("DELETE FROM demande_publications WHERE id = ?");
            $statement->execute(array($id));
     
    		$statement2 = $db->prepare("documentation SET qte_stock = '$stock_a_jour' WHERE code_publication_doc = '$code_publication'");
            $statement2->execute(array($id));
     
            Database::disconnect();
     
            header("Location: Demandes_doc.php");
        }
     
        function checkInput($data)
        {
          $data = trim($data);
          $data = stripslashes($data);
          $data = htmlspecialchars($data);
          return $data;
        }
    ?>
     
    <!DOCTYPE html>
    <html>
        <head>
            <title>Documentation</title>
            <meta charset="utf-8"/>
        </head>
     
        <body>
            <h1 class="text-logo"><span class="glyphicon glyphicon-book"></span> Documentation <span class="glyphicon glyphicon-book"></span></h1>
            <hr style="height: 3px; color: #01c0d2; width: 50%; border: 1px dashed #01c0d2;">
             <div class="container admin">
                <div class="row">
                    <h1><strong>Supprimer une publication </strong></h1>
                    <br>
                    <form class="form" action="delete_demandedoc.php" role="form" method="post">
                        <input type="hidden" name="id" value="<?php echo $id;?>"/>
    					<input type="hidden" name="qte_stock" value="<?php echo $qte_stock;?>"/>
    					<input type="hidden" name="stock_a_jour" value="<?php echo $stock_a_jour;?>"/>
    					<input type="hidden" name="qte_demande" value="<?php echo $qte_demande;?>"/>
    					<input type="hidden" name="code_publication" value="<?php echo $code_publication;?>"/>
    					<input type="hidden" name="code_publication_doc" value="<?php echo $code_publication_doc;?>"/>
     
                        <p class="alert alert-warning">Etes vous sur de vouloir supprimer ?</p>
                        <div class="form-actions">
                          <button type="submit" class="btn btn-warning">Oui</button>
                          <a class="btn btn-default" href="index_biologie.php">Non</a>
                        </div>
                    </form>
                </div>
            </div>  
        </body>
    </html>

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    if (!$_SESSION['admin'])
            {
    echo "<SCRIPT LANGUAGE=\"JavaScript\">document.location.href=\"default.htm\"</SCRIPT>";
            }
    Non.
    Il faut faire la redirection en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    if (!$_SESSION['admin'])
    {
            header('Location:/default.htm');
            exit; // IMPORTANT (arrête le script en cours)
    }
    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$statement2 = $db->prepare("documentation SET qte_stock = '$stock_a_jour' WHERE code_publication_doc = '$code_publication'");
            $statement2->execute(array($id));
    ATTENTION ! Ce n'est pas une requête CORRECTEMENT préparée !
    D'ailleurs... je doute qu'elle fonctionne !
    • pas de UPDATE (ou DELETE) ??
    • à quoi sert $id ??

    A mon avis, ça devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$statement2 = $db->prepare("UPDATE documentation SET qte_stock = ? WHERE code_publication_doc = ?");
            $statement2->execute(array($stock_a_jour, $code_publication));
    3-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        function checkInput($data)
        {
          $data = trim($data);
          $data = stripslashes($data);
          $data = htmlspecialchars($data);
          return $data;
        }
    Enfin (?) :
    • on N'applique PAS htmlspecialchars() aux données qu'on enregistre en BDD.
    • On applique htmlspecialchars() au moment de l'AFFICHAGE.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    C'est un code que j'avais reçu au moment d'une formation pro mais je vais étudier toutes tes remarques avec beaucoup d'intérêt. Merci pour votre aide.
    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour de données dans une table
    Par Sixers33 dans le forum IHM
    Réponses: 20
    Dernier message: 03/10/2008, 15h59
  2. Mise à jour de données dans une table
    Par Stargate SG1 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/04/2008, 18h38
  3. Réponses: 11
    Dernier message: 08/01/2008, 11h36
  4. Réponses: 6
    Dernier message: 07/02/2006, 14h44
  5. Vue non mise à jour après modification d'une table
    Par cybernet35 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2006, 13h54

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