8791 sujets

Développement web côté serveur, CMS

Bonjour,
je suis pas bon en php ni en base de donnée mais j'ai un truc à faire alors je viens vous voir pour une aide Smiley cligne

Je vous montre par une image ce que j'aimerai upload/6731-tarif.jpg

j'utilise ce genre de code pour afficher les produits et les prix

<div id='titre_tarifs'>
<u>Quelques Tarifs :</u>
</div>
<div id='conteneur_carte_menu'><!-------------------------------- CONTENEUR MENU -------------------------------->
<div id='carte_menu'><!-------------------------------- CONTENEUR CARTE -------------------------------->
<div id='poste_cartemenu'><!-------------------------------- CONTENEUR TITRE DE LA CARTE -------------------------------->
<div id='poste_bar'>Bar</div>
<div id='poste_snack'>Snack</div>
<div id='poste_repas'>Menu Golfeur</div>
</div><!-------------------------------- FIN CONTENEUR TITRE DE LA CARTE -------------------------------->
<div id='conteneur_cartemenu'><!-------------------------------- CONTENEUR DES PRODUITS DE LA CARTE -------------------------------->

<div id='carte_bar_produits'>
<div id='ligne_carte_produits'><i>Café</i></div>
<div id='ligne_carte_produits'><i>Pression</i></div>
<div id='ligne_carte_produits'><i>Jus de Fruit</i></div>
<div id='ligne_carte_produits'><i>Pastis</i></div>
<div id='ligne_carte_produits'><i>Whisky (baby)</i></div>
</div>
<div id='carte_bar_prix'>
<div id='ligne_carte_prix'>1.70€</div>
<div id='ligne_carte_prix'>2,20€</div>
<div id='ligne_carte_prix'>2,20€</div>
<div id='ligne_carte_prix'>2,20€</div>
<div id='ligne_carte_prix'>2,70€</div>
</div>
<div id='carte_snack_produits'>
<div id='ligne_carte_produits'><i>&nbsp;Croque Monsieur</i></div>
<div id='ligne_carte_produits'><i>&nbsp;Croque Madame</i></div>
<div id='ligne_carte_produits'><i>&nbsp;Jambon Frites</i></div>
<div id='ligne_carte_produits'><i>&nbsp;Tarte (la part)</i></div>
<div id='ligne_carte_produits'></div>
</div>
<div id='carte_snack_prix'>
<div id='ligne_carte_prix'>3,60€</div>
<div id='ligne_carte_prix'>4,60€</div>
<div id='ligne_carte_prix'>6,10€</div>
<div id='ligne_carte_prix'>1,70€</div>
<div id='ligne_carte_prix'></div>
</div>
<div id='carte_repas'>
<div id='ligne_carte_menu'><i>Plat du jour</i></div>
<div id='ligne_carte_menu'><i>Dessert</i></div>
<div id='ligne_carte_menu'><i>Boisson</i></div>
<div id='ligne_carte_menu'><i>Café</i></div>
<div id='ligne_carte_menu'>----------------</div>
<div id='ligne_carte_menu'><strong>15 €</strong></div>
</div>

</div><!-------------------------------- FIN CONTENEUR DES PRODUITS DE LA CARTE -------------------------------->


Bien vous le comprenez j'aimerai avoir une partie admin pour pouvoir changer éventuellement les produit mais surtout les prix Smiley confus

Merci pour votre aide
1- Partie mySQL

