Valign="top" ne marche pas

Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un petit souci avec mon tableau. Le texte reste bloqué en dessous alors que j'aimerais qu'il soit aligné au dessus par rapport à la photo (
)

Voici mon code:

<p class="titre_recettes"> 

<tr class="<?php print $classe;?>">
<th rowspan="2"><img src="<?php print $photos ;?>" class="photo" /></th>
<th valign="top"><?php print $nomRecettes;?> (<?php print $nomCat ;?>)</th>
</tr>


<tr class="<?php print $classe;?>">
<td valign="top">Temps de préparation: <?php print $temps_prepa;?> - Temps de cuisson: <?php print $temps_cuisson;?><br />Difficulté: <?php print $difficulte;?></td>

</tr>
</p>

Pouvez-vous m'aider? Merci :-)
A voir également:

23 réponses

Utilisateur anonyme
 
Bonjour

Ça devrait mieux marcher si tu mettais ton tableau à l'intérieur de balises <table> au lieu de <p>
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour la réponse, mais ça ne marche pas :s
Enfaite mon tableau se trouve déjà dans des balises <table>

print "<table>" ;
$i=1 ;
while($row=mysql_fetch_array($rs)) {
extract($row) ;


if (($i % 2 ) == 0) {
$classe = "paire" ;
} else {
$classe = "impaire" ;
}


?>
<br /><br /><span class="titre_recettes">

<tr class="<?php print $classe;?>">
<th rowspan="2"><a href="index.php?page=23?id=' . $data['idCat'] . '"><img src="<?php print $photos ;?>" class="photo" /></th>
<th valign="top"><?php print $nomRecettes;?> (<?php print $nomCat ;?>)</th>
</tr>


<tr class="<?php print $classe;?>">
<td valign="top">Temps de préparation: <?php print $temps_prepa;?> - Temps de cuisson: <?php print $temps_cuisson;?><br />
Difficulté: <?php print $difficulte;?></td>
</tr>
</span>

<?php
$i++ ;
}
print "</table>"
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

Une balise <table> ne peut contenir que des balises <tr>.
Une balise <tr> ne peut contenir que des <td>.
Une balise <td> peut contenir ce que tu veux.

La balise <p> (ou <span> ou autre) qui entoure ton <tr> est donc incorrect :
Tableau non valide
<table>
    <p> <!-- invalide -->
        <tr><td></td></tr>
    </p>
</table>


Tableau valide :
<table>
    <tr>
        <td><p></p></td>
    </tr>
</table>


Bonne journée
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Merci.

J'ai essayé ceci, mais ça ne convient toujours pas :s


print "<table>" ;
$i=1 ;
while($row=mysql_fetch_array($rs)) {
extract($row) ;


if (($i % 2 ) == 0) {
$classe = "paire" ;
} else {
$classe = "impaire" ;
}


?>


<tr><p class="titre_recettes"></tr>

<tr class="<?php print $classe;?>">
<th rowspan="2"><a href="index.php?page=23?id=' . $data['idCat'] . '"><img src="<?php print $photos ;?>" class="photo" /></th>
<th valign="top"><?php print $nomRecettes;?> (<?php print $nomCat ;?>)</th></tr>



<tr class="<?php print $classe;?>">
<td valign="top">Temps de préparation: <?php print $temps_prepa;?> - Temps de cuisson: <?php print $temps_cuisson;?><br />
Difficulté: <?php print $difficulte;?></td>

</tr>


<?php
$i++ ;
}
print "</table>" ;
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
<tr><p class="titre_recettes"></tr> 

Invalide. Où sont le contenu de la balise <p> et la balise de fermeture </p> ?
Peux-tu nous mettre un lien vers ta page si elle est en ligne ? Sinon, peux-tu nous mettre le HTML généré, histoire de ne pas être perturbé par le PHP ?
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Effectivement le code html généré sans le php sera plus simple pour nous.

D'ailleurs je remarque que ton code php te permet d'ajouter une classe paire ou impaire sur les lignes de ton tableau, surement pour colorer en css ces lignes avec une couleurs différentes.
Avec CSS3 nous pouvons désormais utiliser la pseudo-classe css :nth-child qui permet de faire la même chose sans avoir besoin d'ajouter une classe sur chaque ligne. Voici un exemple simple : http://jsfiddle.net/hpbyvm2z/
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Voilà le code que j'ai remis convenablement. (En effet, je ne sais plus pourquoi il y avait ".titre_recettes"


