Page 1 sur 2
simplifier script PHP
Posté : 26 août 2015, 23:36
par bob56@
Bonjour
Voilà mon problème:
J'ai un script qui fonctionne pour changer les tarifs , mais si je vais jusqu'au bout je vais avoir une centaine de lignes
envoi requête
// envoie requête
$req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
$req2 = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
$req3 = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
Je pense qu'il y a une autre solution plus simple.
Par avance merci
<?php
// on se connecte à MySQL
$db = mysql_connect ('127.0.0.1', 'root', '');
// on seléctionne la base
mysql_select_db('le-site',$db);
// on crée la requete SQL
$sql = "SELECT menu_enfant, formule_midi, supplement_frites FROM table_tarifs";
// envoie requête
$req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
$req2 = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
$req3 = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
// on ferme la connexion à mysql
//mysql_close();
?>
<p><i>Les nouveautés</i></p>
<div class="contenu_gauche_panneau_gauche">
<table>
<tr>
<td>Menu enfant</td><td><?php while($data = mysql_fetch_array($req)) echo ''.$data['menu_enfant'].'';?></td>
</tr>
<tr>
<td>Formule midi</td><td><?php while($data = mysql_fetch_array($req2)) echo ''.$data['formule_midi'].'';?></td>
</tr>
<tr>
<td>Supplément frites</td><td><?php while($data = mysql_fetch_array($req3)) echo ''.$data['supplement_frites'].'';?></td>
</tr>
<tr>
<td><p>crudités : salade, tomate, oignon, cornichon (gratuit) </p></td>
etc.................
Re: simplifier script PHP
Posté : 26 août 2015, 23:55
par or 1
cela fonctionnera aussi bien avec une seule requete sql.
s'il n'y a qu'un seul résultat, alors les while sont superflus.
Re: simplifier script PHP
Posté : 27 août 2015, 00:24
par Megadeth
cela fonctionnera aussi bien avec une seule requete sql.
s'il n'y a qu'un seul résultat, alors les while sont superflus.
+1
Re: simplifier script PHP
Posté : 27 août 2015, 10:16
par Ryle
Bonjour,
S'il n'y a qu'une seule ligne d'enregistrement retourné, il n'est pas nécessaire de faire plusieurs requête et des boucles :
<?php (...)
$req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
// on ferme la connexion à mysql
//mysql_close();
if ($data = mysql_fetch_assoc($req)) { // s'il y a (au moins) un résultat
?>
<p><i>Les nouveautés</i></p>
<div class="contenu_gauche_panneau_gauche">
<table>
<tr>
<td>Menu enfant</td><td><?php echo $data['menu_enfant'];?></td>
</tr>
<tr>
<td>Formule midi</td><td><?php echo $data['formule_midi'];?></td>
</tr>
<tr>
<td>Supplément frites</td><td><?php echo $data['supplement_frites'];?></td>
</tr>
...
<? } // fin du if ?>
Si par contre tu as plusieurs lignes d'enregistrement et plusieurs valeurs possible pour chaque bloc, Le mieux sera alors de ne faire qu'une seule requête, stocker le résultat de celle-ci dans un tableau php, puis d'exploiter les données contenues dans ce tableau sans avoir à solliciter ta base à nouveau

