php: factorisation de requêtes sql

gaston gaston
1 523 contributions
Membre depuis le 01/03/2001
Envoyé le 23/09/2017 à 12:10


Bonjour,

dans une page, je peux afficher 3 versions différentes d'un texte mis en base de données, selon une variable d'url.
j'ai donc fait 3 requêtes qui sont appelées par la condition de la variable d'url.
ça fonctionne bien...ou presque
Pour débuguer, je veux simplifier mon code en le factorisant le plus possible, seulement voilà: si je sais faire un include pour une fonction qui se répète exactement à l'identique, pour une requête identique mais qui ne donne pas les mêmes résultats, j'ai plus de mal.
Voici mon code, simplifié au maximum

<?php include('connexion.php');
$sql = 'SELECT * FROM t_p2018 ORDER BY num_rep ASC';
$retour =mysql_query($sql);
while ($donnees = mysql_fetch_array($retour))
{
if ($_GET['version'] == 3)
{
// je n'ai pas indiqué la mise en forme mais elle change selon le typ
if $donnees['typ']=="t1"
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
if $donnees['typ']=="t2"
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
if $donnees['typ']=="didas"
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
if $donnees['typ']=="replik"
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
}

if ($_GET['version'] == 2)
{
if $donnees['typ']=="t1"
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
}
if $donnees['typ']=="t2"
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
}
if $donnees['typ']=="didas"
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
}
}

if ($_GET['version'] == 1)
{
if $donnees['typ']=="t1"
{
echo $donnees['numero'] ." - ";
echo $donnees['traduction'] ."<br />";
}
if $donnees['typ']=="t2"
{
echo $donnees['numero'] ." - ";
echo $donnees['traduction'] ."<br />";
}
if $donnees['typ']=="didas"
{
echo $donnees['numero'] ." - ";
echo $donnees['traduction'] ."<br />";
}
if $donnees['typ']=="didas
{
echo $donnees['numero'];
echo $donnees['traduction'] ."<br />";
}
}
} ?>


alors ? une idée ? Bon il est vrai que j'aurais pu organiser ma base de données beaucoup mieux en éclatant cette table en plusieurs, mais bon j'ai pas envie de tout me retaper
carpe diem
Bipbipcoyote Bipbipcoyote
3 762 contributions
Membre depuis le 06/03/2001
Envoyé le 24/09/2017 à 10:43 Modifié par Bipbipcoyote


Bonjour,
Juste une idée, pourquoi ne pas ajouter un champ "Type" à la BDD et d'ajouter une clause WHERE Type = $_GET['version'] AND ..... à ta requête sql ? cela t'évite de répéter tous les IF
Je ne sais pas non plus ce qui provoque l'envoi du ou des paramètres, mais si c'est le fruit d'un formulaire, le mieux est d'utiliser $_POST cela évite de devoir ajouter les paramètres dans l'url
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
gaston gaston
1 523 contributions
Membre depuis le 01/03/2001
Envoyé le 19/10/2017 à 22:36 Modifié par gaston


Bonjour,

la version vient d'un lien de menu où l'on choisit la version qu'on veut afficher
selon la version on n'affiche pas tout à fait les mêmes données: il y a la langue d'origine et la traduction française, les 3 versions sont:
1 langue originale
2 français
3 les deux

le type:
la bdd contient une pièce de théâtre que j'y ai enregistrée, où il y a donc 1 ligne par titre, par didascalie(commentaire) ou par réplique, ces 3 différents types n'étant pas formatés de la même manière dans le css lors de la présentation

bien sûr, je me suis rendu compte bien après avoir tout saisi que j'aurais ptêt dû pas organiser ma bdd de cette manière, mais bon, c'est fait c'est fait, pas le temps de tout recommencer

carpe diem
Bipbipcoyote Bipbipcoyote
3 762 contributions
Membre depuis le 06/03/2001
Envoyé le 20/10/2017 à 13:00 Modifié par Bipbipcoyote


Bonjour,
Tu utilises mysql sans doute, donc tu peux ajouter un ou des champs via phpMyAdmin... donc ajoute un champ "Langues" en numérique (1,2 ou 3) et pose ta condition WHERE dessus, il ne devrait pas y avoir de souci
Quoique ton IF sur le type, le fait déjà... donc tu peux simplifier ton code avec un WHERE $donnees['typ']== ... mais pour le traitement des données, cela ne change rien, la charge de travail sur le serveur est peu de chose, à moins d'avoir des milliers d'enregistrements. Je ne pense pas que ce soit le cas
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions

Discussion trop ancienne

Cette discussion a été automatiquement fermée car elle n'a plus reçue de nouveau message depuis trop longtemps.

Nous vous suggérons de créer un nouveau message

« Retour sur la liste des messages de ce forum