Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour les codeurs,
Je suis supposée faire un menu avec les champs d'une table sql.
Table video => id etat type titre date lieu nom description auteur
menu => champ type
sous menu=> champ lieu
ssous menu=>les vidéos
Chaque menu est restrictif ex: sous menu lieu ne s'affiche que s'il à des vidéo dont le type est $type et le lieu $lieu.
Pour l'instant, j'arrive a afficher des résultats mais ils ne sont pas triés.
<div id="menu_section">
<?php do { ?>
<li><a href="#"><?php echo $row_videos['type']; ?></a>
<ul>
<li>
<a href="#<?php echo $row_videos['lieu']; ?>" onClick="setVideoListe('<?php echo $row_videos['lieu']; ?>', '1')"><?php echo $row_videos['lieu']; ?></a>
<ul>
<li><a href="#<?php echo $row_videos['lieu']; ?>" onClick="setVideoListe('<?php echo $row_videos['lieu']; ?>', '1')">1 - <?php echo $row_videos['titre']; ?><br/><span class="stitre">par <?php echo $row_videos['auteur']; ?></span></a></li>
</ul></li></ul></li>
<?php } while ($row_videos = mysql_fetch_assoc($videos)); ?>
</div>
qui donne :
Interviews d'avant match
Aix
1 - test maj
par André Hough - Demi d'ouvertureInterviews d'après match
Tarbes
1 - test 5
par Thierry Cléda - Directeur sportifRésumés des matchs
Paris
1 - titre qui apparaitra sur le site
par Thierry Cléda - Directeur sportifLes partenaires de la Section
Pau
1 - appareils
par Thierry Cléda - Directeur sportifInterviews d'après match
Mont de Marsan
1 - mama à tord
par Thierry Cléda - Directeur sportif
Comment faire pour que toutes les vidéo de type "Interviews d'après match" soient les une sous les autres ??
Tout conseils est bienvenu, merci
Hors ligne
order by ?
a++
Hors ligne
Saluton,
La guerre des étoiles
Quand on trie, on filtre, (WHERE ou HAVING), quand on classe on ordonne, d'où ORDER BY
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
coucou Maljuna Kris, Pierrot,
Ca faisait longtemps ,
merci de vos réponses,
j'ai tenté ORDER by type, mais sans plus de succès que ça .
En fait, le résultat escompté serait le même que plusieurs requêtes
avec pour les menus : WHERE video.type= $type
sous menu : WHERE video.type=$type AND video.lieu=$lieu
Je pensais qu'il existait une façon de le faire sans multiplier les requêtes.
Peut on mettre les résultat de la requête simple dans un array et trier par $type[$i] et $lieu [$i] ?
Hors ligne
ORDER BY type, lieu
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Ben non, je n'obtiens pas ce que je veux, snif
Je suis supposée avoir :
menus parents : type1 type2 type3 ...
Sous menus : lieu1 lieu1 lieu1
ssmenus video1 video1 video1
video2 video2 video2
video3... video3... video3...
Sous menus : lieu2 lieu2 lieu2
ssmenus video1 video1 video1
video2 video2 video2
video3... video3... video3...
Sous menus : lieu3 lieu3 lieu3
ssmenus video1 video1 video1
video2 video2 video2
video3... video3... video3...
Hors ligne
Hors ligne
Ce n'est plus un problème de requête SQL, c'est un problème d'algorithme PHP de gestion de ruptures lors du parcours du résultat de la requête.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
???
Fais-voir le code qui pose problème.
La requête soumise
Un jeu d'essai
Le résultat de la requête
Le code PHP qui exploite (parcourt) ce résultat.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
J'ai tnté une nouvelle approche avec une table menu.
mysql_select_db($database_dbprotect, $dbprotect);
$query_enfants = "SELECT * FROM menus WHERE menus.niveau=1";
$enfants = mysql_query($query_enfants, $dbprotect) or die(mysql_error());
$row_enfants = mysql_fetch_assoc($enfants);
$totalRows_enfants = mysql_num_rows($enfants);
$typ= $row_parents['nom'];
$ou=$row_enfants['nom'];
mysql_select_db($database_dbprotect, $dbprotect);
$query_video = "SELECT * FROM videos WHERE videos.type=$typ AND videos.lieu=$ou";
$video = mysql_query($query_video, $dbprotect) or die(mysql_error());
$row_video = mysql_fetch_assoc($video);
$totalRows_video = mysql_num_rows($video);
Ce qui me donne :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'avant match AND videos.lieu=Colomiers' at line 1
je essayé diverses syntaxes (type=".$type." , type='$type' type='.$type.') sans succès
Bouh Bouh bouh
Hors ligne
Je ne comprends plus rien à la démarche.
Structure de la table menus ?
A ce propos, SELECT *, je te le rappelle, n'aide pas.
Type de colonne de la colonne type ?
Si tu as des doutes sur la syntaxe d'inclusion de variables dans une chaîne de caractères utilise :
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
"SELECT LesNomsDeColonnesQuiVontBienMaisPasÉtoile FROM videos WHERE videos.type='$typ' AND videos.lieu='$ou'";
$typ et $ou entre simple cotes de porc
EDIT : Bien m'sieur, j'ai bien compris
a++
Hors ligne
Table vidéos :
Table menus
me donne toujours
Je ne comprends plus rien.
Hors ligne
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$num=0;
mysql_select_db($database_dbprotect, $dbprotect);
$query_parents = "SELECT * FROM menus WHERE menus.niveau=0";
$parents = mysql_query($query_parents, $dbprotect) or die(mysql_error());
$row_parents = mysql_fetch_assoc($parents);
$totalRows_parents = mysql_num_rows($parents);
mysql_select_db($database_dbprotect, $dbprotect);
$query_enfants = "SELECT * FROM menus WHERE menus.niveau=1";
$enfants = mysql_query($query_enfants, $dbprotect) or die(mysql_error());
$row_enfants = mysql_fetch_assoc($enfants);
$totalRows_enfants = mysql_num_rows($enfants);
$typ= $row_parents['nom'];
$ou=$row_enfants['nom'];
mysql_select_db($database_dbprotect, $dbprotect);
$query_video = "SELECT id,type,titre,auteur FROM videos WHERE videos.type='$typ' AND videos.lieu='$ou'";
$video = mysql_query($query_video, $dbprotect) or die(mysql_error());
$row_video = mysql_fetch_assoc($video);
$totalRows_video = mysql_num_rows($video);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
<link href="webtv/css/MooDropMenu.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="webtv/lib/mootools-1.2.5-core.js"></script>
<script type="text/javascript" src="webtv/lib/MooDropMenu.js"></script>
<script type="text/javascript" src="webtv/lib/setvideoListe.js"></script>
<script type="text/javascript" src="webtv/lib/setvideo.js"></script>
<style type="text/css">
html {
height:100%;
background:#000 url(images/bg1.jpg) right bottom no-repeat;
color:#FFF;
}
</style>
</head>
<body>
<div id="logo"><a href="http://www.section-paloise.com" target="_blank"><img src="images/logo_vert.png" border="0" /></a></div>
<div id="menu_section">
<ul id="nav">
<?php do { ?>
<li><a href="#"><?php echo $row_parents['nom']; ?></a>
<?php } while ($row_parents = mysql_fetch_assoc($parents)); ?>
<ul>
<?php do { ?>
<li> <a href="#<?php echo $row_enfants['nom']; ?>" onClick="setVideoListe('<?php echo $row_enfants['nom']; ?>', '<?php echo $num++; ?>')"><?php echo $row_enfants['nom']; ?></a>
<?php } while ($row_enfants = mysql_fetch_assoc($enfants)); ?>
<ul>
<?php if (($row_video['type']= $typ)&&($row_video['lieu']=$ou)) { ?>
<li>a href="#<?php echo $row_enfants['nom']; ?>" onClick="setVideoListe('<?php echo $row_enfants['nom']; ?>', '<?php echo $num++; ?>')"><?php echo $num++; ?> - <?php echo $row_video['titre']; ?><br/>
<span class="stitre">par <?php echo $row_lieux['auteur']; ?>
<?php } ?>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
<?php
mysql_free_result($parents);
mysql_free_result($enfants);
mysql_free_result($video);
?>
Hors ligne
et le problème est reglé.
a++
Hors ligne
$type=addslaches($type)
$ou=addslaches($ou)
$query_video = "SELECT id,type,titre,auteur FROM videos WHERE videos.type='$typ' AND videos.lieu='$ou'";
et le problème est reglé.
a++
toujours pas
Hors ligne
franchement alambra !!!
tu aurais pu trouver tout seul
addslashes
a++
Hors ligne
Moralité, si les tables étaient en formes normales avec des tables type et lieu dont les identifiants étaient des clés étrangères dans la table videos on n'en serait pas là.
En outre, mettre les items d'un menu dans une table pour reconstruire un menu, qui est souvent la partie la plus invariante, dynamiquement, c'est du grand n'importe quoi contre-productif.
Enfin, moi je dis ça, je ne dis rien, si ça vous amuse de surcharger les serveurs avec des requêtes inutiles et des données redondantes, libre à vous.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonsoir,
Juste un petit mot vite fait, car j'ai encore du taf..
L'avantage quand même de mettre les éléments d'un menu et des fonctionnalités respectives des menus (ou sous menus) dans une table, car il y en a et sont pas des moindres, sont les suivants (liste non exhaustive) :
- Modification du contenu des titres menus, de leur quantités et de leur relations, le tout sans toucher au code PHP.
- Contrôle des droits d'accès utilisateur et/ou groupe d'utilisateurs en lecture/modification/suppression/ajout des fonctionnalités des menus, et gestion de tout ceci, sans toucher au code PHP
- etc...
++
EDIT: Certes mes propos sont valables dans un contexte applicatif, et les propos de MK sont pour les autres cas, mais bon c'etait histoire de compléter un peu, tout ça...
Dernière modification par Jc (29-06-2011 20:11:20)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
D'autant que les points évoqués peuvent tout à fait très bien se concilier avec les deux points de vue.
On met les données dans une table, à chaque modification de la table, mais seulement à ce moment-là, on régénère les menus dans un fichier include à partir de requêtes.
On garde la souplesse sans toucher au code PHP et on ne surcharge pas le serveur à chaque appel du menu (et ils sont très fréquents).
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour les codeurs,
J'avoue que je ne suis pas une as du code et que j'ai encore beaucoup de chose à apprendre.
Du coup, j'ai encore tout chagé :
2 tables (menus :"items parents" et videos)
$req1="SELECT * FROM menus";
$res1=@mysql_query($req1,$dbprotect);
if(!$res1)
{
echo "Lecture du 1 impossible";
}
else
{
while($a = mysql_fetch_array($res1))
{
$types= $a[nom];
$typ=addslashes($types);
?>
<li><a href="#"><?php echo ''.$a['nom'].'' ?></a>
<ul>
<?php
$req2="SELECT * FROM videos WHERE type='$typ' AND etat=1 ORDER by 'lieu'";
$res2=@mysql_query($req2,$dbprotect);
$i=0;
$num=1;
if(!$res2)
{
echo "Lecture du 2 impossible";
}
else
{
while($b = mysql_fetch_array($res2))
{
?>
<li><a href="#<?php echo ''.$b['lieu'] ?>" onClick="setVideoListe('<?php echo ''.$b['lieu'].''?>', '<?php echo $i++; ?>')"><?php echo ''.$b['lieu'].'' ?></a>
<?php // }
?>
<ul>
<li><a href="#<?php echo ''.$b['lieu'].'' ?>" onClick="setVideoListe('<?php echo ''.$b['lieu'].''?>', '<?php echo $i++; ?>')"><?php echo $num++; ?> <?php echo ''.$b['titre'].'' ?><br/>
<span class="stitre"> par <?php echo ''.$b['auteur'].'' ?></span></a></li>
</ul> <?php } ?> </li></ul> <?php } ?>
</li> <?php }
}
?>
</ul>
</div>
Ce code fonctionne et m'affiche bien les $types comme parents et les $lieux comme enfants.
Par contre si j'ai plusieurs vidéo pour un même lieu, au lieu de les grouper ( group by lieu), il affiche plusieurs fois le "lieu" enfant.
Quand je tente un "GROUP BY lieu" il ne m'en affiche plus que le premier résultat.
J'ai du rater une boucle ou autre
voir ici
Hors ligne
Mon but est juste d'afficher et de gérer les ajouts dans les menus dynamiquement.
Il y à peut être une façon plus simple d'y parvenir en évitant les requêtes superflues, dans ce cas, je suis tout ouïe.
Sinon ma mise en forme est réussie grâce à :
$req1="SELECT * FROM menus";
$res1=@mysql_query($req1,$dbprotect);
if(!$res1)
{
echo "Lecture du 1 impossible";
}
else
{
while($a = mysql_fetch_array($res1))
{
$types= $a[nom];
$typ=addslashes($types);
?>
<li><a href="#"><?php echo ''.$a['nom'].'' ?></a>
<ul>
<?php
$tab=array();
$req2="SELECT DISTINCT lieu FROM videos WHERE type='$typ'";
$res2=@mysql_query($req2,$dbprotect);
if(!$res2)
{
echo "Lecture du 2 impossible";
}
else
{
while($b = mysql_fetch_array($res2))
{
$i=1;
$num=1;
$lieux= $b[lieu];
$lieu=addslashes($lieux);
?>
<li><a href="#<?php echo ''.$b['lieu'] ?>" onClick="setVideoListe('<?php echo ''.$b['lieu'].''?>', '<?php echo $i++; ?>')"><?php echo ''.$b['lieu'].'' ?></a>
<?php // foreach ($b as $lieu) { ?>
<ul>
<?php $req3="SELECT * FROM videos WHERE type='$typ' AND lieu='$lieu' AND etat=1 ORDER BY lieu";
$res3=@mysql_query($req3,$dbprotect);
if(!$res3)
{
echo "Lecture du 3 impossible";
}
else
{
while($c = mysql_fetch_array($res3))
{
?>
<li><a href="#<?php echo ''.$b['lieu'].'' ?>" onClick="setVideoListe('<?php echo ''.$b['lieu'].''?>', '<?php echo $i++; ?>')"><?php echo $num++; ?> <?php echo ''.$c['titre'].'' ?><br/>
<span class="stitre"> par <?php echo ''.$c['auteur'].'' ?></span></a></li> <?php } ?>
</ul> <?php }?></li> <? } ?> <?php } ?></ul></li> <?php } ?>
<?php } ?>
</ul>
</div>
Dernière modification par allhambra (05-07-2011 14:13:00)
Hors ligne
Pages :: 1