Pour faire ca, il ne te faut a priori qu'une table (disons "tableProduit") avec les champs suivants :
- nomProduit
- prixProduit
- categorieProduit (ici mettre genre un entier qui vaut 1 si c'est un produit "Bar", 2 si c'esut un "Snack" et 3 si c'est un "Menu").

2- Partie PHP

Dans ton code, il te faut un appel a la Base de donnees (BDD) ainsi constituee. Par exemples pour afficher la colonne "Bar", ce que tu devras faire c'est :
a- envoyer une requete a la BDD demandant de mettre dans un tableau (ou array en anglais et en PHP) tous les elements de la table "tableProduit" dont le champ "categorieProduit" vaut 1.
b- afficher les elements de ce tableau en utilisant les jolies div que tu as mises en code...

Un petite tutoriel simpliste pour te guider dans tes premiers pas : http://eusebius.developpez.com/phpmysql-base/
Merci pour ta réponse Smiley smile

en faite j'ai fais la BDD et j'arrive bien a afficher les produit et prix mais c pour la structurer que je pige pas Smiley confus

a écrit :

Partie mySQL
- categorieProduit (ici mettre genre un entier qui vaut 1 si c'est un produit "Bar", 2 si c'esut un "Snack" et 3 si c'est un "Menu").
2- Partie PHP
a- envoyer une requete a la BDD demandant de mettre dans un tableau (ou array en anglais et en PHP) tous les elements de la table "tableProduit" dont le champ "categorieProduit" vaut 1.
b- afficher les elements de ce tableau en utilisant les jolies div que tu as mises en code...


C'est la que je coince Smiley biggol

je n'arrive que ce genre d'affichage
a écrit :

Café : 1.20
Pression : 2.20
Jus de Fruit : 2.20
Pastis : 2.20
Whisky : 2.70
Croque Monsieur : 3.60
Croque Madame : 4.60
Jambon Frites : 6.10
Tarte : 1.70
Menu : 15.00

Comment je peux faire pour distinguer bar/snack/menu
produit et prix dans sa colonne ?

Encore merci pour toutes info Smiley cligne
bonjour,

Tu devrais rajouter un champ dans ta table que tu appeles typemenu

Et comme cela tu pourras faire le tris en mettant une condition pour l'affichage.
marquito a écrit :
Merci pour ta réponse Smiley smile

en faite j'ai fais la BDD et j'arrive bien a afficher les produit et prix mais c pour la structurer que je pige pas Smiley confus


Partie mySQL
- categorieProduit (ici mettre genre un entier qui vaut 1 si c'est un produit "Bar", 2 si c'esut un "Snack" et 3 si c'est un "Menu").
2- Partie PHP
a- envoyer une requete a la BDD demandant de mettre dans un tableau (ou array en anglais et en PHP) tous les elements de la table "tableProduit" dont le champ "categorieProduit" vaut 1.
b- afficher les elements de ce tableau en utilisant les jolies div que tu as mises en code...


C'est la que je coince Smiley biggol

je n'arrive que ce genre d'affichage
a écrit :

Café : 1.20
Pression : 2.20
Jus de Fruit : 2.20
Pastis : 2.20
Whisky : 2.70
Croque Monsieur : 3.60
Croque Madame : 4.60
Jambon Frites : 6.10
Tarte : 1.70
Menu : 15.00

Comment je peux faire pour distinguer bar/snack/menu
produit et prix dans sa colonne ?

Encore merci pour toutes info Smiley cligne
Alors si comme je l'ai precise tu as un champ "categorieProduit", tu n'as qu'a mettre un WHERE 'categorieProduit'=1 a la fin de ta requete mySQL et il ne te retournera que les resultats pour la colonne bar, et tu refais une requete pour la colonne snack, etc.

Ensuite, pour avoir un affichage qui ressemble a ce que tu as mis dans le premier post, il te faudrait a mon avis :
- a tout prix mettre le resultat de la requete dans un tableau : le fais-tu deja ? je ne sais pas... Et je viens de me rendre compte que le lien que je t'ai donne ne t'aide pas la dessus puisqu'il ne le fait pas non plus, donc voici un petit code pour le faire :
$tabResults=array();
while($ligne = mysql_fetch_array ($result)) {
  array_push($tabResults,$ligne);
}

- avoir deux boucles du style :
for($i=0;$i<sizeof($tabResults):$i++) {
  echo "<div id='ligneCarteProduit'>" . $tabResults[$i]['nomProduit'] . "</div>";
}
Bon je ne suis pas sorti de l'auberge Smiley biggol

Je pense que c'est trop compliqué pour moi

et en faite mes jolie <div> ne sont pas compatible avec la BDD ? il faut faire des tableaux plutôt ?
Modifié par marquito (28 Aug 2007 - 15:54)
Salut Smiley cligne ,

juste en passant, je ne comprends pas bien pourquoi tu utilises des div plutôt qu'une table Smiley rolleyes ?

Après avoir alimenté tes arrays il te suffirait de déterminer laquelle contient le plus d'éléments pour avoir ton nombre de lignes et de boucler pour l'affichage... (sans oublier l'emploi de css pour rendre le tout agréable à l'oeil !) Smiley langue

D'ailleurs dans ton premier post je vois que tu attribues le même id à plusieurs éléments alors qu'un id contrairement à une class est unique Smiley smile !

A+
Administrateur
Bonjour,

rien à voir avec ton problème de PHP/MySQL mais ton code, en plus d'une divite prononcée est malheureusement inaccessible dans des cas comme un lecteur d'écran ou si le navigateur prend la liberté de "reconstruire" la page (Opera Mini sur PDA, PSP, etc) ou sans CSS. En effet, c'est d'abord la 1ère colonne des produits qui va être lue/affichée puis une fois tous les produits lus/affichés, ce sera les prix. Comment alors savoir simplement que "Jus de Fruits" correspond à 2,20€ alors qu'entre temps 5 autres informations auront été lues/affichées?
<p>Produit<span>Prix</span></p>
permet de respecter le sens de lecture et de tout de même être stylé Smiley ravi

EDIT: parti 15 minutes pour le café et voilà le résultat Smiley blume
Modifié par Felipe (28 Aug 2007 - 15:47)
Ok donc tout faux !!
ce qui est bien avec le web c'est que l'on apprends tous les jours Smiley lol

Quand je me suis lancé dans le code j'avais lus un truc comme quoi les table c'était dépassé et qu'il fallais utiliser les <div>........?
Alors j'en ai abusé trop peut être !! Smiley biggol
Administrateur
marquito a écrit :
Quand je me suis lancé dans le code j'avais lus un truc comme quoi les table c'était dépassé et qu'il fallais utiliser les <div>........?

Hmm ça dépend Smiley cligne
Bonsoir je vais paraitre un peu lourd mais j'aimerai comprendre et je compte un peu sur votre aide Smiley cligne

je commence a comprendre !!! un peu........

<?php require_once('../connection.php'); ?>
<div id='conteneur_blabla'>blablabla</div>
<?
$select = 'SELECT produits,prix FROM mabase LIMIT 0,4; ';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);

if($total) {

    echo '<table bgcolor="#FFFFFF">'."\n";
        
        echo '<tr>';
        echo '<td bgcolor="#669999"><b><u>produits</u></b></td>';
        echo '<td bgcolor="#669999"><b><u>prix</u></b></td>';
        echo '</tr>'."\n";
        while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td bgcolor="#CCCCCC">'.$row['produits'].'</td>';
        echo '<td bgcolor="#CCCCCC">'.$row['prix'].'</td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
}
else echo 'Pas d\'enregistrements dans cette table...';
mysql_free_result($result);
?>


Là j'affiche un tableau avec les produits et les prix en l'occurrence 4 (LIMIT 0,4;)

jusqu'à la je pige Smiley lol

Là où ça ce complique c'est que j'ai suivi vos conseils j'ai créé une table....
je vous montre tout Smiley ravi


<table class='restauration'>
  <tr>
    <td colspan="2"  class='table_titre_bar'>Bar</td>
    <td colspan="2"  class='table_titre_snack'>Snack</td>
    <td colspan="2"  class='table_titre_menu'>Menu</td>
  </tr>
  <tr>
    <td class='table_produits_bar'>Café</td>
    <td class='table_prix_restauration'>1.20 €</td>
    <td class='table_produits_snack'>Croque Monsieur</td>
    <td class='table_prix_restauration'>3.60 €</td>
    <td class='table_produits_menu'>Plat du jour</td>	
  </tr>
    <tr>
    <td class='table_produits_bar'>Pression</td>
    <td class='table_prix_restauration'>2.20 €</td>
    <td class='table_produits_snack'>Croque Madame</td>	
    <td class='table_prix_restauration'>3.60 €</td>
    <td class='table_produits_menu'>Dessert</td>	
  </tr>
    <tr> 
    <td class='table_produits_bar'>Jus de fruit</td>
    <td class='table_prix_restauration'>2.20 €</td>
    <td class='table_produits_snack'>Jambon Frites</td>	
    <td class='table_prix_restauration'>6.10 €</td>
    <td class='table_produits_menu'>Boisson</td>	
  </tr>
    <tr> 
    <td class='table_produits_bar'>Pastis</td>
    <td class='table_prix_restauration'>2.20 €</td>
    <td class='table_produits_snack'>Tarte (la part)</td>	
    <td class='table_prix_restauration'>1.70 €</td>
    <td class='table_produits_menu'>Café</td>	
  </tr>
     <tr> 
    <td class='table_produits_bar'>Whisky (baby)</td>
    <td class='table_prix_restauration'>2.70 €</td>
    <td class='table_produits_snack'></td>	
    <td class='table_prix_restauration'></td>
    <td class='table_produits_menu'>15,00 €</td>	
  </tr>  
   </table> 


C'est vrai que c'est plus souple que mes div d'hier Smiley smile

Donc je me résume avec la requete j'ai une liste mais maintenant comment l'intégrer dans le tableau ???? Smiley biggol ????

Merci encore pour vos conseils
bien le bonjour en se bon matin Smiley ravi

J'aimerai savoir elle ressemble a quoi ta table mysql Smiley cligne pour avoir un idée des information que tu recupere.

Car il faut que tu es un champ qui te permet de separé les different type de prix.

edit : Heyoan toujours la reponse à tout en php Smiley langue
Modifié par Halindel (31 Aug 2007 - 08:13)
Salut marquito Smiley cligne ,

le code suivant est basé sur les tables familles et produits générées comme cela :
a écrit :
--
-- Structure de la table 'familles'
--

CREATE TABLE familles (
idFamille tinyint(4) NOT NULL auto_increment,
nomFamille varchar(50) collate utf8_unicode_ci NOT NULL,
afficherFamille enum('O','N') collate utf8_unicode_ci NOT NULL default 'O',
montantTotal decimal(5,2) NOT NULL,
rangFamille tinyint(4) NOT NULL,
PRIMARY KEY (idFamille)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

--
-- Contenu de la table 'familles'
--

INSERT INTO familles (idFamille, nomFamille, afficherFamille, montantTotal, rangFamille) VALUES
(1, 'Bar', 'O', 0.00, 10),
(2, 'Snack', 'O', 0.00, 20),
(3, 'Menu Golfeur', 'O', 15.00, 30);

-- --------------------------------------------------------

--
-- Structure de la table 'produits'
--

CREATE TABLE produits (
idProduit tinyint(4) NOT NULL auto_increment,
familleProduit tinyint(4) NOT NULL,
nomProduit varchar(50) collate utf8_unicode_ci NOT NULL,
prixProduit decimal(4,2) NOT NULL,
rangProduit tinyint(4) NOT NULL,
PRIMARY KEY (idProduit)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=14 ;

--
-- Contenu de la table 'produits'
--

INSERT INTO produits (idProduit, familleProduit, nomProduit, prixProduit, rangProduit) VALUES
(1, 1, 'Café', 1.70, 10),
(2, 1, 'Pression', 2.20, 20),
(3, 1, 'Jus de Fruit', 2.20, 30),
(4, 1, 'Pastis', 2.20, 40),
(5, 1, 'Whisky (baby)', 2.70, 50),
(6, 2, 'Croque Monsieur', 3.60, 10),
(7, 2, 'Croque Madame', 4.60, 20),
(8, 2, 'Jambon Frites', 6.10, 30),
(9, 2, 'Tarte (la part)', 1.70, 40),
(10, 3, 'Plat du jour', 0.00, 10),
(11, 3, 'Dessert', 0.00, 20),
(12, 3, 'Boisson', 0.00, 30),
(13, 3, 'Café', 0.00, 40);
Quelques précisions :
- le champ afficherFamille permet de créer une nouvelle famille ("menu d'automne" Smiley lol ) ainsi que les produits qui lui sont associés sans l'afficher tout de suite.
- le champ montantTotal, en plus de donner le montant Smiley langue , permet de différencier une liste de tarifs d'un menu.
- le champ rangFamille permet de trier les colonnes.
- le champ rangProduit permet de trier les lignes d'une colonne.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tarifs en tableau</title>
<style type="text/css">
#tarifs {
	font-family:Arial, Helvetica, sans-serif;
	font-size:1em;
	width:660px;
	background-color:#d3d601;
	color:#fff;
	font-weight:bold;
}

.titre {
	text-decoration:underline;
	margin-left:5px;
	font-size:1.2em;
}

table {
	background-color:#306807;
	margin:15px 3px 3px;
	border:2px white solid;
	border-collapse:collapse;
}

tr {
	color:#fff;
}

th {
	width:220px;
	color:#f2f8a2;
	border-bottom:2px white solid;
}

th, td {
	padding:4px 6px;
}

.pair {
	background-color:#306807;
}

.impair {
	background-color:#479d0a;
}

.prix_produit {
	float:right;
}

td.ligne_menu {
	text-align:center;
}

</style>
</head>

<body>
<?php
require_once('connection.php');
	
// Récupération des familles à afficher
$sql = "Select idFamille, nomFamille, montantTotal from familles where afficherFamille = 'O' order by rangFamille";
$result = mysql_query($sql);
if (!$result) {
	$message  = 'Erreur SQL : '.mysql_error()."<br>\n";
	$message .= 'SQL string : '.$sql."<br>\n";
	die($message);
}
$nbfam = mysql_num_rows($result);
if ($nbfam > 0) { 
	//Affichage du tableau ?>
	<div id="tarifs">
		<span class="titre">Quelques Tarifs :</span>
		<table>
			<tr>
			<?php
			$nbligtab = 0; // nombres de lignes de données à afficher
			$fam = 0;
			$row = array();
			// Pour chaque famille...
			while ($famille = mysql_fetch_array($result)) {
				// est-ce un menu ?
				$menu = ($famille['montantTotal'] > 0) ? true : false; // 
				// Couleur du fond alterné
				$fond_td =  ($fam%2 == 0) ? 'pair' : 'impair'; // couleur du fond alternée
				// Affichage de l'entête de colonne
				echo '<th class="'.$fond_td.'">'.$famille['nomFamille'].'</th>'."\n";
				// Alimentation des données de cette famille
				$sql2 = "Select nomProduit, prixProduit from produits where familleProduit = ".$famille['idFamille']." order by rangProduit";
				$result2 = mysql_query($sql2);
				if (!$result2) {
					$message  = 'Erreur SQL : '.mysql_error()."<br>\n";
					$message .= 'SQL string : '.$sql2."<br>\n";
					die($message);
				}
				$nbligfam = mysql_num_rows($result2); // on cherche le nombre de lignes à afficher pour cette famille
				if ($menu) { // si c'est un menu il faudra rajouter 1 ligne pour '------------' et 1 pour le montant total
					$nbligfam +=2;
				}
				if ($nbligfam > $nbligtab) {
					$nbligtab = $nbligfam;
				}
				// Alimentation des arrays
				while ($produit = mysql_fetch_array($result2)) {
					if ($menu) {
						$row[$fam][]='<td class="ligne_menu '.$fond_td.'">'.$produit['nomProduit'].'</td>'."\n";
					} else {
						$row[$fam][]='<td class="nom_produit '.$fond_td.'"><span class="prix_produit">'.$produit['prixProduit'].' €</span>'.$produit['nomProduit'].'</td>'."\n";
					}
				}
				if ($menu) { // si c'est un menu il faudra rajouter 1 ligne pour '------------' et 1 pour le montant total
					$row[$fam][]='<td class="ligne_menu '.$fond_td.'">----------------</td>'."\n";
					$row[$fam][]='<td class="ligne_menu '.$fond_td.'">'.$famille['montantTotal'].' €</td>'."\n";
				}
				$fam++;
			}
			?>
			</tr>
			<?php // Affichage des lignes
			for ($lig = 0; $lig < $nbligtab; $lig++) {
				echo "<tr>\n";
				for ($col = 0; $col < $nbfam; $col++) {
					$fond_td =  ($col%2 == 0) ? 'pair' : 'impair'; // couleur du fond alternée
					$td = (!empty($row[$col][$lig])) ? $row[$col][$lig] : '<td class="ligne_menu '.$fond_td.'"> </td>';
					echo $td;
				}
				echo "</tr>\n";
			}
			?>
		</table>
	</div>
	<?php
	mysql_close();
}
?>
</body>
</html>
Le principe est le suivant : pour chaque famille à afficher (Bar, Snack et Menu Golfeur) on écrit d'abord l'entête de la colonne (<th>) puis on recherche tous les produits associés. Ensuite on écrit chaque ligne Smiley smile .

Pour voir ce que cela donne c'est à cette adresse.

A+
Alors là Smiley eek
Déjà merci à tous Smiley smile et surtout à Heyoan....j'ai pas de mots pour te remercier! Trop fort.... Smiley cligne
Ca c'est une leçon Smiley ravi

Bon ben maintenant il n'y plus ka.... Smiley murf
Et bosser sur la deuxième partie entrer les infos par un formulaire Smiley ohwell

Tu n'aurais pas un tuto du même style Heyoan ? Smiley lol

Bonne journée
marquito a écrit :
Tu n'aurais pas un tuto du même style Heyoan ? Smiley lol
Bien essayé Smiley biggol !

C'est pas vraiment un tuto vu que ça répond juste à ta demande... Cela dit le principe de défiler les lignes générales (familles) et pour chaque enregistrement trouvé, faire défiler les lignes détails (produits), est un grand classique des bases de données.

Pour les formulaires (gestion des familles et des produits) c'est tout ce qu'il y a de plus standard : une balise <form> dont l'action pointe vers la page PHP qui va bien (par exemple creerfamille.php, modifierfamille.php, supprimerfamille.php, etc... et idem pour les produits...) avec des balises <input> (penser à les rattacher à des <label>) et un bouton submit.

Juste quelques petits détails : si tu reprends les tables comme je te les ai données tu remarqueras que 1) c'est inutile de renseigner l'idFamille ou l'idProduit à la création car ces 2 champs ont l'attribut auto_increment, 2) si tu gères la suppression des familles penses à supprimer tous les produits correspondants et 3) dans le(s) formulaire(s) produits, le champ familleProduit devrait être un <select> reprenant tous les idFamille existant dans la table familles pour éviter de s'emmêler les pinceaux Smiley cligne .

