Carnet d'adresse php/mysql

Répondre
totodu75005
le 26/05/2011 à 13:04
totodu75005
Bonjour,

Voila j'ai un probleme qui vous semblera surement idiot mais il me bloque enormement. le probleme est le suivant. j'ai une BDD avec 2 tables (contacts et phones) qui est sous cette forme :
(table phones)
id contactId type number
1 1 cell 0600000000
2 3 home 0100000000
3 4 cell 0600000000
4 1 home 0100000000
5 3 cell 0600000000
6 3 work 0100000000
7 2 cell 0600000000
8 4 home 0100000000

(table contacts)
id firstName lastName birthday
1 jean GABIN 1985-10-13
2 marta DUPONT 1987-07-10
3 jerome DUBOIS 1986-12-12
4 matilde DUPONT 1973-04-20

je souhaiterai qu'apres avoir fait ma requette SQL (SELECT * FROM contacts c, phones p WHERE c.id=p.contactId) cela m'affiche un tableau du type :

| NOM | PRENOM | ANNIVERSAIRE | TELEPHONE |
| GABIN | jean | 1985-10-13 | 0600000000 (cell) |
|........................................| 0100000000 (home) |
-------------------------------------------------------------------------
| DUPONT | marta | 1987-07-10 | 0600000000 (cell) |
-------------------------------------------------------------------------
| DUBOIS | jerome | 1986-12-12 | 0600000000 (cell) |
|...............................................| 0100000000 (home) |
|...............................................| 0100000000 (work) |

j'arrive a former le tableau mais il apparait sous cette forme:

| NOM | PRENOM | ANNIVERSAIRE | TELEPHONE |
| GABIN | jean | 1985-10-13 | 0600000000 (cell) |
| GABIN | jean | 1985-10-13 || 0100000000 (home) |
-------------------------------------------------------------------------
| DUPONT | marta | 1987-07-10 | 0600000000 (cell) |
-------------------------------------------------------------------------
| DUBOIS | jerome | 1986-12-12 | 0600000000 (cell) |
| DUBOIS | jerome | 1986-12-12 | 0100000000 (home) |
| DUBOIS | jerome | 1986-12-12 | 0100000000 (work) |

voici mon script PHP:

php
<?php

require_once("mainlib.php");

get_db();

$req = "SELECT *
FROM contacts c, phones p
WHERE c.id=p.contactId
";

$res = mysql_query($req);
?>
<table border="0" cellspacing="1" bgcolor="#000000" align="center" width="50%">
<tr bgcolor="#FFFFFF">
<td>
Firstname
</td>
<td>
Lastname
</td>
<td>
Birthday
</td>
<td>
Phone
</td>
</tr>
<?php
while ($tab = mysql_fetch_assoc($res)) {

echo "<tr bgcolor='#FFFFFF'>";
echo "<td>";
echo $tab["firstName"];
echo "</td>";
echo "<td>";
echo $tab["lastName"];
echo "</td>";
echo "<td>";
echo $tab["birthday"];
echo "</td>";
echo "<td>";
echo $tab["number"]."&nbsp;(".$tab["type"].")";
echo "</td>";
echo "</tr>";
}

?>
</table>


Merci d'avance pour votre aide.
LupusMic
le 31/05/2011 à 13:46
LupusMic
Tu n'as pas d'autre choix que de le faire en deux passes.

Une première qui va agréger les données récupérées depuis la base de données, pour donner un tableau PHP dans ce goût là :
<?php
$contacts = array
( array
( 'firstName'=>'Bob'
, 'birthday'=>'1980-06-12'
, 'phones'=>array
( 'cell'=>'06xxxxxxxx'
, 'home'=>'01xxxxxxxx'
)
)
, array
( ... )
) ;

foreach($contacts as $contact)
{
echo '<tr>' ;
$phones_count = count($contact['phones']) ;
if($phones_count)
# je n'ai jamais compris le spaning dans les tableau, donc +/- 1 ;)
printf ('<td rowspan=\'%d\'>', $phones_count /* + 1 */) ;
else
echo '<td>' ;
echo htmlentities($contact['firstName']) ;
echo '</td>'
foreach($phones as $phone_location => $phone_number)
echo '<td>' . htmlentities($phone_number) . '</td>' ;

echo '</tr>' ;
}
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours