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 :

php/mysqli UPDATE avec jointure [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Par défaut php/mysqli UPDATE avec jointure
    Bonjour,

    je voudrais réaliser un UPDATE avec cette requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $q="UPDATE pages, pages_tag 
    SET pages.user_id=?
    ,pages.cat_p_id=?
    ,pages.status=?
    ,pages.title=?
    ,pages.summary=?
    ,pages.ingredient=?
    ,pages.recipe=?
    ,pages.tips=?
    ,pages.filename=?
    , pages_tag.tag_id=? 
    WHERE pages.page_id=$page_id 
    AND pages.page_id = pages_tag.page_id";
    La requete fonctionne si $tag reçoit une seul valeur de $_POST.
    Mais, elle peut parfois avoir plusieurs valeurs car elles proviennent d'un checkbox.

    Je ne suis pas varaiment sur que ce soit le bon type de requete pour ce que je veux obtenir.

    Je pensais à MERGE.

    J'ai aussi essayé avec deux query successivent

    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
    "
     
    $q = UPDATE pages
    SET pages.user_id=?
    ,pages.cat_p_id=?
    ,pages.status=?
    ,pages.title=?
    ,pages.summary=?
    ,pages.ingredient=?
    ,pages.recipe=?
    ,pages.tips=?
    ,pages.filename=?
    WHERE pages.page_id=$page_id "
    ;
     
    $q .="UPDATE pages_tag 
    SET  pages_tagtag_id =?  
    WHERE pages_tag.pages_id = $page_id";
    Mais avec cette requete préparé, je n'arrivais pas à récupérer le résultat des deux query.

    Merci d'avance pour un conseil ou une piste.

    Cordialement

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La requete fonctionne si $tag reçoit une seul valeur de $_POST.
    A quoi correspond $tag ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Par défaut
    bonjour Sabotage,


    $tag est un array qui peut contenir une ou plusieurs valeurs au maximum 5.
    c'est comme un tag mais limité à 5 possibilités d'association. Voici un extrait de mon formulaire où est le check box.
    et la table jointure `pages_tag`avec les index.

    On a la paire (page_id,tag_id) à updater sur `pages_tag ` lorsque je veux mettre à jours le formulaire page dont vous avez un extrait.

    Si une valeur est cochée, je peux la changer est c'est OK.
    Mais si je veux changer en cochant trois valeurs (alors que précedement il n'y avait qu'une valeur) dans ce cas là je n'aurais de retour qu'une valeur, la premiere cochée.

    Par contre si je part d' un checked de deux boutons, et que je veux updater à 5 checked alors j'aurais 5 fois la premiere valeur checked.

    Pour l'instant ce Update en jointure n'est peut être pas la meilleures solutions.

    Merci d'avance pour une idée ou plus peut être

    Nom : tag_checked.png
Affichages : 282
Taille : 24,4 Ko

    Nom : table_pages_tag.png
Affichages : 307
Taille : 42,2 Ko

  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
    Par défaut
    Il faut
    - supprimer toutes les lignes correspondant à la page
    - faire une requête d'insertion pour chaque tag coché (en fait un seul requête dans une boucle)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Par défaut
    Merci pour la réponse

    je comprends bien la solution mais j'aimerais mettre à jours toutes les données de la page en une seule fois, c'est pourquoi je fais une requête Update jointe sur deux tables.

    Sinon, est il possible de faire deux requêtes l'une après l'autre avec une forme preparée ? cf ma deuxième solution. Mais pour l'instant j'ai avec celle ci une erreur

    merci
    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
    "
     
    $q = UPDATE pages
    SET pages.user_id=?
    ,pages.cat_p_id=?
    ,pages.status=?
    ,pages.title=?
    ,pages.summary=?
    ,pages.ingredient=?
    ,pages.recipe=?
    ,pages.tips=?
    ,pages.filename=?
    WHERE pages.page_id=$page_id "
    ;
     
    $q .="UPDATE pages_tag 
    SET  pages_tag.tag_id =?  
    WHERE pages_tag.pages_id = $page_id";
    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
     
    if(empty($update_page_errors)){
    			//Update
    			/*
    					$q="UPDATE pages, pages_tag SET pages.user_id=?,pages.cat_p_id=?,pages.status=?,pages.title=?,pages.summary=?,pages.ingredient=?,pages.recipe=?,pages.tips=?,pages.filename=?, pages_tag.tag_id=? WHERE pages.page_id=$page_id AND pages.page_id = pages_tag.page_id";
    			*/		
    				$q ="UPDATE pages SET 
    				pages.user_id=?
    				,pages.cat_p_id=?
    				,pages.status=?
    				,pages.title=?
    				,pages.summary=?
    				,pages.ingredient=?
    				,pages.recipe=?
    				,pages.tips=?
    				,pages.filename=? 
    				WHERE pages.page_id=$page_id ";
     
     
    				$q .="UPDATE pages_tag 
    				SET pages_tag.tag_id=? 
    				WHERE pages_tag.page_id=$page_id ";
     
    				$stmt = mysqli_prepare($dbc,$q);
     
    												mysqli_stmt_bind_param($stmt, 'iisssssssi',$_POST['user_id'],$_POST['category'],$status, $title,$summary,$ingredient,$recipe,$tips,$filename,$tag);
    												$allowed='<div><p><span><br><a><img><h1><h2><h3><h4><ul><ol><li><blockquote>';
    												$status= strip_tags($_POST['status']);
    												$title= strip_tags($_POST['title']);
    												$summary= strip_tags($_POST['summary'], $allowed);
    												$ingredient= strip_tags($_POST['ingredient'], $allowed);
    												$recipe= strip_tags($_POST['recipe'], $allowed);
    												$tips= strip_tags($_POST['tips'], $allowed);
    												$filename = strip_tags($_POST['filename']);
    												$tag = implode(',', $_POST['tag']);
    																						//mysqli_stmt_execute($stmt);
     
    												$result = mysqli_stmt_execute($stmt);
     
    												if ( $result === false ) {
    												    printf("Error: %s.\n", mysqli_stmt_error($stmt));
     
    												}else { 
     
     
    												if(mysqli_stmt_affected_rows($stmt) >= 1) {
    													mysqli_stmt_close($stmt);
    													$_POST = array();
    													echo'<div class="alert alert-success"><h3>Votre page à bien été modifié.</h3></div>';
     
    												}
    											}
    							}//END if array existe update
    		}
    et voici l'erreur :
    An error occurred in script '/Applications/MAMP/htdocs/originalr/html/author_list_page_update.php' on line 155:
    mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given


    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
     et voilà le problème ou l'on voit que 
    [q] => UPDATE pages SET 
     
    				pages.user_id=?
     
    				,pages.cat_p_id=?
     
    				,pages.status=?
     
    				,pages.title=?
     
    				,pages.summary=?
     
    				,pages.ingredient=?
     
    				,pages.recipe=?
     
    				,pages.tips=?
     
    				,pages.filename=? 
     
    				WHERE pages.page_id=183 UPDATE pages_tag 
     
    				SET pages_tag.tag_id=? 
     
    				WHERE pages_tag.page_id=183

  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
    Par défaut
    Une requête préparée est faite pour executer plusieurs fois la même requête avec des valeurs différentes.
    Je ne vois pas pourquoi tu vas inventer des trucs impossibles.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. UPDATE avec jointure
    Par warning dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 13/12/2007, 10h35
  2. Requête UPDATE avec jointure
    Par petburn dans le forum SQL
    Réponses: 7
    Dernier message: 30/07/2007, 14h22
  3. [UPDATE] avec jointure sur une requete
    Par userB dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/07/2007, 16h18
  4. Requete update avec jointure d'une requête
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 28/05/2007, 20h31
  5. [PL/SQL] update avec jointure
    Par Fox_magic dans le forum Oracle
    Réponses: 6
    Dernier message: 09/12/2004, 12h19

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