[RESOLU] simplifier script PHP

Eléphant du PHP | 172 Messages

26 août 2015, 23:36

Bonjour :D

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.................

Mammouth du PHP | 2703 Messages

26 août 2015, 23:55

cela fonctionnera aussi bien avec une seule requete sql.
s'il n'y a qu'un seul résultat, alors les while sont superflus.

Mammouth du PHP | 737 Messages

27 août 2015, 00:24

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
Dyslexics are teople poo

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 août 2015, 10:16

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 172 Messages

27 août 2015, 10:59

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 !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 août 2015, 12:31

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>
...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 172 Messages

27 août 2015, 13:26

OK, je vais travailler là dessus dès moment libre. Pris pour les jours à venir par mon rucher.

A bientôt !

Eléphant du PHP | 172 Messages

30 août 2015, 19:26

Me revoilà le miel est en pot :D

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>
Modifié en dernier par bob56@ le 30 août 2015, 21:48, modifié 4 fois.

Eléphanteau du PHP | 17 Messages

30 août 2015, 20:15

Peut etre que si tu mets ta derniere accolade a la fin de ton script, tu verras qque chose ?

Eléphant du PHP | 172 Messages

30 août 2015, 20:36

Bonsoir martine,

et non rien de visible

Eléphanteau du PHP | 17 Messages

30 août 2015, 20:50

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 ?

Eléphant du PHP | 172 Messages

30 août 2015, 21:50

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

Mammouth du PHP | 737 Messages

31 août 2015, 10:38

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
;)
Dyslexics are teople poo

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 août 2015, 12:28

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 172 Messages

31 août 2015, 13:31

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