<table>
<tr class="<?php print $classe;?>">
<th rowspan="2"><a href="index.php?page=23?id=' . $data['idCat'] . '"><img src="<?php print $photos ;?>" class="photo" /></a></th>
<th valign="top"><?php print $nomRecettes;?> (<?php print $nomCat ;?>)</th>
</tr>

<tr class="<?php print $classe;?>">
<td valign="top">Temps de préparation: <?php print $temps_prepa;?> - Temps de cuisson: <?php print $temps_cuisson;?><br />
Difficulté: <?php print $difficulte;?></td>

</tr>

</table>

Et ça donne toujours ceci:


En plus le premier reste "coincé" au milieu :-(
0
Utilisateur anonyme
 
<a href="index.php?page=23?id=' . $data['idCat'] . '">

Il te manque des balises <?php ?> autour de $data['idCat'], et enlève les points de concaténation.
Mais ce n'est pas le problème. Chez moi, ton code marche mais je ne sais pas ce qu'il y a dans tes variables php ni dans ton CSS.
Peux-tu comme je te l'ai demandé nous donner le code html généré pour éliminer les problèmes liés à PHP ? Fais un Ctrl U sur la page affichée dans ton navigateur, et copie-colle le code correspondant à cette partie
0
Utilisateur anonyme
 
Dans ton "href", tu devrais avoir un ? après le .php, mais un & (ou mieux : &amp;) entre 23 et id
0
Utilisateur anonyme
 
Peux-tu nous montrer ton fichier css aussi ?
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup pour vos réponses.

J'ai en effet, regarder le CSS correctement et l'erreur venait de là (j'avais mis un vertical-align: baseline; pour tous le document).

Tout marche :-)

Par contre, j'avais mis le "<?php ?> autour de $data['idCat']" car j'aimerais que quand on clique sur la photo de la recette, on accède à une autre page affichant la recette complète, mais je bloque sur ce point. Pouvez vous m'aider encore une fois?

<?php 
include "include/connexion.inc.php" ;
?>

<?php
echo'<form method="get" action="" >';
echo'<input type="hidden" name="page" value="06" />';

$reponse = mysql_query("select * from tblcategories order by nomCat" );

echo'<select name="idCat">';
while ($donnees = mysql_fetch_array($reponse) )
{

echo '<option value="'.$donnees['idCat'].'">'.$donnees['nomCat'].'</option>';

}
echo'</select>';
echo'<input type="submit" value=" ok ">';
echo'</form>';
?>

<?php

$sql = "SELECT R.*, P.*
FROM tblrecettes R
INNER JOIN tblcategories P
ON R.idCat = P.idCat
WHERE P.idCat = $idCat
ORDER BY R.nomRecettes ";
$rs = mysql_query($sql) or die ("Erreur de requête:$sql");


$i=1 ;
while($row=mysql_fetch_array($rs)) {
extract($row) ;

?>
<br /><br />
<table>
<tr>
<th rowspan="2"><a href="index.php?page=23&id=' . $data['idCat'] . '"><img src="<?php print $photos ;?>" class="photo" /></a></th>
<th valign="top"><?php print $nomRecettes;?> (<?php print $nomCat ;?>)</th>
</tr>

<tr>
<td valign="top">Temps de préparation: <?php print $temps_prepa;?> - Temps de cuisson: <?php print $temps_cuisson;?><br />
Difficulté: <?php print $difficulte;?></td>

</tr>

</table>


<?php
$i++ ;
}
?>
0
Utilisateur anonyme
 
Par contre, j'avais mis le "<?php ?> autour de $data['idCat']"
Justement non, tu ne l'as pas mis. C'est bien ce que je te faisais remarquer.Tu es ici en dehors des balises php, donc ton $data['idCat'] ne veut rien dire. Et tu devrais t'en rendre compte en regardant le code source généré : l'as-tu fait ? C'est souvent un bon moyen de détecter des erreurs.
Tu aurais dû écrire
<a href="index.php?page=23&id=<?php echo $data['idCat'] ?>">
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Ok Ok, j'ai changé ça en effet (je débute en php, j'ai repris des vieux cours et j'essaie d'adapter). Mais maintenant sur ma page d'affichage de la recette (page 23), je dois mettre quelque chose de spécial pour que ça affiche la recette ?

Voici mon code pour l'instant (qui ressemble fort à l'autre):

