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 :

variables nommées à partir de chaînes de caractères


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut variables nommées à partir de chaînes de caractères
    Bonjour,

    j'ai récupéré dans un tableau des noms à utiliser pour nommer des variables. Voici mon code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach($nom_appli as $key=>$name_appli)
    	$($name_appli)=$row->($name_appli);
    qui n'est visiblement pas bon :
    unexpected '(', expecting variable (T_VARIABLE) or '$' in C:\wamp\www\eis2\eisnew\page\copyserver.php on line 85
    Comment faudrait-il faire ?

    J'ai modifié mon code
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($nom_appli as $key=>$name_appli) {
       $query='update `infoappli` SET '.$name_appli.'='.$row->{$name_appli}.' where name="'.$name_copy.'"';
       $qid = $bdd->query($query);		
    }
    mais ce qui bloque, c'est la façon de nommer l'attribut de l'objet $row.
    Syntax error or access violation: 1064 Erreur de syntaxe près de 'where name="DBMAP-copy"' à la ligne 1' in C:\wamp\www\eis2\eisnew\page\copyserver.php on line 87
    comment faire ?

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    $row->{$name_appli} ne serait pas une chaine qu'il faut donc encadrer de guillemets ?

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Tu as clairement raison de me rappeler les guillemets, mais ce n'est pas tout :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query='update `infoappli` SET '.$name_appli.'="'.$row->{$name_appli}.'" where name="'.$name_copy.'"';
    var_dump($query);var_dump($name_appli);
    $qid = $bdd->query($query);
    donne
    string 'update `infoappli` SET autre="" where name="DBMAP-copy"
    string 'autre'
    Le souci, c'est que $name_appli est justement une chaîne de caractères, donc $row->{$name_appli}=souci.

  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
    Tu as contrôlé $row ?

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Merci Sabotage pour ta réponse hier soir ; pas vue hier car couché très tôt. Vue ce matin, mais pas le temps de répondre...
    Tu as raison car $row est vide. En creusant un peu, j'ai compris qu'il fallait que je m'y prenne autrement pour construire ma requête update mais que c'est pas simple, donc je clos cette discussion et si besoin j'en crée une nouvelle.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Tous comptes faits, je réouvre cette discussion car j'ai encore le même problème. Cette fois $row n'est pas vide, mais a une valeur inattendue.

    mon code :
    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
    	$sql_appli = "SELECT nom_appli FROM `applicatifs` ORDER BY nom_appli";
    	$qid = $bdd->query($sql_appli);
     
    	while($row=$qid->fetch(PDO::FETCH_OBJ)){//each line=new applicative
    		$nom_appli[$i]=str_replace(" ","",strtolower($row->nom_appli));
    		if ($nom_appli[$i]=="autre...") $nom_appli[$i]="autre";;
     
    		$sql="SELECT ".$nom_appli[$i].' from `infoappli` where name="'.$machselcopy.'"';var_dump($sql);
    		$bdd->query($sql);
    		$rowinfoappli=$qid->fetch(PDO::FETCH_OBJ);
    		$value=$rowinfoappli->{nom_appli[$i]};var_dump($rowinfoappli);var_dump($value);
    		//update : colonne=valeur lue pour le where 
    		$query='update `infoappli` SET '.$nom_appli[$i].'="'.$value.'" where name="'.$name_copy.'"';var_dump($query);
    		$qid = $bdd->query($query);
    		$i++;
    	}
    En fait, chaque valeur de la colonne nom_appli de la table applicatifs est le nom d'une colonne de la table infoappli.
    Les colonnes $nom_appli[$i] de la table infoappli n'ont que 2 valeurs possibles 0 ou 1 (ici (à a 1e lignd) ça vaut 0 selon phpMyAdmin) et dans phpMyAdmin sont de type tinyint(4)(je ne sais pas pourquoi boolean n'a pas été choisi).
    Mais les var_dump de la ligne 11 (69 en réalité) donnent :
    C:\wamp\www\eis2\eisnew\page\copyserver.php:69:
    object(stdClass)[3]
    public 'nom_appli' => string 'Cadence' (length=7)
    C:\wamp\www\eis2\eisnew\page\copyserver.php:69:null
    Ce qui est bizarre, c'est que nom_appli est une colonne de la table applicatifs mais pas de la table infoappli.
    Que se passe-t-il ?

  7. #7
    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
    Tu devrais faire un effort de clareté sur le nom de tes variables.
    Dans cette boucle $qid est réutilisé pour 3 choses différentes.
    À quoi sert le tableau $nom_appli ?

    Il manque un $ là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $value=$rowinfoappli->{$nom_appli[$i]}
    Au bilan quand même je comprends que ce n'est pas toi qui a conçu la base de données mais tu es en train de mettre de la crème fouettée pour cacher un étron.
    Ca ne serait pas plus rapide et rentable de restructurer la table infoappli plutôt que de faire ça ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sabotage Voir le message
    ...tu es en train de mettre de la crème fouettée pour cacher un étron...



    Du Grand sabotage ! Merci pour cette partie de rire !

    C'est l'étron qui cache la forêt ! (ou plutôt... le gland) ?

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    grand Sabotage. J'avais pensé à renommer les $row mais pas les $qid...Merci aussi pour le $ manquant...
    La table nom_appli, c'est juste car il y a un renommage à faire.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2015, 09h41
  2. [XL-2010] Variable prise pour une chaîne de caractère
    Par vianney.g dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/09/2013, 22h12
  3. Réponses: 9
    Dernier message: 21/02/2007, 13h20
  4. Réponses: 21
    Dernier message: 22/06/2006, 21h11
  5. Réponses: 8
    Dernier message: 16/06/2006, 01h06

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