Pour ce qui est des vrais tutos sur les formulaires et PHP il en existe plusieurs... Par exemple sur http://www.phpdebutant.org/ .

A+
j'ai tenté Smiley rolleyes

En tous cas un Gd merci je suis en train de me pencher dessus !
Petite question...comme j'ai d'autres tableaux avec des td et tr j'ai mis des class à chacun pour éviter les conflits pas de prob Smiley eek

Mais ici
echo '<th class="'.$fond_td.'">'.$famille['nomFamille'].'</th>'."\n";

Le TH il risque pas de faire des conflits avec les autres tableaux ?

j'arrive pas à lui attribuer une class (c'est vraiement necessaire pour cette balise ?)

A+
Salut,

la variable $fond_td vaut soit pair soit impair pour alterner la couleur de chaque colonne (<th> et <td>) mais il n'y aura des "conflits" que si tu utilises le même nom de classe ailleurs dans ton source Smiley cligne .
Comme je vais faire d'autres tableaux en m'inspirant de celui que tu m'as fais

je vais certainement me retrouver devant un conflit Smiley confus

J'ai remarqué déjà avec les tr mais avec ceux la j'ai pas eu de problème pour les renommer en <tr class='resto'>

Mais je pige pas comment le renommer le th
celle la va me poser des soucis.....

A moins que c'est $fond_td qui prime ? si pour les autres tableaux je mets
$rouge_td je peux laisser les th sans class ?

Oulla Smiley biggol tu peux m'éclairer une fois de plus merci