8796 sujets

Développement web côté serveur, CMS

Bonjour tous,

je découvre les regex et ai un peu de mal.
Je vous explique mon souci.
J'ai une base de données Produits dans laquelle je voudrais sortir les produits de même "famille". Mes produits portent comme référence par ex : PL1000, PL1100, …
Des produits de même famille auront pour référence PL2001, PL2002, PL200n en gros ce sont les 2 premiers chiffres après le PL qui déterminent une famille.

J'ai fais des recherches sur les regex et ai fais une requete qui est la suivante:

$request_gamme=("SELECT g.sty_reference, g.ima_chemin FROM v_gamme g WHERE g.sty_reference REGEXP '[a-zA-Z]{2}'".$gamme."'[0-9]{2}'");


Je crois que ma regex est bonne mais c'est juste au niveau de ma variable que cela pose problème. La variable $gamme isole les 2 chiffres de la référence en cours ( $gamme=substr($ref_stylo, 2,2); ).

Quelqu'un aurait-il une idée?

D'avance merci pour votre aide.
Modifié par paintbox (21 Nov 2010 - 12:03)
Bonjour.

Et pour quoi pas ?


WHERE g.sty_reference LIKE 'PL".$gamme."%'

Modifié par ffwrude (19 Nov 2010 - 15:45)
Merci pour ta réponse.

En fait, cette gamme la de produits est en PL mais je peux aussi en avoir en MT, LU…
Donc je ne souhaite pas imposer les 2 premières lettres.

WHERE g.sty_reference LIKE '%".$gamme."%'


Et comme ca ?

Par contre ca veut dire que ton couple "gamme" est unique.

A la limite tu peux peut etre même faire un truc comme ca =>


WHERE SUBSTR(g.sty_referance,3,2)=$gamme


Je suis plus trop sur de la syntaxe par contre.
Modifié par ffwrude (19 Nov 2010 - 16:26)
Ta solution fonctionne quand je fais la requete directement dans ma base via Sequel Pro mais sur ma page, cela ne donne rien.
Ca ne fonctionne pas ? C'est à dire ? Erreur ? Code ? Langage ?
Modifié par ffwrude (19 Nov 2010 - 16:38)
Je suis en PHP. Je te préviens mon code est assez long.



<?php

