Variables dynamiques

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Variables dynamiques

Re: Variables dynamiques

par xTG » 28 juin 2011, 08:06

Parce qu'à ce moment là la concaténation a déjà été résolue et donc c'est une String tout à fait statique pour lui.

Re: Variables dynamiques

par Pierre_perrez » 27 juin 2011, 15:10

Bonjour et merci pour vos réponses,
Une solution est de faire une fonction que tu appelles 2 fois.
Bien vu, ça fonctionne impec ;)

Petite question, comment se fait-il que l'exemple avec l'écho et la concaténation de variables de fonctionne pas ?

Je comprends bien que si le tableau $data n'est pas défini, aucune valeur ne peut être sortie.

Mais dans le cas ou l'écho se fait après une déclaration des valeurs du tableau, pourquoi php n'attribue-t-il pas la nouvelle valeur de $data ?

Re: Variables dynamiques

par Mazarini » 27 juin 2011, 13:53

Bonjour,

Une solution est de faire une fonction que tu appelles 2 fois.
function affiche_message($donnees)
{
   echo ....
}
A toi de voir ce que tu veux inclure comme traitement dans ta fonction. Tu peux l'appeler avec l'ordre SQL comme paramètre, avec le résultat du mysql_query() ou le résultat de chaque fetch.

Re: Variables dynamiques

par Pierre_perrez » 27 juin 2011, 13:40

Merci pour ta réponse,
Défini plus ainsi ton application
Le problème est qu'il s'agit de html "complexe", pas de simples balise <div>, et d'un tas de variables récupérées par la query sql, je ne peux donc pas appliquer ce principe.

Mon code "$block" ressemble d'avantage à ceci :
$block = '<div>
<p>Nom de l\'auteur : ' . $data['nom'] . '</p>
<p>Message de l\'auteur : ' . $data['msg'] . '</p>
<p><a href="delete-' . $data['id'] . '>Supprimer message</a></p>
</div>';

Re: Variables dynamiques

par xTG » 27 juin 2011, 12:59

Ah bah oui... Tu peux pas utiliser une variable qui n'existe pas encore !

Défini plus ainsi ton application :
$block_deb = '<div class="plein de html">';
$block_fin = '</div>';
Et ton affichage :
echo $block_deb . $data['foo'] . $block_fin

Re: Variables dynamiques

par Pierre_perrez » 27 juin 2011, 10:41

Bonjour et merci pour vos réponses,
Quel est le code final ?
<?php

connexion MySQL

** $block = '<div class="plein de html">' . $data['foo'] . '</div>';

if (afficher un message particulier)
{
  if ($query = mysql_query(récupération des données du message particulier)
  {
    if (mysql_num_rows($query) !== 0)
    {
      while ($data = mysql_fetch_array($query))
      {
**      echo $block;
      }
    } else { echo ' ce message n\'existe pas'; }
  } else { echo ' une erreur est servenue'; }
}
elseif ($query = mysql_query(récupération des données des 15 derniers messages))
{
  if (mysql_num_rows($query) !== 0)
  {
    while ($data = mysql_fetch_array($query))
    {
**    echo $block;
    }
  } else { echo ' pas de message à afficher'; }
} else { echo 'une erreur est servenue'; }

?>
Qu'est-ce qui ne fonctionne pas ?
La valeur des variables récupérées par la requête SQL n'apparait pas.
Tu as concaténé ou affecté ?
Concaténé avec des guillemets simples : $var = 'bla bla' . $foobar . 'bla bla';

Re: Variables dynamiques

par xTG » 27 juin 2011, 07:56

Tu as concaténé ou affecté ?
$variable = 'test';
$variable .= ' de concaténation';
echo $variable;
$variable = 'et d\'affectation';
echo $variable;

Re: Variables dynamiques

par devlop78 » 27 juin 2011, 02:38

Qu'est-ce qui ne fonctionne pas ? Quel est le code final ?

Variables dynamiques

par Pierre_perrez » 27 juin 2011, 00:28

Bonjour à tous,

Je me trouve face à un problème que quelques recherches Google n'ont pas pu m'aider à solutionner. Afin d'alléger mon code, je souhaiterais convertir une partie redondante en variable.

Voici mon code (simplifié) :
Notez les lignes marquées de **.
<?php

connexion MySQL

if (afficher un message particulier)
{
  if ($query = mysql_query(récupération des données du message particulier)
  {
    if (mysql_num_rows($query) !== 0)
    {
      while ($data = mysql_fetch_array($query))
      {
**      echo '<div class="plein de html">' . $data['foo'] . '</div>';
      }
    } else { echo ' ce message n\'existe pas'; }
  } else { echo ' une erreur est servenue'; }
}
elseif ($query = mysql_query(récupération des données des 15 derniers messages))
{
  if (mysql_num_rows($query) !== 0)
  {
    while ($data = mysql_fetch_array($query))
    {
**    echo '<div class="plein de html">' . $data['foo'] . '</div>';
    }
  } else { echo ' pas de message à afficher'; }
} else { echo 'une erreur est servenue'; }

?>
Cette ligne (simplifiée ici) est un mixe de html et de variables. Ce bloc est identique dans les deux cas et redondant en l'état, j'ai donc tenté de faire ceci :
(en début de code) $block = '<div class="plein de html">' . $data['foo'] . '</div>';
(pour remplacer les lignes avec **) echo $block;
Mais ça ne fonctionne pas, je dois certainement mal m'y prendre.

Auriez une idée pour parvenir au résultat désiré ?

Merci d'avance ;-)