Page 1 sur 2

categorie afficher via php

Posté : 04 janv. 2015, 00:10
par Sylvain95
Bonjour à tous et bonne année,

Je viens vers vous car je suis totalement perdu pour faire un truc qui semble simple sur php ^^ je m'explique:

Je souhaiterai afficher dans un menu (déroulant ou autre) 3 catégorie et en fonction de la catégorie choisie, php affiche les produit de tel ou tel catégorie de ma base de donnée (composée d'une table "categorie" et d'une table "produit").

Je sais pas si j'ai réussi à bien me faire comprendre mais si vous voulez plus d'info n'hésitez pas.
Je précise que je cherche pas de solution toute faite car je veux comprendre mais après plusieurs jour dessus pas moyen de trouver.

Merci beaucoup

Re: categorie afficher via php

Posté : 04 janv. 2015, 01:00
par tof73
du html avec les 3 textes, avec un lien par texte qui comprend l'identifiant de la catégorie.
la page php, qui récupère l'identifiant de la catégorie passé en paramètre
connexion à la base de donnée
création de la requête sql avec l'identifiant
exécution de la requête
parcours des résultats et affichage

Re: categorie afficher via php

Posté : 04 janv. 2015, 01:41
par Sylvain95
Merci pour ta reponse, pour le html j'avais penser à ça:

<select name="categorie" size="5">
<option selected value = "1">Catégorie 1</option>
<option value = "2">Catégorie 2</option>
<option value = "3">Catégorie 3</option>
</select>
<p /><input type="submit" value="afficher la catégorie"><p />

Dans la catégorie "option value" je met bien l'id de ma catégorie dans la base de donnée ?

Et pour le php je travaille sur un fichier déjà écrit mais j'avoue j'ai beaucoup de mal a comprendre

Re: categorie afficher via php

Posté : 04 janv. 2015, 02:26
par Sylvain95
Désolé pour le double post mais je vous montre mon php et ce qui bloque:
<?php
$connexion = mysql_connect("localhost","root","");
if ($connexion)
{
// connexion réussie
	mysql_select_db("hotel",$connexion);
		$requete="select nom,taille from chambre where categorie='".$_POST["categorie"]."';";
		$nb=0;
			echo "<h1>Liste des chambre de la catégorie</h1>";
			echo '<p /><table border="2" width="75%">';
			echo "<tr><th>NOM</th><th>Taille</th></tr>";
		$resultat= mysql_query($requete,$connexion);
		$ligne=mysql_fetch_assoc($resultat);
			while($ligne)
	{
	echo "<tr><td>".$ligne["nom"]."</td><td>".$ligne["taille"]."</td></tr>";
	$nb++;
	$ligne=mysql_fetch_assoc($resultat);
	}
echo "</table><p />";
echo "Il y a ".$nb." employés.";
}
else
{
echo "problème à la connexion <br />";
}
mysql_close($connexion);
?>
Déjà il me fout un message qui me dit que mysql_connect est dépassé et qu'il faut utiliser, entre autre PDO, mais je sait pas quelles sont les ligne à changer pour que tout soit "harmoniser", ensuite il me met ce message:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\Site\categorie.php on line 38

Quelqu'un a une idée pour m'aider ^^ ?

Re: categorie afficher via php

Posté : 04 janv. 2015, 02:36
par Elie
Il se passe quoi si tu fais juste :
$resultat= mysql_query($requete);
Si tu veux pas de PDO, tu peux utiliser mysqli_connect : http://php.net/manual/fr/function.mysqli-connect.php

Re: categorie afficher via php

Posté : 04 janv. 2015, 13:22
par Sylvain95
En écrivant comme tu ma dit j'ai le même message d'erreur.

Et non ces pas que je veux pas utiliser PDO ces juste que je sais pas quelles lignes changer.

Pour être honnête ces un projet scolaire et le php que j'ai envoyé je l'ai récupéré sur un cours de mon prof. Mais après avoir lu un autre cours sur le net j'ai vu que mysql_connect était dépassé et qu'il était préférable d'utiliser PDO.

Re: categorie afficher via php

Posté : 04 janv. 2015, 15:42
par tof73
$_POST["categorie"]
si ton formulaire est en méthode POST
$_GET["categorie"] si c'est du GET