<?php 
echo'<form method="get" action="" >';
echo'<input type="hidden" name="page" value="23" />';

$sql = "SELECT R.*, P.*
FROM tblrecettes R
INNER JOIN tblcategories P
ON R.idCat = P.idCat
WHERE P.idCat = $idCat
ORDER BY R.nomRecettes ";
$rs = mysql_query($sql) or die ("Erreur de requête:$sql");

$i=1 ;
while($row=mysql_fetch_array($rs)) {
extract($row) ;



?>
<table>

<p class="titre_recettes"><?php print $nomRecettes;?></p><p align="center">(auteur de la recette: <?php print $auteur;?>)</p> <br />



<tr class="<?php print $classe;?>">
<th><img src="<?php print $photo ;?>" class="photo_affichage" /></th>
<td>Type de plat: <?php print $nomCat;?><br /><br />
Temps de préparation: <?php print $temps_prepa;?><br /><br />Temps de cuisson: <?php print $temps_cuisson;?><br /><br /> Difficulté: <?php print $difficulte;?></td>
</tr>
<tr class="<?php print $classe;?>">
<td colspan="2"><span class="preparation">Ingrédients (pour <?php print $nombre_pers;?> personnes) :</span><br />
<?php print $nomIng;?></td>
</tr>
<tr class="<?php print $classe;?>">
<td colspan="2"><span class="preparation">Préparation de la recette :</span><br />
<?php print $description;?></td>
</tr>
</table>


<?php
$i++ ;
}
?>



<br />
<form><input type="button" value=" Retour aux recettes ''<?php print $nomCat;?>'' " onClick="history.go(-1)"></form>



</body>
</html>
0
Utilisateur anonyme
 
<?php 
echo'<form method="get" action="" >';
echo'<input type="hidden" name="page" value="23" />';

À quoi te sert le php ici ? À rien. Quand tu veux afficher du HTML tout simple (sans variables php), mets-le simplement en dehors des balise php.

je dois mettre quelque chose de spécial pour que ça affiche la recette
Je ne comprends pas ta question. Il suffit de faire un echo du champ qui contient la recette. Éventuellement entre des balises <p> ou <td> ou je ne sais quoi d'autre, tout dépend de la mise en page que tu cherches.
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Ici, quand je clique sur la photo pour afficher la recette, il n'y a rien qui s'affiche.
Je pensais qu'il fallait que je crée une nouvelle page (index.php?page=23) d'où le code que je viens de poster un peu plus haut.

Désolé si je ne suis pas très précise :s
0
Utilisateur anonyme
 
quand je clique sur la photo
De quelle photo parles-tu ? Celle de ton message #11 :
<th rowspan="2"><a href="index.php?page=23&id=' . $data['idCat'] . '"><img src="<?php print $photos ;?>" class="photo" /></a></th>

ou celle de ton message #13 :
<th><img src="<?php print $photo ;?>" class="photo_affichage" /></th>


Car dans cette dernière, il n'y a pas de lien sur la photo ni de javascript, c'est normal qu'elle ne fasse rien.
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
De celle-ci:
<th rowspan="2"><a href="index.php?page=23&id=' . $data['idCat'] . '"><img src="<?php print $photos ;?>" class="photo" /></a></th>


