Jump to content

créer une table dans la base de donnée lors de l'installation


Recommended Posts

bonsoir. je trouve ce ligne dans ce tutoriels :

Pour ma part, j’ai également choisi la solution de placer le code SQL dans un fichier à part. J’ai donc créé un fichier sql_install.php retournant un tableau avec pour chaque entrée :  en clé le nom de la table et en valeur le code SQL permettant de créer celle-ci.

 

                                                                       source:http://connect.adfab.fr/e-commerce-3/module-prestashop-episode-2

je ne comprend comment faire pour créer un table lors de l'installation.

j'ecrire ce code:

public  function installDb(){
       $return=true;
       include (dirname(__FILE__).'/sql_install.php');
       foreach($sql as $s){
          $return &=Db::getInstance()->execute($s);
          return $return;
       }

et dans le fichier sql_install.php j'ecrire cette requete sql:

$sql="CREATE TABLE IF NOT EXISTS `cup` (
  `id` int(11) NOT NULL,
  `cup_name` varchar(50) NOT NULL,
  `cup_mail` text NOT NULL,
  `adress_cup` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)";

mysql_query($sql);

et enfin le table cup ne sont pas créer.

comment resoudre ce probleme?

Link to comment
Share on other sites

je supprime

mysql_query($sql) de fichier sql_install.php et je mis ce code de la module cup

<?php

class Cup extends ModuleCore {
    //put your code here
   public function __construct() {
       $this->name="cup";
       $this->tab="administration";
       parent::__construct();
       
       $this->version="0.1";
       $this->displayName="CUUUUUup";
       $this->description="description de module prestashop";
       //$this->confirmUninstall=l('voulez vous supprimer Cuuup?');
       
   }    
   
   public function install() {
       parent::install();
       $this->registerHook('displayFooter');
       
   }
   
   public  function installDb(){
       $return=true;
       include (dirname(__FILE__).'/sql_install.php');
       
          $return &=_DB_PREFIX_::getInstance()->execute($s);
          return $return;
       
       
   }
}

mais  le table cup n'a pas créer dans la base de donnée :(

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

voilà le code que je mis dans le deux fichier:

cup.php

<?php

class Cup extends ModuleCore {
    //put your code here
   public function __construct() {
       $this->name="cup";
       $this->tab="administration";
       parent::__construct();
       
       $this->version="0.1";
       
       $this->displayName="CUUUUUup";
       $this->description="description de module prestashop";
       //$this->confirmUninstall=l('voulez vous supprimer Cuuup?');
       
   }    
   
   public function install() {
       parent::install();
       $this->registerHook('displayFooter');
       $this->installDb();
   }
   
   public  function installDb(){
       $return=true;
       include (dirname(__FILE__).'/sql_install.php');
       
          $return &=Db::getInstance()->execute($sql);
          return $return;
       
       
   }
    
}

sql_install.php


$sql="CREATE TABLE IF NOT EXISTS _DB_PREFIX.'cup' (
  `id` int(11) NOT NULL,
  `cup_name` varchar(50) NOT NULL,
  `cup_mail` text NOT NULL,
  `adress_cup` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)";

et encore le table ne sont pas créer sur la base de donnée

Link to comment
Share on other sites

salut,

 

c'est un fichier qui contient des instructions sql. Pourquoi c'est du code php.

$sql=".......";

 

perso je mettrai plutot directement la syntaxe. la variable _DB_PREFIX je ne sais pas.

 

pour le champ id, si tu ne le fixe pas ailleurs met le en autoinc. si tu fais des recherches sur les champs cup_name ou cup_mail rajoute des index. ça optimisera les jointures

 

CREATE TABLE IF NOT EXISTS _DB_PREFIX.`cup` (
`id` int(11) NOT NULL,
`cup_name` varchar(50) NOT NULL,
`cup_mail` text NOT NULL,
`adress_cup` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);

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

essaye avec ça :
 
 

<?php
class Cup extends Module
{
	public function __construct()
	{
		$this->name = 'cup';
		$this->tab = 'administration';
		parent::__construct();

		$this->version = '0.1';

		$this->displayName = 'CUUUUUup';
		$this->description = $this->l('description de module prestashop');
	}    

	public function install()
	{
		if (!parent::install()
		|| !$this->registerHook('displayFooter') 
		|| !$this->installDb())
			return false;
		return true;
		
	}

	public  function installDb()
	{
		$sql = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'cup` (
			`id` int(11) NOT NULL,
			`cup_name` varchar(50) NOT NULL,
			`cup_mail` text NOT NULL,
			`adress_cup` varchar(50) NOT NULL,
			PRIMARY KEY (`id`))';
		return Db::getInstance()->execute($sql);
	}
}

Link to comment
Share on other sites

Bonjour,

 

Essayez dans : /install/data/db_structure.sql

 

Rajouter : 

 

CREATE TABLE IF NOT EXISTS `PREFIX_cup` (
  `id` int(11) NOT NULL,
  `cup_name` varchar(50) NOT NULL,
  `cup_mail` text NOT NULL,
  `adress_cup` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;
 
 
Ensuite faites l’installation.
 
Cdt
Link to comment
Share on other sites

ah ok ça marche mais j'ai trois question :

1) quand j'écrit extends module avec netbeans il ne m'affiche pas et il m'affiche ModuleCore.y'a-t il une différence entre les deux?

2)c'est quoi _DB_prefix et quel est leur  rôle dans cette instruction.

3) registerHook('displayFooter') est -il une block vide créer sur le pied de page de front-end

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

ah ok ça marche mais j'ai trois question :

1) quand j'écrit extends module avec netbeans il ne m'affiche pas et il m'affiche ModuleCore.y'a-t il une différence entre les deux?

2)c'est quoi _DB_prefix et quel est leur  rôle dans cette instruction.

3) registerHook('displayFooter') est -il une block vide créer sur le pied de page de front-end

 

Pour 1 je n'ai pas de réponse.

2 - _DB_prefix , c'est simplement un préfixe utiliser sur les noms des tables, pour par exemple avoir plusieurs PrestaShop sur une même bdd.

3 - registerHook('displayFooter')  est utiliser pour hooké le module dans le footer, sans avoir a passer par le backoffice.

 

Corrigez moi si je me trompe ;)

 

Cdt

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