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 :

PDO UPDATE pour modifier un champ à partir d'autres champs de la table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut PDO UPDATE pour modifier un champ à partir d'autres champs de la table
    Bonjour,

    Je veux modifier un champs d'une table mysql en utilisant d'autres champs de cette table

    L'idée c'est de faire quelque chose comme ça:

    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
    <?php
    // Connexion MYSQL
    // ---------------
    try
    {
    $chaine_connexion='mysql:host=localhost;dbname=cemkay';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }				
     
    $sql = 'SELECT id_photo, affichage, disponibilite FROM liste_image';
    try {
    	$sql1 = $connexion_bdd->prepare($sql);
    	$sql1->execute();
     
    	/* Lie par les numéros de colonnes */
    	$sql1->bindColumn(1, $id_photo);
    	$sql1->bindColumn(2, $affichage);
    	$sql1->bindColumn(3, $disponibilite);
     
    	/* Lie par les noms de colonnes */
     
    	 while ($row = $sql1->fetch(PDO::FETCH_BOUND)) {
    	$sql2 = "UPDATE liste_image SET nom_image=:nom_image";
    	// Prepare la requete
    	$sql2 = $connexion_bdd->prepare($sql2);
    	// Associer une valeur
    	$sql2->bindParam(':nom_image',  $id_photo . '-' . $affichage '-' . $disponibilite, PDO::PARAM_STR); 
    	// Execute la requete
    	$sql2->execute();
    	}
    }
    catch (PDOException $e) {
    print $e->getMessage();
    }
    ?>
    Le code ci dessus ne marche pas

    Parse error: syntax error, unexpected ''-'' (T_CONSTANT_ENCAPSED_STRING) in C:\wamp\www\cemkay\3_update.php on line 52
    Pouvez vous m aider?

    Cordialement

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

    avant de poster sur le forum,
    Commence par APPRENDRE à LIRE et COMPRENDRE les messages d'erreur.

    • Que dit le message ?
    • Quelle est la ligne 52 ?


    Ensuite, AFFICHE à l'écran les variables / requêtes / ... pour CONTROLER ce qu'elles contiennent.

    C'est la base du DEBOGAGE.


    Et si tu ne trouves toujours pas, alors LA SEULEMENT, tu peux venir poster sur le forum,
    en INDIQUANT bien quelle est la ligne incriminée.
    Dernière modification par Invité ; 10/02/2016 à 08h20.

  3. #3
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    ah oui modifications apportées

    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
     
    <!DOCTYPE html> <!--on declare au validator le langage utilisé: html5-->
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>
     
    	<div class="row">
    	<h1>Update un champs d une table</h1>
     
    <?php
    // Connexion MYSQL
    // ---------------
    try
    {
    $chaine_connexion='mysql:host=localhost;dbname=cemkay';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }				
     
    $sql1 = 'SELECT id_photo, affichage, disponibilite FROM liste_image';
    try {
    	$sql1 = $connexion_bdd->prepare($sql1);
    	$sql1->execute();
     
    	/* Lie par les numéros de colonnes */
    	$sql1->bindColumn(1, $id_photo);
    	$sql1->bindColumn(2, $affichage);
    	$sql1->bindColumn(3, $disponibilite);
     
    	/* Lie par les noms de colonnes */
     
    	 while ($row = $sql1->fetch(PDO::FETCH_BOUND)) {
    	$sql2 = "UPDATE liste_image SET nom_image=:nom_image";
    	// Prepare la requete
    	$sql2 = $connexion_bdd->prepare($sql2);
    	// Associer une valeur
    	$sql2->bindParam(':nom_image',  $id_photo . '-' . $affichage . '-' . $disponibilite, PDO::PARAM_STR); 
    	// Execute la requete
    	$sql2->execute();
    	}
    }
    catch (PDOException $e) {
    print $e->getMessage();
    }
    ?>			
     
    		</div>
    	</div>
     
     
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>
    </html>
    voici le message d erreur:
    Fatal error: Cannot pass parameter 2 by reference in C:\wamp\www\cemkay\3_update.php on line 52

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    L'update va en dehors de la boucle et c'est bindValue qu'il te faut puisque tu lie une valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sth_update = $connexion_bdd->prepare("UPDATE liste_image SET nom_image=:nom_image");
    while ($row = $sql1->fetch(PDO::FETCH_BOUND)) {
    	$sth_update->bindValue(':nom_image',  $id_photo . '-' . $affichage '-' . $disponibilite, PDO::PARAM_STR); 
    	$sth_update->execute();
    }
    Mais plus simplement en une ligne de SQL :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE liste_image SET nom_image = CONCAT(id_photo, '-', affichage, '-', disponibilite)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    comme ca?

    1) méthode avec while

    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
     
    <!DOCTYPE html> <!--on declare au validator le langage utilisé: html5-->
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>
     
    	<div class="row">
    	<h1>Update un champs d une table</h1>
     
    <?php
    // Connexion MYSQL
    // ---------------
    try
    {
    $chaine_connexion='mysql:host=localhost;dbname=cemkay';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }				
     
    $sql1 = 'SELECT id_photo, affichage, disponibilite FROM liste_image';
    try {
    	$sql1 = $connexion_bdd->prepare($sql1);
    	$sql1->execute();
     
    	/* Lie par les numéros de colonnes */
    	$sql1->bindColumn(1, $id_photo);
    	$sql1->bindColumn(2, $affichage);
    	$sql1->bindColumn(3, $disponibilite);
     
    	/* Lie par les noms de colonnes */
    	$sth_update = $connexion_bdd->prepare("UPDATE liste_image SET nom_image=:nom_image");
    	while ($row = $sql1->fetch(PDO::FETCH_BOUND)) {
    		$sth_update->bindValue(':nom_image',  $id_photo . '-' . $affichage . '-' . $disponibilite, PDO::PARAM_STR); 
    		$sth_update->execute();
    	}
    	}
     
    catch (PDOException $e) {
    print $e->getMessage();
    }
    ?>			
     
    		</div>
    	</div>
     
     
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>
    </html>
    pas de message d erreur
    le souci c 'est qu il affecte a chaque enregistrement la même valeur pour nom_image à savoir celle du dernier enregistrement (num 15): "15-non-oui"

    2) méthode avec uniquement update

    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
     
    <!DOCTYPE html> <!--on declare au validator le langage utilisé: html5-->
     
    <html lang="fr">
     
    <?php include("0-head.php"); ?>
     
    <body>
     
    <div class="container">	
     
    <?php include("0-menu.php"); ?>
     
    	<br>
    	<hr>
     
    	<div class="row">
    	<h1>Update un champs d une table</h1>
     
    <?php
    					// Connexion MYSQL
    					// ---------------
    					try
    					{
    						$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    						$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    						$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e)
    					{																		
    						$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    						exit($msg);
    					}				
     
    					//Preparer la requete
    					$sql1 = 'UPDATE liste_image SET nom_image = CONCAT(id_photo, '-', affichage, '-', disponibilite)';
    					$requete1 = $connexion_bdd ->prepare($sql1);
     
    					//Compiler et executer la requete
    					$requete1->execute();
    ?>			
     
    		</div>
    	</div>
     
     
    	<br>
    	<hr>
     
    <?php include("0-pied-de-page.php"); ?>
     
    </div>
     
    </body>
    </html>
    message d erreur:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0' at line 1' in C:\wamp\www\cemkay\3_update.php on line 40

  6. #6
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Attention a tes ouvertures de chaines :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql1 = "UPDATE liste_image SET nom_image = CONCAT(id_photo, '-', affichage, '-', disponibilite)";
    Pour le premier code, il manquerait un WHERE dans ton update, sinon evidemment il modifie toutes les lignes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    1) méthode avec while:

    En fait je veux qu il modifie toutes les lignes du champs nom_image mais de la façon suivante:
    id_photo[ligne1], '-', affichage[ligne1], '-', disponibilite[ligne1]
    id_photo[ligne2], '-', affichage[ligne2], '-', disponibilite[ligne2]
    id_photo[ligne3], '-', affichage[ligne3], '-', disponibilite[ligne3]
    ...
    Where? comment?

    2) méthode avec update: ça marche

    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
     
    <?php
    					// Connexion MYSQL
    					// ---------------
    					try
    					{
    						$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    						$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    						$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e)
    					{																		
    						$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    						exit($msg);
    					}				
     
    					//Preparer la requete
    					$sql1 = "UPDATE liste_image SET nom_image = CONCAT(id_photo, '-', affichage, '-', disponibilite)";
    					$requete1 = $connexion_bdd ->prepare($sql1);
    					//Associer des valeurs aux place holders
     
    					//Compiler et executer la requete
    					$requete1->execute();
     
    ?>

  8. #8
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    merci ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	/* Update*/
    	$sth_update = $connexion_bdd->prepare("UPDATE liste_image SET nom_image=:nom_image WHERE id_photo=:id_photo");
     
    	while ($row = $sql1->fetch(PDO::FETCH_BOUND)) {
    		$sth_update->bindValue(':id_photo', $id_photo, PDO::PARAM_STR);
    		$sth_update->bindValue(':nom_image',  $id_photo . '-' . $affichage . '-' . $disponibilite, PDO::PARAM_STR); 
    		$sth_update->execute();
    	}

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

Discussions similaires

  1. [AC-2007] Calcul d'un champ à partir d'autres champs
    Par scrouet dans le forum IHM
    Réponses: 1
    Dernier message: 07/03/2014, 17h32
  2. Afficher un champ à partir d'autre champ
    Par Invité dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/07/2013, 07h58
  3. Mise à jour automatique de champs à partir d'autres champs
    Par Heytabernak dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/10/2008, 14h56
  4. Réponses: 5
    Dernier message: 23/03/2007, 16h27
  5. Réponses: 2
    Dernier message: 08/05/2006, 12h22

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