2010-04-14 5 views
2

Quelqu'un peut-il me dire/montrer comment utiliser PHP dans PHP? J'essaie de changer l'URL d'une image en fonction de la valeur d'une base de données MySQL. Voici un exemple de ce que j'essaie de faire. Gardez à l'esprit que $ idx a déjà une valeur de l'URL de la page.Comment utiliser Php à l'intérieur de Php?

<?php 
$query = "SELECT * FROM comment WHERE uname='$idx'"; 
$result = mysql_query($query); 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
echo "<img src='' name='comm' width='75px' height='60px' id='mainimage' />"; 
} 
?> 

Comment est-ce que je devrais faire la valeur de source, pour l'image, venez d'une table différente?

+0

+1 pour ce titre. –

Répondre

5

Vous feriez une autre requête SQL dans la boucle while. J'aime la façon dont tu le dis, "Php inside Php", c'est à peu près ce que tu fais.

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    $image_query = "SELECT image_url FROM your_table"; 
    $image_result = mysql_query($image_query); 
    $image = mysql_fetch_assoc($image_result); 

    echo "<img src='" . $image['image_url'] . "' name='comm' width='75px' height='60px' id='mainimage' />"; 
} 

Assurez-vous que les noms de variables pour votre requête et le résultat sont différents de votre requête d'origine, parce que vous utilisez toujours la variable $result de la requête initiale chaque itération de la boucle. Donc, ici, je les ai préfixés avec "image_".

7

Vous pouvez joindre des données provenant de plusieurs tables dans une même requête SQL. Voir: http://www.w3schools.com/sql/sql_join.asp

Exemple:

SELECT column_name(s) 
FROM table_name1 
JOIN table_name2 
ON table_name1.column_name=table_name2.column_name 
0

Comment est-ce que je devrais faire la valeur de source, pour l'image, venez d'une table différente?

Vous devez simplement demander la table différente. Vous pouvez demander en créant une sous-requête (ou une jointure) ou créer une deuxième requête à l'intérieur d'une boucle.

1

En supposant à une estimation aléatoire que l'autre table peut être appelée accounts et uname est la clé primaire, vous pouvez faire un JOIN pour saisir les données des tables les deux en une seule fois. Si vous pouvez adapter ce que vous voulez faire dans une seule requête qui est généralement beaucoup plus rapide que de faire une requête supplémentaire par ligne

<?php 
    $result = mysql_query(
     "SELECT comment.*, account.url AS imgurl ". 
     "FROM comment JOIN account ON comment.uname=account.uname ". 
     "WHERE comment.uname='".mysql_real_escape_string($idx)."'" 
    ); 
?> 
<?php while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { ?> 
    <img src="<?php echo htmlspecialchars($row['imgurl']) ?>" alt="" class="mainimage" /> 
<?php } ?> 

Notes:

  • vous devez échapper le texte que vous insérez dans un SQL requête, ou vous avez de graves problèmes de sécurité. Utilisez mysql_real_escape_string ou laissez les requêtes paramétrées le gérer; De la même manière, lorsque vous placez du texte dans une chaîne HTML, htmlspecialchars est nécessaire ou vous avez d'autres problèmes de sécurité (moins sérieux, mais toujours pas bons);

  • vous ne devez pas utiliser le même id sur un élément plus d'une fois (ce qui sera le cas, dans une boucle). La même chose vaut pour name sur <img>, bien qu'il y ait peu de raisons que vous vouliez vraiment utiliser img name;

  • width="75px" ne fonctionnera pas dans un attribut car px -les mesures sont CSS et non HTML. Omettez l'unité ou, mieux, définissez une règle en CSS (.mainimage { width: 75px; height: 60px; }) pour les faire tous en même temps.