it-swarm.com.de

Wie man eine Funktion aufruft, die eine Tabelle in einer Datenbank erstellt (Plugin-Funktionalität)

Ich versuche ein kleines Plugin zu erstellen, aber es erstellt keine Tabelle in der Datenbank, wenn ich das Plugin aktiviere. Bitte schauen Sie sich den unten angegebenen Code an, da die Funktion function jal_install () nicht aufgerufen wird.

      <?php
        /*
        Plugin Name: My-Ads
        Plugin URI: http://wordpress.org/#
        Description: This is the most basic wordpress plugin, gets input from the user and displays it on every page.
        Author: shalu


       */

       /*when plugin is activated*/

       register_activation_hook(_FILE_,'my_first_install');

      /*when plugin is deactivated*/
      register_deactivation_hook( __FILE__, 'my_first_remove' );

      function my_first_install()
       {
         add_option("my_first_data", 'Testing !! My Plugin is Working Fine.', 'This is my first plugin panel data.', 'yes');

       }
       function my_first_remove() 
          {
        /* Deletes the database field */
        delete_option('my_first_data');

           }

           /*Code-Add Admin Panel Menu Item*/

      if(is_admin())
        {
               add_action('admin_menu','my_first_admin_menu');

           function my_first_admin_menu()
            {
             add_options_page('My First', 'Ads', 'administrator','my-first',        'my_first_plugin_page');
             }
            }



         function my_first_plugin_page() {
       ?>

         <div>
        <h2>Add your ads from here</h2>
          <form method="post" action="options.php" enctype="multipart/form-data">
             <?php wp_nonce_field('update-options'); ?>
          <table width="510">
      <tr valign="top">
        <th width="92" scope="row">Name:</th>
          <td width="406">
           <input name="my_first_data" type="text" id="my_first_data" value="<?php echo get_option('my_first_data'); ?>" /></td>
           </tr>
           <tr>
         <th width="92" scope="row">Target Url:</th>
         <td width="406">
          <input name="Target_Url" type="text" id="Target_Url" value="<?php echo get_option('Target_Url'); ?>" />
           </td>
          <tr>
          <tr>
         <th width="92" scope="row">Ad image:</th>
        <td width="406">
          <input name="file" type="file" id="file"/></td>
          </tr>
       </table>
      <input type="hidden" name="action" value="update" />
      <input type="hidden" name="page_options" value="my_first_data" />
        <p>
       <input type="submit" value="<?php _e('Save Changes') ?>" />
         </p>
        </form>
           </div>
           <?php

               }

          /* This calls my_first() function when wordpress initializes.*/
        function my_first()
       {

          echo get_option('my_first_data');
           }

       function jal_install () {
           global $wpdb;
              global $jal_db_version;

           $table_name = $wpdb->prefix . "liveshoutbox";
           echo $table_name;
            if($wpdb->get_var("show tables like '$table_name'") != $table_name) {

           $sql = "CREATE TABLE " . $table_name . " (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
  time bigint(11) DEFAULT '0' NOT NULL,
  name tinytext NOT NULL,
  text text NOT NULL,
  url VARCHAR(55) NOT NULL,
  UNIQUE KEY id (id)
);";

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

  $rows_affected = $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'name' => $welcome_name, 'text' => $welcome_text ) );

  add_option("jal_db_version", $jal_db_version);

            }
          }

        //calling the function
        register_activation_hook(__FILE__,'jal_install');

         ?> 

bitte helfen Sie mir, wo das Problem liegt. Ich werde Ihnen sehr dankbar sein

1
shalu

Das erste Problem, auf das AutoBLogged hingewiesen hat, ist, dass Sie im ersten Aktivierungs-Hook nicht auf _FILE_, sondern auf __FILE__ verwiesen haben.

Es gibt ein mögliches sekundäres Problem, und ich sage möglich, weil ich die Aktivierungs- oder Deaktivierungs-Hooks noch nie ausgiebig selbst verwenden musste, und das mit zweimaligem Aufruf von register_activation_hook, einmal nach oben und einmal nach unten.

Ich würde annehmen (und ich könnte hier falsch liegen), dass Sie nicht zwei separate Aktivierungs-Hooks für eine einzelne Datei erstellen können. Die Lösung sollte jedoch einfach sein. Nehmen Sie den Code aus beiden Funktionen und verschieben Sie ihn in eine, sodass Sie nur einen Aufruf für register_activation_hook benötigen.

1
t31os

Anscheinend haben Sie den Code von oben hier kopiert und damit gerechnet, dass er einfach funktioniert. Wenn ich mir anschaue, wie die einzelnen Zeilen durcheinander sind und Dinge wie das _FILE_-Problem oder $rows_affected festgelegt werden, aber nirgendwo aufgerufen werden, dann ist es die beste Empfehlung, den Code einfach selbst zu lesen, ihn zu bereinigen und einige Kommentare hinzuzufügen, die etwas bewirken als inline "Was macht diese Zeile?" - Protokoll.

Außerdem sollte kein Plugin seine Optionen während der Deaktivierung löschen, sondern bei der Deinstallation. Versuchen Sie auch, Funktions- und Variablennamen zu verwenden, die erklären, was Zeug ist oder tut.

Letzte Zeile: Fügen Sie der Datenbank keine Tabellen hinzu, es sei denn, Sie sind sich ziemlich sicher, wie das Zeug funktioniert. Sie könnten wirklich viel durcheinander bringen.

1
kaiser

Hier ist ein Problem:

register_activation_hook(_FILE_,'my_first_install');

Das sollte so sein:

register_activation_hook(__FILE__,'my_first_install');
0
AutoBlogged