$selected_stylo=$_GET['id_stylo'];
	$previous_page=$_SERVER['HTTP_REFERER']; /* Pour lien vers page précédente */
	$sql_fiche=mysql_query("SELECT s.sty_id, sty_reference, sty_nom,sty_cou_dispo, sty_longueur,s.pie_code,
								i.ima_id, i.ima_chemin,i.ima_rang,
								c.cat_id, c.cat_code, c.cat_nom,
								qp.Prix_vente
								FROM v_stylos s
								INNER JOIN t_images_ima i 		ON s.sty_id 		= i.sty_id
								INNER JOIN t_categorie_cat c 	ON s.sty_categorie 	= c.cat_code
								INNER JOIN v_quan_prix qp		ON s.sty_id			= qp.sty_id
								WHERE s.sty_id='".$selected_stylo."' AND i.ima_rang='2'") or die("Sélection de la base impossible !"); 
	$donnees_fiche	=mysql_fetch_assoc($sql_fiche);
/* 	echo $selected_stylo; */
	$ref_stylo=$donnees_fiche['sty_reference'];
	$stylo_courant=substr($ref_stylo, 2,2); /*Récupère les 2 premiers chiffres du code produit*/
	echo '<br/>';
	/*****************/
	echo '<div class="wrapper">';
		/* Bloc Gauche */
	     echo '<div class="left1">';
	     	echo '<p class="return"><a href='.$previous_page.'>Retour à la page précédente</a></p>';			
	     	echo '<div class="bloc_gauche"><img src="'.$donnees_fiche['ima_chemin'].'" id="bloc_image"</div>';
	     echo '</div>';
   		/* Fin de Bloc Gauche */

		/* Bloc Droit */
	     echo '<div class="left2">';
	     
	     echo '<table class="table_fiche" width="100%">';
		echo '<tr>';
		  echo '<th colspan="2"><h2>'.$donnees_fiche['sty_reference'].' - '.$donnees_fiche['sty_nom'].'</h2></th>';
        echo '</tr>';
		echo '<tr>';  
/*-->*/	  echo '<td colspan="2"><h4 class="bleu_fonce">Caractéristiques : </h4></td>';
        echo '</tr>';
		echo '<tr>';  
		  echo '<td width="40%">Longueur : </td>';
		  echo '<td width="50%">± '.$donnees_fiche['sty_longueur'].' cm</td>';
        echo '</tr>';
		echo '<tr>';  
		  echo '<td>Couleur du corps : </td>';
		  /*--Couleurs Corps--*/
		  $couleur_corps=mysql_query("SELECT s.pie_code, s.pie_nom, s.cou_code, s.cou_nom, s.sty_id
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON c.cou_code = s.cou_code
								WHERE s.sty_id='".$selected_stylo."' AND s.pie_code='100' ") or die("Sélection de la base impossible !");
		$couleur_corps	=mysql_fetch_assoc($couleur_corps);				
		  echo '<td>'.$couleur_corps['cou_nom'].'</td>';
        echo '</tr>';
        echo '<tr>';
		  echo '<td>Couleur grip : </td>';
		  /*--Couleurs Grip--*/
		$couleur_grip=mysql_query("SELECT s.pie_code, s.pie_nom, s.cou_code, s.cou_nom, s.sty_id
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON c.cou_code = s.cou_code
							WHERE s.sty_id='".$selected_stylo."' AND s.pie_code='200' ") or die("Sélection de la base impossible !");
		$couleur_grip	=mysql_fetch_assoc($couleur_grip);		
		  echo '<td>'.$couleur_grip['cou_nom'].'</td>';
		echo '</tr>';
		echo '<tr>';  
		  echo '<td>Couleur clip : </td>';
		  /*--Couleurs Clip--*/
		$couleur_clip=mysql_query("SELECT s.pie_code, s.pie_nom, s.cou_code, s.cou_nom, s.sty_id
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON c.cou_code = s.cou_code
							WHERE s.sty_id='".$selected_stylo."' AND s.pie_code='300' ") or die("Sélection de la base impossible !");
		$couleur_clip	=mysql_fetch_assoc($couleur_clip);	  
		  echo '<td>'.$couleur_clip['cou_nom'].'</t>';
		echo '</tr>';
        echo '<tr>';		  		
		  echo '<td>Bague : </td>';
		  /*--Couleurs Bague--*/
		$couleur_bague=mysql_query("SELECT s.pie_code, s.pie_nom, s.cou_code, s.cou_nom, s.sty_id
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON c.cou_code = s.cou_code
							WHERE s.sty_id='".$selected_stylo."' AND s.pie_code='400' ") or die("Sélection de la base impossible !");
		$couleur_bague	=mysql_fetch_assoc($couleur_bague);	  
  
		  echo '<td>'.$couleur_bague['cou_nom'].'</td>';
		echo '</tr>';
		 echo '<tr>';		  		
		  echo '<td>Poussoir : </td>';
		  /*--Couleurs poussoir--*/
		$couleur_poussoir=mysql_query("SELECT s.pie_code, s.pie_nom, s.cou_code, s.cou_nom, s.sty_id
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON c.cou_code = s.cou_code
							WHERE s.sty_id='".$selected_stylo."' AND s.pie_code='500' ") or die("Sélection de la base impossible !");
		$couleur_poussoir	=mysql_fetch_assoc($couleur_poussoir);	  
  
		  echo '<td>'.$couleur_poussoir['cou_nom'].'</td>';
		echo '</tr>';
		echo '<tr>';		  		
		  echo '<td>Mécanisme : </td>';
		  /*--Mécanisme--*/
		$mecanisme=mysql_query("SELECT s.mec_nom, s.sty_id
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON c.cou_code = s.cou_code
							WHERE s.sty_id='".$selected_stylo."'") or die("Sélection de la base impossible !");
		$mecanisme	=mysql_fetch_assoc($mecanisme);	  
		  echo '<td>'.$mecanisme['mec_nom'].'</td>';
		echo '</tr>';
	echo '</table>';
	     echo '<table class="table_fiche" width="100%">';
		echo '<tr>';		  		
/*-->*/	  echo '<td colspan="2" class="bleu_fonce"><h4>Couleurs : </h4></td>';
		echo '</tr>';	
		 echo '<tr>';		  		
		  echo '<td width="45%">Couleurs disponibles : </td>';
		  /*--Couleurs dispo--*/
		$couleur_dispo=mysql_query("SELECT s.sty_id, s.sty_cou_dispo, c.cou_nom, c.cou_code
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON s.sty_cou_dispo = c.cou_code
								WHERE s.sty_id='".$selected_stylo."'") or die("Sélection de la base impossible !");
		$couleur_dispo	=mysql_fetch_assoc($couleur_dispo);	  
		  echo '<td>'.$couleur_dispo['cou_nom'].'</td>';
		echo '</tr>';
		 echo '<tr>';		  		
		  echo '<td>Couleurs encre : </td>';
		$couleur_encre=mysql_query("SELECT s.sty_cou_dispo, s.cou_code, s.cou_nom, s.sty_id, sty_couleur_encre
								FROM v_stylos s
								INNER JOIN t_couleur_cou c ON c.cou_code = s.cou_code
							WHERE s.sty_id='".$selected_stylo."'") or die("Sélection de la base impossible !");
		$couleur_encre	=mysql_fetch_assoc($couleur_encre);	  
		  echo '<td>'.$couleur_encre['sty_couleur_encre'].'</td>';
		echo '</tr>';
	echo '</table>';
		  		
	echo '<table width="100%" class="table_fiche">';
	echo '<tr>';
/*-->*/	  echo '<td class="bleu_fonce" width="50%"><h4>Prix : </h4></td>';
		  echo '<td></td>';
	echo '</tr>';
	echo '</table>';
	echo '<br />';
	
/*--Tableau prix--*/
	echo '<table class="table_prix" width="100%">';	  		
		echo '<tr>';
		  echo '<th>5.000</th>';						   
		  echo '<th>10.000</th>';						   
		  echo '<th>15.000</th>';						   
		  echo '<th>25.000</th>';
		echo '</tr>';
		
		echo '<tr>';
		/*--Prix 5000 --*/
		$request_prix1=mysql_query("SELECT p.Prix_vente, p.sty_id, s.sty_id
						FROM v_quan_prix p
						INNER JOIN t_stylo_sty s ON s.sty_id = p.sty_id
						WHERE s.sty_id='1' AND p.quantite='5000'") or die("Sélection de la base impossible !");
		$prix_1	= mysql_fetch_assoc($request_prix1);
	    $prix_1	=number_format($prix_1['Prix_vente'], 3, ',','.');
		  echo '<td>'.$prix_1.' &euro; HTVA</td>';
		  
		  /*--Prix 10000 --*/
		$request_prix2=mysql_query("SELECT p.Prix_vente, p.sty_id, s.sty_id
						FROM v_quan_prix p
						INNER JOIN t_stylo_sty s ON s.sty_id = p.sty_id
						WHERE s.sty_id='1' AND p.quantite='10000'") or die("Sélection de la base impossible !");
		$prix_2	= mysql_fetch_assoc($request_prix2);
	    $prix_2	=number_format($prix_2['Prix_vente'], 3, ',','.');						   
		  echo '<td>'.$prix_2.' &euro; HTVA</td>';

		  /*--Prix 15000 --*/
		$request_prix3=mysql_query("SELECT p.Prix_vente, p.sty_id, s.sty_id
						FROM v_quan_prix p
						INNER JOIN t_stylo_sty s ON s.sty_id = p.sty_id
						WHERE s.sty_id='1' AND p.quantite='15000'") or die("Sélection de la base impossible !");
		$prix_3	= mysql_fetch_assoc($request_prix3);
	    $prix_3	=number_format($prix_3['Prix_vente'], 3, ',','.');						   
		  echo '<td>'.$prix_3.' &euro; HTVA</td>';		  

		  /*--Prix 25000 --*/
		$request_prix4=mysql_query("SELECT p.Prix_vente, p.sty_id, s.sty_id
						FROM v_quan_prix p
						INNER JOIN t_stylo_sty s ON s.sty_id = p.sty_id
						WHERE s.sty_id='1' AND p.quantite='25000'") or die("Sélection de la base impossible !");
		$prix_4	= mysql_fetch_assoc($request_prix4);
	    $prix_4	=number_format($prix_4['Prix_vente'], 3, ',','.');						   
		  echo '<td>'.$prix_4.' &euro; HTVA</td>';		  

		echo '</tr>';
	echo '</table>';
/*--Tableau frais techniques--*/
	echo '<table width="100%" class="table_fiche">';
	echo '<tr>';
/*-->*/	  echo '<td class="bleu_fonce" width="80%"><h4>Frais techniques (Impression : prix par couleur) : </h4></td>';
		  echo '<td></td>';
	echo '</tr>';
		echo '<tr>';
  			echo '<td colspan="2">< 10.000 pcs (prix par couleur) : + 0,012 &euro; /pcs</td>';
  		echo '</tr>';
  		echo '<td colspan="2">	
  				  > 10.000 pcs (prix par couleur) : + 0,006 &euro; /pcs</td>';
  		echo '</tr>';
	echo '</table>';
	echo '<br />';
/*--Calcul devis--*/
	echo '<div class="form_devis">';
	echo '<FORM method="post" action="devis.php">';
 	echo '<table width="60%" >';
	echo '<tr>';
/*-->*/	  echo '<td class="bleu_fonce" width="45%"><h4>Calculer un devis : </h4></td>';
		  echo '<td></td>';
	echo '</tr>';
		echo '<tr>';
  			echo '<td><label for="quantity">Quantité (ex: 5000): </label></td>';
  			echo '<td><input type="text" name="quantity" size=25"></td>';	
  		echo '</tr>';
  			echo '<td><label for="nom">Couleur(s) : </label></td>';
  			echo '<td><SELECT name="couleur" id="couleur">
  						<option>1</option>
  						<option>2</option>
  						<option>3</option>
  					  </SELECT>
  				  </td>';	
  		echo '</tr>';
  		echo '<tr>';
  		echo '<td>';
  		echo '</td>';
  		echo '<td><INPUT type=hidden name="selected_stylo" value="'.$selected_stylo.'">';
  		echo '</td>';
  		echo '</tr>';
  		echo '<tr>';
  			echo '<td colspan="2" align="center"><input type="submit" value="Envoyer" id="envoyer"/></a><input type="reset" value="Effacer"/></td>';
  		echo '</tr>';
	echo '</table>';
	echo '</FORM>';
  	echo '</div>';/* FIN DE FORM_DEVIS */ 						   
	echo '</div>'; /*FIN DE BLOC DROITE*/
	
	echo '<div id="gamme">';
			echo '<br />';
	$request_pop=mysql_query("SELECT pop.sty_id, pop.sty_reference, pop.sty_populair, pop.pop_code, pop.pop_chemin
							  FROM v_pop pop
							  WHERE pop.sty_reference='".$ref_stylo."'") or die("Sélection de la base impossible !");
	$request_pop= mysql_fetch_array($request_pop);						  
	echo '<p>Popularité : <img src="'.$request_pop['pop_chemin'].'" alt="Popularite" title="Popularite" width="110" height="21" valign="bottom"/></p>';
	/*RECHERCHE GAMME*/
	$gamme=substr($ref_stylo, 2,2);
	echo '<p>La gamme est : '.$gamme.'</p>';
	
	$request_gamme=("SELECT g.sty_reference, g.ima_chemin FROM v_gamme g WHERE g.sty_reference REGEXP '[a-zA-Z]{2}'".$gamme."'[0-9]{2}'");
	
	var_dump($request_gamme);
	echo $gamme;
	$request_gamme=mysql_query($request_gamme) or die ('Sélection de la base impossible !');
	$donnees_gamme=mysql_fetch_array($request_gamme);
	
	while ($donnees_gamme=mysql_fetch_array($request_gamme))
		{
		echo '<p>'.$donnees_gamme['sty_reference'].'</p>';
		}

?>


Tu as bien écris ca ?


$request_gamme=("SELECT g.sty_reference, g.ima_chemin FROM v_gamme g WHERE g.sty_reference SUBSTR(g.sty_reference,3,2)='".$gamme."'");


Parce que dans le code que tu as collé je ne vois pas ma "solution"

Ce que je me demande aussi c'est est-ce que ta base est bien conçue. tu aurais largement pu avoir une table contenant toutes les "catégories" et être liée dans ta tables "articles" par un id.
Modifié par ffwrude (19 Nov 2010 - 17:26)
Ah bah oui. j'ai fait une faute à la con j'ai laissé ta variable dans la requette. Tu aurais pu le voir Smiley cligne Bizarre que ca ai marché dans MySql avec une erreur pareille.


	$requette=("SELECT g.sty_reference, g.ima_chemin FROM v_gamme g WHERE SUBSTR(g.sty_reference,3,2)='".$gamme."'");


Mais après je dis ca je dis rien parce que j'ai pas vu la base mais je pense que si tu as une liste d'articles séparés en catégories il serait bon d'avoir une table qui stock les catégories et de lier chaque article via un id a une catégorie.
Modifié par ffwrude (19 Nov 2010 - 17:42)
Je me suis fait une page de test et moi ca marche avec ca =>


<?php
	include ("./connexion.php"); //Ceci est le fichier qui me sert à me connecter a ma base
	$requette = "CREATE TABLE `base`.`v_gamme` (`sty_reference` VARCHAR( 10 ) NOT NULL ,`ima_chemin` VARCHAR( 10 ) NOT NULL ) ENGINE = MYISAM ;";
	$launch = mysql_query($requette);

	$requette = "INSERT INTO `base`.`v_gamme` (`sty_reference` ,`ima_chemin`) VALUES ('PL2001', 'PL2001'), ('AT1001', 'AT1001'), ('PL2002', 'PL2002'), ('AT1002', 'AT1002');";
	$launch = mysql_query($requette);
	
	$gamme = "20";
	
	$requette_gamme=("SELECT g.sty_reference, g.ima_chemin FROM v_gamme g WHERE SUBSTR(g.sty_reference,3,2)='".$gamme."'");
	echo $requette_gamme;
	$launch_gamme = mysql_query($requette_gamme);
	while($val = mysql_fetch_assoc($launch_gamme)){
		print_r($val);
		echo "<br />";
	}
?>

Modifié par ffwrude (19 Nov 2010 - 17:54)