Bdd relationnelles
Résolu/Fermé
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
-
13 mars 2008 à 17:11
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 16 avril 2008 à 18:53
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 16 avril 2008 à 18:53
4 réponses
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
14 mars 2008 à 13:26
14 mars 2008 à 13:26
up
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
14 mars 2008 à 13:44
14 mars 2008 à 13:44
Bonjour,
Il te manque qqch dans la clause WHERE pour préciser comment tu fais correspondre les lignes dans tes trois tables.
Par exemple (il faudrait mieux connaître le schéma de ta base pour être certain) :
WHERE item.object='".$what."' AND position.object=item.object AND style.object=item.objet
Ta clause WHERE actuelle provoque un "produit cartésien" qui génére beaucoup d'enregistrement.
Il te manque qqch dans la clause WHERE pour préciser comment tu fais correspondre les lignes dans tes trois tables.
Par exemple (il faudrait mieux connaître le schéma de ta base pour être certain) :
WHERE item.object='".$what."' AND position.object=item.object AND style.object=item.objet
Ta clause WHERE actuelle provoque un "produit cartésien" qui génére beaucoup d'enregistrement.
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
14 mars 2008 à 15:28
14 mars 2008 à 15:28
Bonjour Croy, et merci de te pencher sur mon problème^^
J'ai fais la modification que tu m'as indiquée, et voici ce que je constate:
-sous myadmin6 en requête sql ça fonctionne impecc, ça me récupère la ligne comme il faut^^
-sous un navigateur, le problème persiste :s...
En fait, cette requête est incluse dans une fonction, et cette fonction est appellée via un mysql_fetch_array qui est supposé me balayer les enregistrements de la bdd, donc je suppose que le problème viendrait de l'appel à cette fonction^^ qu'en pense tu? Voici l'appel:
<?php
$sqlCALLER="SELECT item.document AS itdoc,item.object AS itobj, position.document AS posdoc, position.object AS posobj,
style.document AS stdoc, style.object AS stobj
FROM item,position,style
WHERE item.document='main' AND position.document='main' AND style.document='main'";
$query=mysql_query($sqlCALLER);
?>
<style type="text/css">
<?php
while($recall=mysql_fetch_array($query))
{
bckplus($recall['itobj'],main);
};
J'ai fais la modification que tu m'as indiquée, et voici ce que je constate:
-sous myadmin6 en requête sql ça fonctionne impecc, ça me récupère la ligne comme il faut^^
-sous un navigateur, le problème persiste :s...
En fait, cette requête est incluse dans une fonction, et cette fonction est appellée via un mysql_fetch_array qui est supposé me balayer les enregistrements de la bdd, donc je suppose que le problème viendrait de l'appel à cette fonction^^ qu'en pense tu? Voici l'appel:
<?php
$sqlCALLER="SELECT item.document AS itdoc,item.object AS itobj, position.document AS posdoc, position.object AS posobj,
style.document AS stdoc, style.object AS stobj
FROM item,position,style
WHERE item.document='main' AND position.document='main' AND style.document='main'";
$query=mysql_query($sqlCALLER);
?>
<style type="text/css">
<?php
while($recall=mysql_fetch_array($query))
{
bckplus($recall['itobj'],main);
};
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
>
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
14 mars 2008 à 15:43
14 mars 2008 à 15:43
Dans ton script, la clause where n'a pas été modifiée et génère donc toujours un produit cartésien.
Modifie la comme indiqué plus haut.
La suite de ton script est un peu bizarre : pourquoi une balise <style à cet endroit ?
Pourrais-tu me donner le source de ta fonction bckplus.
Modifie la comme indiqué plus haut.
La suite de ton script est un peu bizarre : pourquoi une balise <style à cet endroit ?
Pourrais-tu me donner le source de ta fonction bckplus.
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
>
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
14 mars 2008 à 15:48
14 mars 2008 à 15:48
Okay, j't'envoi la sauce^^
Comme tu as déjà du le comprendre, il s'agit de récupérer dynamiquement les propriétés css d'une page, d'où la présence d'une balise "<style" dans le script^^
J'ai déjà fait le test avec une seule table, qui enregistre quelques propriétés css, et les restituer dynamiquement: ça fonctionne^^ c'est juste avec plusieurs tables que ça fonctionne pas, or j'ai du en créer plusieurs pour conserver l'intérêt de ce système avec les css^^
function bckplus($what,$where)
{
//on récupère les propriétés en fonction de l'objet et du document auquel il est associé
$sql="SELECT item.id AS itid,item.document AS itdoc,item.object AS itobj,item.backgroundattachment AS itbckatt,item.backgroundrepeat AS itbckrep,
item.backgroundcolor AS itbckcolor,item.backgroundimage AS itbckimg,item.border AS itborder,item.listype AS itlistype,
position.id AS posid, position.document AS posdoc, position.object AS posobj, position.position AS pospos, position.floater AS posflo,
position.zindex AS poszin, position.lefter AS poslef, position.toper AS postop, position.righter AS posrig, position.bottomer AS posbot,
position.margin AS posmar, position.padding AS pospad, position.width AS poswid, position.height AS poshei,
style.id AS stid, style.document AS stdoc, style.object AS stobj, style.fontfamily AS stff, style.fontsize AS stfsz, style.fontstretch AS stfstr,
style.fontstyle AS stfst, style.fontvariant AS stfv, style.fontweight AS stfw, style.color AS stcol, style.textdecoration AS sttd,
style.textalign AS stta, style.texttransform AS sttt, style.letterspacing AS stls, style.wordspacing AS stws FROM item,position,style
WHERE item.object='".$what."' AND position.object=item.object AND style.object=item.object
AND item.document='".$where."' AND position.document=item.document AND style.document=item.document";
$query=mysql_query($sql);
while($css=mysql_fetch_array($query))
{
if($css['itobj'])
{
echo $css['itobj']." { ";
};
if($css['itbckatt'])
{
echo "background-attachment:".$css['itbckatt']."; ";
};
if($css['itbckrep'])
{
echo "background-repeat:".$css['itbckrep']."; ";
};
if($css['itbckcol'])
{
echo "background-color:".$css['itbckcol']."; ";
};
if($css['itbckimg'])
{
echo "background-image:url('".$css['itbckimg']."'); ";
};
if($css['itborder'])
{
echo "border:".$css['itborder']."; ";
};
if($css['itlistype'])
{
echo "list-style-type:".$css['itlistype']."; ";
};
if($css['pospos'])
{
echo "position:".$css['pospos']."; ";
};
if($css['posflo'])
{
echo "float:".$css['posflo']."; ";
};
if($css['poszin'])
{
echo "z-index:".$css['poszin']."; ";
};
if($css['poslef'])
{
echo "left:".$css['poslef']."; ";
};
if($css['postop'])
{
echo "top:".$css['postop']."; ";
};
if($css['posrig'])
{
echo "right:".$css['posrig']."; ";
};
if($css['posbot'])
{
echo "bottom:".$css['posbot']."; ";
};
if($css['posmar'])
{
echo "margin:".$css['posmar']."; ";
};
if($css['pospad'])
{
echo "padding:".$css['pospad']."; ";
};
if($css['poswid'])
{
echo "width:".$css['poswid']."; ";
};
if($css['poshei'])
{
echo "height:".$css['poshei']."; ";
};
if($css['stff'])
{
echo "font-family:".$css['stff']."; ";
};
if($css['stfsz'])
{
echo "font-size:".$css['stfsz']."; ";
};
if($css['stfstr'])
{
echo "font-stretch:".$css['stfstr']."; ";
};
if($css['stfst'])
{
echo "font-style:".$css['stfst']."; ";
};
if($css['stfv'])
{
echo "font-variant:".$css['stfv']."; ";
};
if($css['stfw'])
{
echo "font-weight:".$css['stfw']."; ";
};
if($css['stcol'])
{
echo "color:".$css['stcol']."; ";
};
if($css['sttd'])
{
echo "text-decoration:".$css['sttd']."; ";
};
if($css['stta'])
{
echo "text-align:".$css['stta']."; ";
};
if($css['sttt'])
{
echo "text-transform:".$css['sttt']."; ";
};
if($css['stls'])
{
echo "letter-spacing:".$css['stls']."; ";
};
if($css['stws'])
{
echo "word-spacing:".$css['stws']."; ";
};
//fin de la ligne de propriétés
echo " }";
?>
<!-- espace qui permet le saut à la ligne entre 2 css^^ -->
<?php
};//fin du while de récupération des propriétés
};//fin de la fonction bckplus qui récupère les propriétés de what et where
//fonction de récupération de chaque élément de css
$sqlCALLER="SELECT item.document AS itdoc,item.object AS itobj, position.document AS posdoc, position.object AS posobj,
style.document AS stdoc, style.object AS stobj
FROM item,position,style
WHERE item.document='main' AND position.document='main' AND style.document='main'";
$query=mysql_query($sqlCALLER);
?>
<style type="text/css">
<?php
//cette fonction retourne le résultat multiplié par le nombre de tables.
while($recall=mysql_fetch_array($query))
{
bckplus($recall['itobj'],main);
};
?>
</style>
Comme tu as déjà du le comprendre, il s'agit de récupérer dynamiquement les propriétés css d'une page, d'où la présence d'une balise "<style" dans le script^^
J'ai déjà fait le test avec une seule table, qui enregistre quelques propriétés css, et les restituer dynamiquement: ça fonctionne^^ c'est juste avec plusieurs tables que ça fonctionne pas, or j'ai du en créer plusieurs pour conserver l'intérêt de ce système avec les css^^
function bckplus($what,$where)
{
//on récupère les propriétés en fonction de l'objet et du document auquel il est associé
$sql="SELECT item.id AS itid,item.document AS itdoc,item.object AS itobj,item.backgroundattachment AS itbckatt,item.backgroundrepeat AS itbckrep,
item.backgroundcolor AS itbckcolor,item.backgroundimage AS itbckimg,item.border AS itborder,item.listype AS itlistype,
position.id AS posid, position.document AS posdoc, position.object AS posobj, position.position AS pospos, position.floater AS posflo,
position.zindex AS poszin, position.lefter AS poslef, position.toper AS postop, position.righter AS posrig, position.bottomer AS posbot,
position.margin AS posmar, position.padding AS pospad, position.width AS poswid, position.height AS poshei,
style.id AS stid, style.document AS stdoc, style.object AS stobj, style.fontfamily AS stff, style.fontsize AS stfsz, style.fontstretch AS stfstr,
style.fontstyle AS stfst, style.fontvariant AS stfv, style.fontweight AS stfw, style.color AS stcol, style.textdecoration AS sttd,
style.textalign AS stta, style.texttransform AS sttt, style.letterspacing AS stls, style.wordspacing AS stws FROM item,position,style
WHERE item.object='".$what."' AND position.object=item.object AND style.object=item.object
AND item.document='".$where."' AND position.document=item.document AND style.document=item.document";
$query=mysql_query($sql);
while($css=mysql_fetch_array($query))
{
if($css['itobj'])
{
echo $css['itobj']." { ";
};
if($css['itbckatt'])
{
echo "background-attachment:".$css['itbckatt']."; ";
};
if($css['itbckrep'])
{
echo "background-repeat:".$css['itbckrep']."; ";
};
if($css['itbckcol'])
{
echo "background-color:".$css['itbckcol']."; ";
};
if($css['itbckimg'])
{
echo "background-image:url('".$css['itbckimg']."'); ";
};
if($css['itborder'])
{
echo "border:".$css['itborder']."; ";
};
if($css['itlistype'])
{
echo "list-style-type:".$css['itlistype']."; ";
};
if($css['pospos'])
{
echo "position:".$css['pospos']."; ";
};
if($css['posflo'])
{
echo "float:".$css['posflo']."; ";
};
if($css['poszin'])
{
echo "z-index:".$css['poszin']."; ";
};
if($css['poslef'])
{
echo "left:".$css['poslef']."; ";
};
if($css['postop'])
{
echo "top:".$css['postop']."; ";
};
if($css['posrig'])
{
echo "right:".$css['posrig']."; ";
};
if($css['posbot'])
{
echo "bottom:".$css['posbot']."; ";
};
if($css['posmar'])
{
echo "margin:".$css['posmar']."; ";
};
if($css['pospad'])
{
echo "padding:".$css['pospad']."; ";
};
if($css['poswid'])
{
echo "width:".$css['poswid']."; ";
};
if($css['poshei'])
{
echo "height:".$css['poshei']."; ";
};
if($css['stff'])
{
echo "font-family:".$css['stff']."; ";
};
if($css['stfsz'])
{
echo "font-size:".$css['stfsz']."; ";
};
if($css['stfstr'])
{
echo "font-stretch:".$css['stfstr']."; ";
};
if($css['stfst'])
{
echo "font-style:".$css['stfst']."; ";
};
if($css['stfv'])
{
echo "font-variant:".$css['stfv']."; ";
};
if($css['stfw'])
{
echo "font-weight:".$css['stfw']."; ";
};
if($css['stcol'])
{
echo "color:".$css['stcol']."; ";
};
if($css['sttd'])
{
echo "text-decoration:".$css['sttd']."; ";
};
if($css['stta'])
{
echo "text-align:".$css['stta']."; ";
};
if($css['sttt'])
{
echo "text-transform:".$css['sttt']."; ";
};
if($css['stls'])
{
echo "letter-spacing:".$css['stls']."; ";
};
if($css['stws'])
{
echo "word-spacing:".$css['stws']."; ";
};
//fin de la ligne de propriétés
echo " }";
?>
<!-- espace qui permet le saut à la ligne entre 2 css^^ -->
<?php
};//fin du while de récupération des propriétés
};//fin de la fonction bckplus qui récupère les propriétés de what et where
//fonction de récupération de chaque élément de css
$sqlCALLER="SELECT item.document AS itdoc,item.object AS itobj, position.document AS posdoc, position.object AS posobj,
style.document AS stdoc, style.object AS stobj
FROM item,position,style
WHERE item.document='main' AND position.document='main' AND style.document='main'";
$query=mysql_query($sqlCALLER);
?>
<style type="text/css">
<?php
//cette fonction retourne le résultat multiplié par le nombre de tables.
while($recall=mysql_fetch_array($query))
{
bckplus($recall['itobj'],main);
};
?>
</style>
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
14 mars 2008 à 16:30
14 mars 2008 à 16:30
Première chose à faire (recommandation) clarifier ton code en le présentant mieux : tabulations montrant les blocs logiques, suppression des accolades et ; inutiles....
AInsi :
if($css['stfst'])
{
echo "font-style:".$css['stfst']."; ";
};
sera remplacé par :
if( $css[ 'stfst' ] )
echo "font-style:" . $css[ 'stfst' ] . "; ";
Ceci permet de mieux comprendre la structure.
Il me semble qu'il devrait être prossible de faire un seul select :
$sql="SELECT item.id AS itid,item.document AS itdoc,item.object AS itobj" // ici variables supprimées pour mieux voir
. " FROM item,position,style"
. " WHERE item.document='main' AND position.document='main' AND style.document='main'"
. " AND position.object=item.object AND style.object=item.object";
Puis ensuite de boucler directement sur les résultats. Peutêtre un ORDER BY sera nécessaire.
Je te recommande d'aller dans cette direction en te limitant à qqes variables pour la mise au point.
AInsi :
if($css['stfst'])
{
echo "font-style:".$css['stfst']."; ";
};
sera remplacé par :
if( $css[ 'stfst' ] )
echo "font-style:" . $css[ 'stfst' ] . "; ";
Ceci permet de mieux comprendre la structure.
Il me semble qu'il devrait être prossible de faire un seul select :
$sql="SELECT item.id AS itid,item.document AS itdoc,item.object AS itobj" // ici variables supprimées pour mieux voir
. " FROM item,position,style"
. " WHERE item.document='main' AND position.document='main' AND style.document='main'"
. " AND position.object=item.object AND style.object=item.object";
Puis ensuite de boucler directement sur les résultats. Peutêtre un ORDER BY sera nécessaire.
Je te recommande d'aller dans cette direction en te limitant à qqes variables pour la mise au point.
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
14 mars 2008 à 17:44
14 mars 2008 à 17:44
L'indentation est un réflexe long à mettre en place chez moi ;) surtout qu'il faut que j'trouve la méthode qui me correspondra le mieux^^ ceci dit, l'apprentissage de javascript que je suis depuis quelques temps m'oriente vers une méthode plus aboutie, qui n'est pas reflétée dans ce script -il est plus ancien. Ceci pour dire: tu as raison :D
Pour les expressions "if" simplifiées, c'est une méthode que j'ai déjà vue quand j'apprennais ça, mais que je n'ai pas retenue, vu que j'voulais apprendre en me consolidant de bonnes bases^^ mais je retiens, ça me sera utile pour transformer ce script -et bien d'autres^^
Pour le select et tes recommandations, je n'aurais pas l'occasion de bosser dessus avant la semaine prochaine, mais j'en prends bonne note ;) je posterais ici mes résultats :)
Cheers^^
Pour les expressions "if" simplifiées, c'est une méthode que j'ai déjà vue quand j'apprennais ça, mais que je n'ai pas retenue, vu que j'voulais apprendre en me consolidant de bonnes bases^^ mais je retiens, ça me sera utile pour transformer ce script -et bien d'autres^^
Pour le select et tes recommandations, je n'aurais pas l'occasion de bosser dessus avant la semaine prochaine, mais j'en prends bonne note ;) je posterais ici mes résultats :)
Cheers^^
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
16 avril 2008 à 18:53
16 avril 2008 à 18:53
problème résolu