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

Langage PHP Discussion :

Faire un UPDATE sur chaque $_POST


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Par défaut Faire un UPDATE sur chaque $_POST
    Bonsoir à tous,

    Mon problème est plus théorique que pratique, mais après des heures de recherche, je m'en remet à vous.

    J'ai la table suivante, qui contient les paramètres généraux de mon site :
    id | name | data
    1 | title | Mon titre
    2 | subtitle | Mon sous-titre
    3 | front_lang | fr_FR
    etc

    Je souhaite permettre l'édition de ces paramètres via un formulaire dans mon back-office, le voici :
    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
     
    <?php echo savePreferences(); ?>
    <form id="preferences_form" action="<?php echo HERE; ?>" method="post">
    	<fieldset>
    		<legend><?php echo SITE_PARAMS; ?></legend>
    		<label for="title"><?php echo SITE_TITLE; ?></label>
    		<input type="text" name="title" id="title" value="<?php echo getSiteParam('title'); ?>"/>
    		<label for="title"><?php echo SITE_SUBTITlE; ?></label>
    		<input type="text" name="subtitle" id="subtitle" value="<?php echo getSiteParam('subtitle'); ?>"/>
    	</fieldset>
    	<fieldset>
    		<legend><?php echo SITE_LANGUAGES_TITLE; ?></legend>
    		<label for="front_language"><?php echo SITE_FRONT_LANGUAGE; ?></label>
    		<select name="front_language" id="front_language"><?php getLanguages(getSiteParam('front_lang')); ?></select>
    		<label for="back_language"><?php echo SITE_BACK_LANGUAGE; ?></label>
    		<select name="back_language" id="back_language"><?php getLanguages(getSiteParam('back_lang')); ?></select>
    	</fieldset>
    	<input type="submit" id="submit_preferences" name="submit_preferences" value="<?php echo SAVE; ?>"/>
    </form>
    Pour votre comréhension, voici ma fonction getSiteParam :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function getSiteParam($param) {
    	global $Db;
    	$thisParam = $Db->query("SELECT data FROM "._DB_PREFIX_."params WHERE name = '".$param."'")->fetch(PDO::FETCH_OBJ);
    	return stripslashes($thisParam->data);
    }
    Quant à la fonction savePreferences(), il s'agit de ma fonction d'Update.

    Bref, venons-en au fait .
    J'ai besoin de pouvoir faire un update sur chaque champs de manière automatique (ma liste de paramètres est amenée à évoluer constamment).
    Problème, je ne sais absolument pas comment identifier chaque champ dans les conditions de ma requête.

    Voici la fameuse fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function savePreferences() {
    	global $Db;
    	if(isset($_POST['submit_preferences'])) {
    		foreach($_POST AS $k => $param) {
    			//$Db->exec("UPDATE "._DB_PREFIX_."params (name, data) VALUES ("") WHERE ;	
    		}
    	}
    }
    Voilà mon soucis. Que faire avec cette fameuse ligne commentée ?
    Merci d'avance pour votre aide, je l'espère salvatrice.
    En espérant avoir été suffisamment claire,

    Pauline.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut Pauline,

    C'est assez étrange la manière que tu as pour gérer tes vues.
    Je te l'accorde c'est pas le problème. Ton souci relève de la gestion des tables dites EAV Entité-Attribut-Valeur. Quel est le SGBDR derrière tout ça ?

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Par défaut
    Bonjour et merci de ta réponse,

    En fait j'essaie de développer un petit CMS, j'essaie donc de rendre tout ceci le plus paramétrable possible. Je m'attendais plutôt à le remarque "je fais du a moitié orienté objet".

    Fin bref.

    J'utilise mysql avec une connexion en PDO.

    EDIT : Je précise d'ailleurs que je ne suis absolument pas dans un contexte POO, ni MVC. Juste du bon vieux procédural bien baveux. Je sais, on dirait peut être pas

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Avec MySql derrière, tu n'as pas trop le choix des armes à vrai dire.
    Vu que ce moteur est assez limité en terme de gestion de formats exotiques, deux options simples s'offrent à toi :
    - méthode standard : tu gardes ta table et tu fais autant de requêtes update que nécessaire (une par paramètre à vrai dire)
    - méthode mariolle : tu utilises un tableau de tous tes paramètres que tu serializes avant d'envoyer dans la base de données dans un champs texte. Ensuite tu déserializes ce qu tu récupères avant de le parcourir comme si de rien était.

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Par défaut
    Méthode standard !
    Tant pis.
    J'avais pensé à faire un array comme c'est le cas dans Prestashop, j'ignore si tu connais, mais dans ce cas cela me forcerait à écrire chaque paramètre dans l'ordre non ?

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Pauloscorps Voir le message
    Méthode standard !
    Tant pis.
    J'avais pensé à faire un array comme c'est le cas dans Prestashop, j'ignore si tu connais, mais dans ce cas cela me forcerait à écrire chaque paramètre dans l'ordre non ?
    Si tu veux tu peux aussi t'orienter vers un autre moteur qui gère ceci les doigts dans le nez : PostgreSQL.
    Ecrire des paramètres dans un ordre ??? C'est un tableau, tu le remplis dans l'ordre que tu veux, non ?

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    La méthode mariolle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $params = array('nom' => 'abc', 'option.a' => 'a');
    $serialized = base64_encode(serialize($params));
    $sql = "UPDATE t_table SET params = '$serialized' WHERE id = 1";
     
    // puis
    $sql = "SELECT params FROM t_table WHERE id = 1";
    $data = mysql_query(...);
    $params = unserialize(base64_decode($data));
    EDIT: tu ne fais pas sur $data le base64_decode($data) c'est juste pour l'exemple. Tu récupère d'abord le résultat de mysql_query() que tu passes au décodage.

  8. #8
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 63
    Par défaut
    Merci pour ta méthode mariolle. Je vais me pencher dessus pour essayer d'y comprendre quelque chose.

    Sinon, je viens de penser à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function savePreferences() {
    	global $Db;
    	if(isset($_POST['submit_preferences'])) {
    		$count = 1;
    		foreach($_POST AS $k => $param) {
    			$Db->exec("UPDATE "._DB_PREFIX_."params SET data = '".$_POST[$k]."' WHERE id = '".$count."'");	
    			$count++;				
    		}
    	}
    }
    Mais :
    1 - Si le mec s'amuse à aller changer l'ordre des champs, c'est foutu.
    2 - Il faudrait exclure le $_POST de mon bouton submit.

    Tu verrais une manière d'arranger ca ?

Discussions similaires

  1. [MS SQL]faire un UPDATE sur plusieurs tables en meme temps
    Par touille dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2007, 09h45
  2. Réponses: 1
    Dernier message: 08/06/2007, 12h11
  3. [VB6] Comment faire un update sur des textbox qui sont créés
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 27
    Dernier message: 16/02/2006, 14h52
  4. critere de selection pr faire un UPDATE sur 1 table
    Par maxizoo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/01/2006, 15h35
  5. [Debutant] faire un update sur tout une table
    Par Karibou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 14h44

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