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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    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 confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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
    Membre confirmé
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    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
    Membre confirmé
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    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