Re: simplifier script PHP
Posté : 27 août 2015, 10:59
par bob56@
oui Ryle j'ai plusieurs lignes.
Je vais étudier la question car récupérer le résultat dans un tableau ne me simplifie pas le travail.
sinon je vais copier ma centaines de lignes pour punition
Merci à tous !
Re: simplifier script PHP
Posté : 27 août 2015, 12:31
par Ryle
Si si, le tableau va te simplifier le travail, il s'alimente très facilement avec un while, et peut encore plus facilement être lu et affiché grâce à implode()
<?php (...)
$sql = "SELECT menu_enfant, formule_midi, supplement_frites FROM table_tarifs";
// envoie requête
$req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
// on ferme la connexion à mysql
mysql_close();
$tarifs = array( // déclaration du tableau des tarifs
'menu_enfant' => array()
, 'formule_midi' => array()
, 'supplement_frites' => array()
);
while ($data = mysql_fetch_assoc($req)) { // alimentation du tableau
$tarifs['menu_enfant'][] = $data['menu_enfant'];
$tarifs['formule_midi'][] => $data['formule_midi'];
$tarifs['supplement_frites'][] => $data['supplement_frites'];
}
?>
<p><i>Les nouveautés</i></p>
<div class="contenu_gauche_panneau_gauche">
<table>
<tr>
<td>Menu enfant</td><td><?php echo implode($tarifs['menu_enfant'], '<br />');?></td>
</tr>
<tr>
<td>Formule midi</td><td><?php echo implode($tarifs['formule_midi'], '<br />');?></td>
</tr>
<tr>
<td>Supplément frites</td><td><?php echo implode($tarifs['supplement_frites'], '<br />');?></td>
</tr>
...
Re: simplifier script PHP
Posté : 27 août 2015, 13:26
par bob56@
OK, je vais travailler là dessus dès moment libre. Pris pour les jours à venir par mon rucher.
A bientôt !
Re: simplifier script PHP
Posté : 30 août 2015, 19:26
par bob56@
Me revoilà le miel est en pot
Il doit y avoir un petit problème au niveau du script ? Fatal error: Cannot use [] for reading > au niveau alimentation tableau
Donc j'ai recréé une base et les pages PHP pour comprendre d'ou vient l'erreur.
avec ce script
modifier au niveau alimentation tableau pas de message d'erreur j'ai la page qui s'ouvre dans le navigateur mais aucun retour de données avec implode ?
<?php
// connextion base
$base = mysql_connect ('127.0.0.1', 'root', '');
mysql_select_db ('essais_tarifs', $base) ;
$sql = "SELECT f1, f2, f3 FROM table_tarifs";
// envoie requête
$req = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
// on ferme la connexion à mysql
mysql_close();
$tarifs = array( // déclaration du tableau des tarifs
'f1' => array()
, 'f2' => array()
, 'f3' => array()
);
while ($data = mysql_fetch_assoc($req)) { // alimentation du tableau
// $tarifs['f1'][] = $data['f1'];
// $tarifs['f2'][] => $data['f2'];
// $tarifs['f3'][] => $data['f3'];
$tarifs['f1'] == $data['f1'];
$tarifs['f2'] == $data['f2'];
$tarifs['f3'] == $data['f3'];
}
?>
<p><i>Les nouveautés</i></p>
<div class="contenu_gauche_panneau_gauche">
<table>
<tr>
<td>Menu enfant</td><td><?php echo implode($tarifs['f1'], '<br />');?></td>
</tr>
<tr>
<td>Formule midi</td><td><?php echo implode($tarifs['f2'], '<br />');?></td>
</tr>
<tr>
<td>Supplément frites</td><td><?php echo implode($tarifs['f3'], '<br />');?></td>
</tr>
Re: simplifier script PHP
Posté : 30 août 2015, 20:15
par martineP
Peut etre que si tu mets ta derniere accolade a la fin de ton script, tu verras qque chose ?
Re: simplifier script PHP
Posté : 30 août 2015, 20:36
par bob56@
Bonsoir martine,
et non rien de visible
Re: simplifier script PHP
Posté : 30 août 2015, 20:50
par martineP
Je suis archi nulle dans les tableaux, mais j'essaierais de faire un print_r($data['f4']); voir ce qui s'affiche :/
Tu veux afficher un tableau dans un tableau, c'est ca ?
Re: simplifier script PHP
Posté : 30 août 2015, 21:50
par bob56@
Excuse moi, f4 n'existe pas dans mon essai, j'ai rectifier mon post précédent !
donc avec print_r($data['f3']); j'ai le chiffre 10
chiffre qui correspond bien à celui de ma base de donnés
je veux afficher cette valeur dans ma page php
Re: simplifier script PHP
Posté : 31 août 2015, 10:38
par Megadeth
Salut,
Si tu as un tableau, il faut parcourir ce dernier.
Une piste :
for($i=0; $i<count($array); $i++)
{
echo "Id numéro $i vaut ".$id[$i]."<br/>";
}
on peut le faire avec while,
Sinon jette un oeil aux fonctions implode, explode et in_array qui sont bien utiles
Mega

Re: simplifier script PHP
Posté : 31 août 2015, 12:28
par Ryle
Bonjour,
Ton alimentation de la variable $tarifs n'est effectivement pas bonne :
while ($data = mysql_fetch_assoc($req)) { // alimentation du tableau
$tarifs['f1'][] = $data['f1']; // créer un nouvel index à la fin du tableau $tarifs['f1'], et y affecte la valeur de $data['f1']
$tarifs['f2'][] = $data['f2'];
$tarifs['f3'][] = $data['f3'];
}
"=" est l'opérateur d'affectation,
"==" est l'opérateur de comparaison,
"=>" permet d'associer une valeur à un index dans un tableau associatif
la syntaxe " $tarifs = array ('f1' => array(), ...) " revient à dire que $tarifs est un tableau contenant un index "f1", qui est lui même un sous-tableau
enfin, " $tarifs['f1'][] = xxx ", signifie que l'on créer un nouvel index dans le sous-tableau $tarifs['f1'] et que l'on y affecte la valeur xxx
Re: simplifier script PHP
Posté : 31 août 2015, 13:31
par bob56@
Salut Ryle ,
j'ai bien essayé ton script mais lorsque je met => j'ai ce message d'erreur :
Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW) in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\essai_tarifs\index.php on line 69