Petit help sur une requête

Eléphanteau du PHP | 12 Messages

08 juin 2008, 17:45

Bonjour,

je débute avec mysql et j'ai besoin de faire un listing qui utilise des infos contenues dans 2 tables différentes (listing des messages d'un forum phpbb).
 
<?php

// Connexion à la BD
	include("_conn.php");

// Creation et envoi de la requete
$query1 = "SELECT `post_id` , `post_time` , `poster_id` , `poster_ip` , `post_subject` 
FROM `phpbb_posts` 
WHERE 1 
";
$requete = mysql_query('SELECT `user_id`,`username` FROM `phpbb_users` WHERE 1' );

$result = mysql_query($query1);

// Recuperation des resultats
if (!mysql_fetch_row($result)) {
echo "Aucun enregitrement ne correspond\n";
}

else {
	echo "<table border=\"1\">\n
	<tr>\n
	<td align=\"center\">post_id</td>\n
	<td align=\"center\">post_time</td>\n
	<td align=\"center\">poster_id</td>\n
	<td align=\"center\">username</td>\n
	<td align=\"center\">poster_ip</td>\n
	<td align=\"center\">domaine</td>\n
	<td align=\"center\">post_subject</td>\n
	</tr>\n";

	while($row = mysql_fetch_row($result)){
		$post_id = $row[0];
		$post_time =  strftime("%d/%m/%Y %H:%M",$row[1]);
		$poster_id = $row[2];
		$username = '&nbsp';
		$poster_ip = $row[3];
		$domaine = gethostbyaddr($row[3]);
		$post_subject = $row[4];

// construire le tableau		
		echo "<tr>\n
		<td>$post_id</a></td>\n
		<td>$post_time</td>\n
		<td>$poster_id</td>\n
		<td>$username</td>\n	
		<td>$poster_ip</td>\n	
		<td>$domaine</td>\n	
		<td>$post_subject</td>\n	
		</tr>\n";

	}
	echo "</table>";
}

// Deconnexion de la base de donnees
mysql_close();

?>
Pb : je ne sais pas comment récupérer la variable 'username' (voir ds le 'while') dans la table 'phpbb_users' à partir du 'user_id' de la table 'phpbb_posts' ?

Si qqn pouvait m'aider, ce serait bien sympa.

D'avance merci.

Chr.
Modifié en dernier par rabiet le 08 juin 2008, 21:39, modifié 1 fois.

Eléphant du PHP | 174 Messages

08 juin 2008, 18:28

Bonsoir.

Tout d'abord ta requête n'est pas correcte :
$query1 = "SELECT `post_id` , `post_time` , `poster_id` , `poster_ip` , `post_subject`
FROM `phpbb_posts`
WHERE 1
";
$requete = mysql_query('SELECT `user_id`,`username` FROM `phpbb_users` WHERE 1' );
WHERE 1 ne signifie rien...

Pour récupérer une variable retournée par la requete, il faut utiliser mysql_fetch_array().

Pour en savoir plus, je te conseille de jeter un coup d'oeil aux documentations associés et à siteduzero.fr notamment pour savoir comment rédiger correctement tes requêtes...

Bon apprentissage et bonne progra !
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

Eléphanteau du PHP | 12 Messages

08 juin 2008, 18:53

Merci animithra

oui le 'where 1' ne sert à rien. c'est copier/coller brutal de phpmyadmin

par contre si qqn pouvait m'indiquer la syntaxe pour récupérer ce p_ _ _ _ n de 'username' ça m'arrangerait bien parce que je sèche :cry:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juin 2008, 19:05

Va voir la doc de la fonction qu'elle t'a donnée, notammenet l'exemple #3 (tu pourrais totuefois le faire aussi avec mysql_fetch_row() et là il faudrait aussi aller voir la doc)

Eléphanteau du PHP | 12 Messages

08 juin 2008, 19:52

OK ! merci pour le tuyau. ça marche !

On peut sûrement améliorer le code. je suis preneur de conseils.

Reste juste un petit pb : la 1ère ligne de mon tableau ne s'affiche pas (valeur 'post_id' =1), alors que je la récupère avec la même requête (query1) dans phpmyadmin :?:

 
<?php

// Connexion à la BD
	include("_conn.php");

// Creation et envoi de la requete
$query1 = "SELECT `post_id` , `post_time` , `poster_id` , `poster_ip` , `post_subject` 
FROM `phpbb_posts` ";

$result = mysql_query($query1);

// Recuperation des resultats
if (!mysql_fetch_row($result)) {
echo "Aucun enregitrement ne correspond\n";
}

else {
	echo "<table border=\"1\">\n
	<tr>\n
	<td align=\"center\">post_id</td>\n
	<td align=\"center\">post_time</td>\n
	<td align=\"center\">poster_id</td>\n
	<td align=\"center\">username</td>\n
	<td align=\"center\">poster_ip</td>\n
	<td align=\"center\">domaine</td>\n
	<td align=\"center\">post_subject</td>\n
	
	</tr>\n";

	while($row = mysql_fetch_row($result)){
		$post_id = $row[0];
		$post_time =  strftime("%d/%m/%Y %H:%M",$row[1]);
		$poster_id = $row[2];
//		$username = '&nbsp';
		$requete = mysql_query('SELECT `username` FROM `phpbb_users` WHERE `user_id` = '.$poster_id.' ');
		$ligne = mysql_fetch_array($requete);
		$username = $ligne['username'];
		$poster_ip = $row[3];
		$domaine = gethostbyaddr($row[3]);
		$post_subject = $row[4];

// on remplit le tableau
		echo "<tr>\n
		<td>$post_id</a></td>\n
		<td>$post_time</td>\n
		<td>$poster_id</td>\n
		<td>$username</td>\n	
		<td>$poster_ip</td>\n	
		<td>$domaine</td>\n	
		<td>$post_subject</td>\n	
		</tr>\n";

	}
	echo "</table>";
}

// Deconnexion de la base de donnees
mysql_close();

?>

Modifié en dernier par rabiet le 08 juin 2008, 21:30, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juin 2008, 20:42

Modération :
rabiet, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