Re: categorie afficher via php

Posté : 04 janv. 2015, 16:59
par Sylvain95
Sa commence à s'éclaircir dans ma tête mais imaginons je veux utiliser cette ligne:
$reponse = $bdd->query('SELECT nom, taille, prix, description, photo FROM chambre');
Sachant que mon formulaire est en méthode 'post' qu'est ce que je dois rajouter pour que la requete aille chercher les chambre de la catégorie choisie?

Je vous met les 2 tables pour aider:
CREATE TABLE categorie(
idcategorie INT(3) NOT NULL,
nom VARCHAR(20) NOT NULL,
CONSTRAINT pkcategorie PRIMARY KEY (idcategorie)
);

CREATE TABLE chambre(
idchambre INT(3) NOT NULL,
idcategorie INT(3) NOT NULL,
nom VARCHAR(20) NOT NULL,
taille VARCHAR(30) NOT NULL,
description TEXT,
prix DECIMAL(5,2),
photo VARCHAR(30),
CONSTRAINT pkchambre PRIMARY KEY (idchambre),
CONSTRAINT fkcategorie FOREIGN KEY (idcategorie) REFERENCES categorie(idcategorie)
);
Voila merci

Re: categorie afficher via php

Posté : 04 janv. 2015, 21:09
par Aureusms
Toutes les variables envoyées par un formulaire en mode POST sont dans une supervariable "tableau" appellée $_POST.
Tu peux rapidement la consulter en faisant var_dump($_POST);

Si je pars de ton formulaire :
<select name="categorie" size="5">
<option selected value = "1">Catégorie 1</option>
<option value = "2">Catégorie 2</option>
<option value = "3">Catégorie 3</option>
</select>
il te faut récupérer ta variable par exemple $_POST["categorie"]) qui aura, par exemple, les valeurs au choix 1 ou 2 ou 3.
Je te conseille de "protéger" ta variable avec la fonction adéquate (selon si tu choisi mysqli ou PDO) puis de faire :
$desc = $_POST["description"];
$reponse = $bdd->query("SELECT nom, taille, prix, description, photo FROM chambre WHERE description = '".$desc."'");
Ensuite tu as d'autres fonction de recherche comme LIKE avec des caractères spécaixu assez pratiques % ou _
$reponse = $bdd->query("SELECT nom, taille, prix, description, photo FROM chambre WHERE description LIKE '%".$desc."%'");
Ainsi _ peux remplacer un caractère au choix et % peut être considéré comme l’équivalent de * dans les recherches en mode console (ex. *win32*.dll)

Re: categorie afficher via php

Posté : 04 janv. 2015, 21:47
par Sylvain95
Je remercie pour ton aide mais pour
$desc = $_POST["description"];
$reponse = $bdd->query("SELECT nom, taille, prix, description, photo FROM chambre WHERE description = '".$desc."'");
Pourquoi $_POST["decription"] et pas $_POST["categorie"] ????? Pareil pour $desc j'ai pas trop compris

Re: categorie afficher via php

Posté : 05 janv. 2015, 00:11
par Sylvain95
Je suis désolé d'insister mais mon projet est à rendre bientot et mais je suis bloqué

Je recapitule ce formulaire :
<form action="categorie.php" method="post">
				<p />Sélectionnez la catégorie souhaitée: <p />
					<select name="categorie" size="5">
						<option selected value = "1">Discount</option>
						<option value = "2">Classique</option>
						<option value = "3">Luxe</option>
					</select>
					<p /><input type="submit" value="afficher la liste"><p />
					</form>
Devrais pouvoir charger 1 des 3 catégories via ce php:
<?php
try
{
	
	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
	
        die('Erreur : '.$e->getMessage());
}


$cat = $_POST["categorie"];
$reponse = $bdd->query("SELECT nom, taille, prix, description, photo FROM chambre WHERE categorie LIKE '%".$cat."%'");

