Jump to content

Ma requête sql ne fonctionne pas.


Recommended Posts

Bonjour, voilà mon problème est dans le titre.

J'ai une requête sql basique appellant une variable qui récupère l'id de la page catégory ou je suis. Jusqu'ici pas de problème.

 

$idparent = Db::getInstance()->ExecuteS(

"SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idcategorypage);

 

Cependant lorsque je récupère le résultat (qui s'affiche bien), il ne fonctionne pas dans ma requête.

 

$idsuperparent = Db::getInstance()->ExecuteS(

"SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idparent);

 

[RESOLU]

Edited by dubs494 (see edit history)
Link to comment
Share on other sites

Topic déplacé vers développement.

 

Bonjour,

 

Vous ne pouvez pas utiliser $idparent comme cela.

 

$idparent = Db::getInstance()->getValue(
"SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idcategorypage);

 

Cela me paraît déjà plus adapté.

Car la, vous essayez de passe un tableau en clause WHERE...

Link to comment
Share on other sites

  • 4 months later...

Bonjour, voilà mon problème est dans le titre.

J'ai une requête sql basique appellant une variable qui récupère l'id de la page catégory ou je suis. Jusqu'ici pas de problème.

 

$idparent = Db::getInstance()->ExecuteS(

"SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idcategorypage);

 

Cependant lorsque je récupère le résultat (qui s'affiche bien), il ne fonctionne pas dans ma requête.

 

$idsuperparent = Db::getInstance()->ExecuteS(

"SELECT id_parent FROM "._DB_PREFIX_."category WHERE id_category=".$idparent);

 

[RESOLU]

 

Bonjour,

 

J'aimerais savoir ou on dois mettre des requêtes comme la votre ? pour que çà fonctionne ? Dans quelle fichier ou je ne sais pas..

 

Merci d'avance pour votre réponse.

Link to comment
Share on other sites

Ce genre de requête est une méthode utilisée dans la classe Db pour effectuer une requête sql que la base de données. Elle s'utilise dans les fichiers PHP comme par exemple les fichiers controllers, les classes ou les modules.

 

Mais comment comptez-vous utiliser ce genre de requête alors que vous semblez ne pas du tout maitriser PHP ????

Link to comment
Share on other sites

Bonsoir,

 

Merci d'avoir répondu. Pour ce qui dit maîtrise de php j'ai une bonne maîtrise c'est juste que prestashop, j'ai pas encore bien assimiliez tous ses conventions... Mon idées c'est de faire des requêtes personnaliser dans le fichier controller category par exemple jusque la ça va. C'est après je bloc pour passer mes variables vers smarty. Ce que j'aimerais savoir c'est un exemple concrète puisque sur le

Forum j'ai pas trouvé. L'exemple que j'aimerais avoir c'est une requête simple dans un controller ou autres puis l'étape pour l'affiche les résultat de cette requête dans les ou le fichier .tpl.

 

Voilà j'espère avoir était précis de la nature de mon soucie.

 

Merci d'avance pour votre réponse.

Link to comment
Share on other sites

Prestashop < 1.5 (1.1 => 1.4.9)

Côté PHP:

global $smarty;
$ma_var = Db::getInstance()->ExecuteS(
"SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1");
$smarty->assign('ma_variable',$ma_var);

Côté TPL:

{$ma_variable}

 

Prestashop > 1.5:

Côté PHP:

$ma_var= Db::getInstance()->ExecuteS(
"SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1");
$this->context->controller->smarty->assign('ma_variable',$ma_var);

Côté TPL:

{$ma_variable}

 

Attention la variable TPL que tu récupères est un tableau multidimensionnel =. Si tu veux lister des éléments tu devras utiliser foreach (qui fonctionne comme en PHP).

Sinon si tu veux récupérer des singletons tu peux utiliser la méthode getrow notamment plutôt que ExecuteS

Edited by franckm1000 (see edit history)
  • Like 1
Link to comment
Share on other sites

Prestashop < 1.5 (1.1 => 1.4.9)

Côté PHP:

global $smarty;
$ma_var = Db::getInstance()->ExecuteS(
"SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1");
$smarty->assign('ma_variable',$ma_var);

Côté TPL:

{$ma_variable}

 

Prestashop > 1.5:

Côté PHP:

$ma_var= Db::getInstance()->ExecuteS(
"SELECT * FROM "._DB_PREFIX_."product WHERE id_product=1");
$this->context->controller->smarty->assign('ma_variable',$ma_var);

Côté TPL:

{$ma_variable}

 

Attention la variable TPL que tu récupères est un tableau multidimensionnel =. Si tu veux lister des éléments tu devras utiliser foreach (qui fonctionne comme en PHP).

Sinon si tu veux récupérer des singletons tu peux utiliser la méthode getrow notamment plutôt que ExecuteS

 

Bonjour,

 

Et te remercie de répondre à ma pro problématique. Je vais tester... c'est surtout

$this->context->controller->smarty->assign('ma_variable',$ma_var); que je ne savais pas...

 

Merci encore une fois et je vous tiens au courant. Bon dimanche

Link to comment
Share on other sites

C'est la nouvelle façon d'appeler la variable smarty dur prestashop 1.5.

 

A noter que la méthode "traditionnelle" avec global $smarty et $smarty->assign(...) fonctionne également sur la 1.5

 

Ok merci pour l'info. Mais je reviens vers vous, je viens d'ajouter une requête pour tester (elle n'est pas super propre).

Dans mon fichier : /override/classes/controller/FrontController.php.

 

La requête : $ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3");

$this->context->controller->smarty->assign('ma_variable',$ma_var);

 

Dans la table "category_lang" je vais selectionner la 1er ligne qui a pour valeur "3" dans la colonne "id_category".

 

Dans mon fichier .tpl : footer.tpl, j'ai mis : {if isset($ma_variable)}{$ma_variable}{/if}.

 

Et là j'ai une page blanche ! Je pense que c'est ma requête qui n'est pas bonne.

 

J'ai essayé dans le fichier : /classes/controller/FrontController.php. Idem page blanche...

 

Merci d'avance.

Edited by BakerSky (see edit history)
Link to comment
Share on other sites

C'est la nouvelle façon d'appeler la variable smarty dur prestashop 1.5.

 

A noter que la méthode "traditionnelle" avec global $smarty et $smarty->assign(...) fonctionne également sur la 1.5

 

J'ai essayé une fonction, il me fait plus page blanche mais il ne me retourne pas la valeur ou les... exmple :

 

public function catedisnt(){

$ma_var = Db::getInstance()->ExecuteS("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3");

foreach ($ma_var as $list_ma_var){

$this->context->controller->smarty->assign('ma_variable',$list_ma_var['name']);

}

}

 

Vous pensez ? quoi.

 

PS : si je mets pas dans une fonction il me mets page blanche.

Edited by BakerSky (see edit history)
Link to comment
Share on other sites

Attention, vous êtes dans des classes, donc vous êtes obligé de le mettre dans une fonction ! d'où la page blanche

 

Mais si ensuite vous n'appelez pas la fonction, ça ne va rien faire.

 

Avant de le faire en override, éditez plutôt simplement le fichier:

classes/controller/frontcontroller.php en ajoutant à la fin juste avant le dernier }:

public function displaycontent()
{
$ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3");
$this->context->controller->smarty->assign('ma_variable',$ma_var);
}

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Attention, vous êtes dans des classes, donc vous êtes obligé de le mettre dans une fonction ! d'où la page blanche

 

Mais si ensuite vous n'appelez pas la fonction, ça ne va rien faire.

 

Avant de le faire en override, éditez plutôt simplement le fichier:

classes/controller/frontcontroller.php en ajoutant à la fin juste avant le dernier }:

public function displaycontent()
{
$ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3");
$this->context->controller->smarty->assign('ma_variable',$ma_var);
}

 

J'ai toujours rien ! C'est bizarre quand même;

 

J'ai édité le fichier classes/controller/FrontController.php et j'ai supprimé bien sûre la function dans l'autre fichier /override/classes/controller/frontcontroller.php.

 

Votre function il me fait aussi page blanche parce-que il y a une autre function du même nom à la ligne -> 529 : /**

* 1.4 retrocompatibility - will be removed in 1.6

*/

public function displayContent()

{

}

 

Je bloc grave sur pour une requête <_< grave quoi.

Link to comment
Share on other sites

J'ai toujours rien ! C'est bizarre quand même;

 

J'ai édité le fichier classes/controller/FrontController.php et j'ai supprimé bien sûre la function dans l'autre fichier /override/classes/controller/frontcontroller.php.

 

Votre function il me fait aussi page blanche parce-que il y a une autre function du même nom à la ligne -> 529 : /**

* 1.4 retrocompatibility - will be removed in 1.6

*/

public function displayContent()

{

}

 

Je bloc grave sur pour une requête <_< grave quoi.

Attention, vous êtes dans des classes, donc vous êtes obligé de le mettre dans une fonction ! d'où la page blanche

 

Mais si ensuite vous n'appelez pas la fonction, ça ne va rien faire.

 

Avant de le faire en override, éditez plutôt simplement le fichier:

classes/controller/frontcontroller.php en ajoutant à la fin juste avant le dernier }:

public function displaycontent()
{
$ma_var= Db::getInstance()->getrow("SELECT * FROM "._DB_PREFIX_."category_lang WHERE id_category= 3");
$this->context->controller->smarty->assign('ma_variable',$ma_var);
}

 

Pour autant dans le fichier /override/classes/controller/frontcontroller.php; j'ai une function qui fonctionne très bien !

 

cette function :

 

public function process(){
  global $cookie;
  $parent = new Category(Tools::getValue('id_category'), intval($cookie->id_lang));
  $listing = $parent->getParentsCategories($cookie->id_lang);
  foreach ($listing as $list)
   {
  	 if($list['level_depth']==2)
  		  {
  		   self::$smarty->assign('parent',$list['id_category']);
  		   self::$smarty->assign('parent_nom',$list['name']);

  		   break;
  		  }
   }

}

 

Je fais appel dans toute mes .tpl çà fonctionne sauf sur la page produit !

 

J'ai bien {$parent} ou {parent_nom} Mais c'est pour les requêtes ça fonctionne pas, c'est dommage!

Edited by BakerSky (see edit history)
Link to comment
Share on other sites

Eh bien intégrez votre requête dans cette fonction process.

 

Dernière chose, je fais un foreach mais ça me retourne qu'une seule ligne.

 

Ma function :

 

$req = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'category_lang`');
      foreach ($req as $f){
       if($f['id_category']==3)
  		  {
  		   self::$smarty->assign('req_cat',$f['name']);
  		  }
       }

 

Et pourtant j'ai plusieurs ligne qui a pour valeur 'id_category' = 3, j'ai essayé le while ça fonctionne pas.

 

Merci d'avance.

Link to comment
Share on other sites

Normal, car tu renvoies à chaque boucle la dernière valeur de ton tableau dans req_cat. Donc il te retournera la dernière valeur de ton tableau puisque entre temps il aura effacé toutes les autres !

 

Le mieux est de traiter le tableau dans le fichier tpl.

 

Côté PHP:

$req = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'category_lang`');
self::$smarty->assign('req_cat', $req);

 

Côté TPL:

{foreach from=$req_cat item=iteration}
{if $iteration.id_category==3}
{$iteration.name}<br />
{/if}
{/foreach}

 

Sinon côté PHP tu peux faire ça:

$req = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'category_lang`');
   foreach ($req as $f){
	if($f['id_category']==3)
			  {
			   $tableau[]=$f['name'];
			  }
	}
self::$smarty->assign('req_cat',$tableau);

Mais côté TPL tu devras aussi faire un foreach car tu as un tableau.

Seule différence, ton tableau ne contient déjà plus que les éléments de la catégorie 3

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...