Question

Je travaille sur un plugin de vote pour mon site et je veux créer 2 tables:. Qui stocke les votes et un autre que l'électeur stocke ips

Dans le Codex, il suggère d'utiliser une instruction if pour voir si la table a déjà été créé lors de l'installation du plug-in, mais comment puis-je modifier le code si je crée 2 tables?

Ceci est mon instruction if dans le plug-in fonction installent, pour vérifier si actuellement 1 table existe déjà.

...

   $table_name1 = $wpdb->prefix . "voters_ip";
   $table_name2 = $wpdb->prefix . "vote_posts";
   $installed_ver = get_option( "postvote_version" );  

   if($wpdb->get_var("show tables like '$table_name'") != $table_name1) { //unsure how to add both tables

      $sql = "CREATE TABLE " . $table_name1 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      voter_ip varchar(100) NOT NULL,
      UNIQUE KEY id (id)
    );";

      $sql = "CREATE TABLE " . $table_name2 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      up int(11) NOT NULL,
      ddown int(11) NOT NULL,
      UNIQUE KEY id (id)
    );";

      require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
      dbDelta($sql);

      add_option("postvote_version", $postvote_version);
   }

....

Quelle est la bonne façon de vérifier si les deux tables existent?

Était-ce utile?

La solution

techniques de programmation de base, vous devriez avoir appris avant de construire un plug-in:

  1. Vous pouvez concaténer les contrôles avec && (et) et || (Ou).
  2. Vous pouvez (et devez) garder chaque requête CREATE avec son propre contrôle

SQL syntaxe que vous devriez avoir examiné avant d'écrire des requêtes sur votre propre:

Sur le même sujet, s'il vous plaît assurez-vous que vous supprimez ces tables lorsque le plugin est désinstallés / supprimé .

PS: Aucune infraction prévu, mais fait regarder comme vous copie collée sans savoir ce que le code fait. S'il vous plaît être conscient qu'en faisant cela dans un plugin, vous risquez des installations d'autres personnes!

Autres conseils

Je ne pris un coup d'œil rapide à votre code, mais vous avez au moins trois questions.

Le premier est lié à la sécurité:

CREATE TABLE " . $table_name1 . "

Vous ne savez jamais quel genre d'ordures votre fonction pourrait recevoir, afin de mieux l'écrire comme ceci:

CREATE TABLE `" . str_replace('`', '', $table_name1) . "`

La seconde est SQL connexe et déjà mis en évidence:

CREATE TABLE

Devrait être:

CREATE TABLE IF NOT EXISTS

Le dernier et le plus important est la syntaxe PHP liée. Le deuxième appel à:

$sql =

Devrait être:

$sql .=

Sinon, vous ne serez jamais créer la première table. Jamais.

Enfin, en pointe dans un message précédent, il est bon de stocker la version de votre plug-in ou de ses tables, dans une option. Cela permet de mettre à jour plus facilement lorsque ses propres options, et son schéma, le changement.

Si vous utilisez les noms de tables uniques, vous pouvez assumer avec un montant équitable de la confiance que le tableau 2 existe si le tableau 1 existe. Donc, je ne vérifier l'existence de 1 et, si elle est là, sauter les scripts ... si ce n'est pas, exécutez les scripts.

Vous pouvez également désactiver une option clé définie pour votre plug-in:

  • Si l'option existe (à savoir get_option('my-voting-version')), votre plug-in est installé et que vous n'avez pas besoin d'exécuter vos scripts de base de données.
  • Si l'option est pas là, exécutez vos scripts et définissez l'option de sorte que vous ne les exécutez pas deux fois.

Même si le plug-in est supprimé, l'option restera quand il est réactivée, vous ne serez pas ré-écrire les tables. Le stockage version de votre base de données et les scripts en cours d'exécution sur la base qui vous donne aussi le pouvoir de gérer les mises à niveau. Vous pouvez ensuite exécuter sélectivement des scripts de mise à niveau en fonction de la version tableau existait auparavant pour le site.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top