En gros ça doit faire comme pour le site de marmiton par exemple (https://www.marmiton.org/recettes/recherche.aspx?type=all&aqt=pouets

On clique sur l'image et on a la recette complète qui s'affiche
0
Utilisateur anonyme
 
<a href="index.php?page=23&id=' . $data['idCat'] . '">
As-tu bien remis les balises <?php ?> comme dir dans mon message #12 ?
Ton lien envoie sur la page index.php. Y a-t-il dans index.php du code qui analyse les valeurs de 'page' et de 'id' pour afficher une recette spécifique ? Si non, que fait cette page index.php ?
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Je reviens vers vous (mon ordi était en réparation).

Justement, je ne sais pas comment faire pour que index.php analyse les valeurs de la page et de l'id pour afficher la recette...
0
Utilisateur anonyme
 
Les paramètres que tu as passé dans l'url (page=23 & id=machin) ou dans un formulaire avec la méthode "get" se retrouvent dans le tableau superglobal $_GET.
Les champs que tu as envoyés avec un formulaire avec la méthode post (à utiliser de préférence) se retrouvent dans le tableau superglobal $_POST
Avec l'exemple ci-dessus, tu retrouves la valeur 23 dans $_GET['page'] et 'machin' dans $_GET['id']. À toi de mettre ces valeurs dans une requête pour extraire l'information dont tu as besoin et l'afficher.

Ajoute un "print_r ($_GET) ;" au début de ton script pour voir ce qu'il y a dedans. Tu l'effaceras après, bien sûr.
0
Sid05 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
 
Voilà, j'ai changé mon code:

Pour la page recettes.php (avec la liste des recettes):

<?php 
extract($_GET);

if(!isset($idCat)) {
 $idCat= "29";
}
?>

<label for="categorie" class="select">Rechercher par catégorie</label>



<?php 
echo'<form method="get" action="" >';
echo'<input type="hidden" name="page" value="06" />';

$reponse = mysql_query("select * from tblcategories order by nomCat" ); 

echo'<select name="idCat">'; 
while ($donnees = mysql_fetch_array($reponse) ) 
{ 
 
echo '<option value="'.$donnees['idCat'].'">'.$donnees['nomCat'].'</option>';
 
} 
echo'</select>';
echo'<input type="submit" value=" ok ">';
echo'</form>';
?>
<?php 
include "include/connexion.inc.php" ; 
?>
<br /><br />
<?php

 $sql = "SELECT R.*, P.* 
   FROM tblrecettes R
   INNER JOIN tblcategories P
   ON R.idCat = P.idCat
   WHERE P.idCat = $idCat
   ORDER BY R.nomRecettes ";
 $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

echo "<table>\n";

while ($data = mysql_fetch_array($req)) {
 // on affiche les résultats
 echo "<tr>";
 echo "<td rowspan="2" padding-lef="1em" padding-right="1em" color="#900" text-align="left">";
 echo '<a href="inc/recettes_affichage.php?id_recette_a_lire=' , $data['idRecettes'] , '"><img src="./mini/'.$photo.'" border="none" height="auto" width="100px"/><br/></a>';
 echo "</td>";
 echo "<th padding-lef="1em" padding-right="1em" color="#900" text-align="left">";
 echo ''.$data['nomRecettes'].' (';
 echo ''.$data['nomCat'].')'.'<br />';
 echo "</th>";
 echo "</tr>";
 echo "<tr>";
 echo "<td padding-lef="1em" padding-right="1em" color="#900" text-align="left">";
 echo 'Temps de préparation: '.$data['temps_prepa'].' - ';
 echo 'Temps de cuisson: '.$data['temps_cuisson'].'<br />';
 echo 'Difficulté: '.$data['difficulte'].'<br />';
 echo "</td>";
 echo "</tr>";
}
echo "</table>\n";

mysql_free_result ($req);
mysql_close ();
?>
    


</body>
</html>


Et pour la page qui affiche la recette:


<?php 
include "include/connexion.inc.php" ; 
?>

<?php 

if (!isset($_GET['id_recette_a_lire'])) {
 echo 'Sujet non défini.';
}
else {

echo'<form method="get" action="" >';
echo'<input type="hidden" name="page" value="23" />';

$sql = 'SELECT R.*, P.* 
   FROM tblrecettes R
   INNER JOIN tblcategories P
   ON R.idCat = P.idCat
   WHERE P.idRecettes="'.$_GET['id_recette_a_lire'].'"';
 $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

 while ($data = mysql_fetch_array($req)) {

 echo "<tr>";
 echo "<td> ";
 echo ''.$data['nomCat'].')'.'<br />';
 echo "</td>";
 echo "</tr>";
 
 }
 ?>
<table>    
    
    


Mais voilà ce qui s'affiche:
Erreur SQL !
SELECT R.*, P.* FROM tblrecettes R INNER JOIN tblcategories P ON R.idCat = P.idCat WHERE P.idRecettes="4"
No database selected
0
Utilisateur anonyme
 
extract($_GET);
L'instruction extract sur des données venant de l'extérieur est à proscrire à tout prix. Elle t'économise deux ou rois lignes de code, mais elle facilite grandement le travail des pirates qui peuvent ajouter et modifier toutes les variables qu'ils veulent dans ton script, simplement en les mettant dans l'url.

No database selected
Il y a quelque chose qui n'est pas clair dans ce message ? Visiblement, il n'y a pas de base de sélectionnée : à toi de voir où tu le fais et d'afficher le message d'erreur qu'il y a certainement.
0