while ($donnees = $reponse->fetch())
{
?>
    <p>
    <strong>Chambre</strong> : <?php echo $donnees['nom']; ?><br />
    La taille de cette chambre est: <?php echo $donnees['taille']; ?>, et elle se loue  à <?php echo $donnees['prix']; ?> euros !<br />
    Sa description est :  <em><?php echo $donnees['description']; ?></em> <?php echo $donnees['photo']; ?>
   </p>
<?php
}

$reponse->closeCursor(); 

?>
La dernière partie est temporaire, une fois que j'aurai réussi a afficher les valeur je pensait les afficher dans un tableau, mais encore faut il que j'arrive à les afficher.

Sauf que j'ai cet erreur maintenant:

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Site\categorie.php on line 41

Merci à ceux qui prendront le temps de m'aider à trouver d’où vient cet erreur, si quelqu'un pense que le problème vient de ma BDD je peux la poster complétement.

Re: categorie afficher via php

Posté : 05 janv. 2015, 08:44
par Aureusms
Je remercie pour ton aide mais pour
$desc = $_POST["description"];
$reponse = $bdd->query("SELECT nom, taille, prix, description, photo FROM chambre WHERE description = '".$desc."'");
Pourquoi $_POST["decription"] et pas $_POST["categorie"] ????? Pareil pour $desc j'ai pas trop compris
Tu as raison ! Le name est catégorie <select name="categorie" size="5"> (pas bien réveillé moi hier....)

Re: categorie afficher via php

Posté : 05 janv. 2015, 08:53
par Aureusms
Il se pourrais que ta requête retourne une erreur.

Essaye via la préparation de requête :

$reponse = $bdd->prepare("SELECT nom, taille, prix, description, photo FROM chambre WHERE categorie LIKE '%".$cat."%'"");
$reponse->execute();

while ($donnees = $reponse->fetch())
{
?>
    <p>
    <strong>Chambre</strong> : <?php echo $donnees['nom']; ?><br />
    La taille de cette chambre est: <?php echo $donnees['taille']; ?>, et elle se loue  à <?php echo $donnees['prix']; ?> euros !<br />
    Sa description est :  <em><?php echo $donnees['description']; ?></em> <?php echo $donnees['photo']; ?>
   </p>
<?php
}

Re: categorie afficher via php

Posté : 05 janv. 2015, 12:10
par Sylvain95
J'ai essayé comme tu m'as dit :
$cat = $_POST["categorie"];
$reponse = $bdd->query("SELECT nom, taille, prix, description, photo FROM chambre WHERE idcat LIKE '%".$cat."%'");
$reponse->execute();
Mais toujours le même message, par contre par rapport à BDD j'ai modifié la ligne :
WHERE idcat LIKE '%".$cat."%'");
Car j'ai pas de champs catégorie dans ma table chambre.

Re: categorie afficher via php

Posté : 05 janv. 2015, 13:26
par Sylvain95
J'ai réussi !

Mes données s'affiche correctement maintenant je voudrais juste affiche une image, mes données sont organisées de la sorte:
VALUES (001,001, 'Chambre 1 place discount', '1 place', 'Chambre petit budget pour 1 personne', 020.00, 'img1.jpg');
Mais mon PHP:
<?php
try
{
	
	$dbh = new PDO('mysql:host=localhost;dbname=hotel', 'root', '');
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
	
     echo 'Échec lors de la connexion : ' . $e->getMessage();
}


$cat = $_POST["categorie"];
$reponse = $dbh->query("SELECT taille, prix, description, photo FROM chambre WHERE idcategorie LIKE '%".$cat."%'");
$reponse->execute();
while ($donnees = $reponse->fetch())
{
?>
    <TABLE border="1" width="100%">
		<TR>
		<TD width="20%"><em><?php echo $donnees['description']; ?></em> 
		<TD width="20%"><?php echo $donnees['taille']; ?>
		<TD width="20%"><?php echo $donnees['prix']; ?> euros la nuit 
		<TD width="20%"><?php echo $donnees["photo"]; ?>
	</TABLE>
<?php
}

$reponse->closeCursor(); 

?>
La ligne <TD width="20%"><?php echo $donnees["photo"]; ?> affiche "img1.jpg", je voudrais savoir comment lui faire afficher une image qui se trouve dans un dossier "images" situé dans le même emplacement.

Après ces fini ^^ merci pour votre aide en tout cas