-2

ユーザーがデータを入力するフォームと、データベース内のすべての行を表示するテーブルがあります。ユーザーが行の横にある「編集」リンクをクリックすると、ID を PHP ファイルに投稿し、行のデータをフォームにロードします。

これは私がIDを投稿する方法です(そしてそれは機能します)

jQuery('a.edit').on('mousedown', function(){
    var id = jQuery(this).attr('data-title');
    jQuery.ajax({
        url: document.location,
        data: {id: id}
    });
})

これは、投稿されたIDを受信しようとした方法です(機能しません)

if( isset( $_GET['id'] ) ){
    $id = $_GET['id'];
    load_data($id);
}

ページを更新する必要があると思いますか?どうやってやるの?フォームを更新することもできますか?

編集:私はまだリロード/リフレッシュの問題だと思います。値が投稿されていますが、リロードされていないため、PHP が認識しません。ページ全体をリロードするのではなく、jQuery を使用してこれを行っている人を見てきましたが、これを再現できませんでした。これらのファイルがWordpressプラグインの一部であることも言及する価値があるかもしれません..

これがコード全体です(私のプラグインは「spielerportraits」と呼ばれています)

spielerportraits-admin.php

<?php 
function print_data(){
    global $wpdb;
    $datatable = $wpdb->get_results( 
        'SELECT * FROM ' . $wpdb->prefix . 'spielerportraits' ); 
?>

<table id="spieler-output">
    <tr>
        <td>Name</td>
        <td>Geb.datum</td>
    </tr>

<?php foreach( $datatable as $data ) { ?>
    <tr>
        <td><?php echo $data->name; ?></td>
        <td><?php echo $data->gebdatum; ?></td>
        <td><a href="" class="edit" data-title="<?php echo $data->id;?>">bearbeiten</a></td> // The edit-link for jQuery
    </tr>

<?php }
?>
    </table>
<?php
} 

if(isset($_GET['id'])){
    global $wpdb;
    $loaddata = $wpdb->get_row( 
        'SELECT * FROM '.$wpdb->prefix.'spielerportraits WHERE id = '.$_GET['id'] ); 
}
?>


<form enctype="multipart/form-data" name="spieler-form" action="" method="post">
    <table id="spieler-input">
        <tr>
            <td>Name: </td>
            <td><input type="text" name="name" value="<?php if( isset($loaddata) ){echo $loaddata->name;}?>" size="40"></td>
        </tr>
        <tr>
            <td>Geburtsdatum: </td>
            <td><input type="text" name="gebdatum" value="<?php if( isset($loaddata) ){echo $loaddata->gebdatum;}?>" size="40"></td>
        </tr>
        <tr>
            <td class="submit">
                <input type="submit" name="submit" value="Hinzufügen" />
            </td>
        </tr>
    </table>
</form>

<?php
    print_data();
?>

JS

jQuery('a.edit').on('mousedown', function(){
    var id = jQuery(this).attr('data-title');
    jQuery.ajax({
        url: document.location,
        data: {id: id},
        success: function(data){
            alert(data['id']); // This does show, but gives me 'undefined'
        }
    });
});

これは、Wordpress でプラグインを初期化する方法です (spielerportraits.php):

<?php

add_action( 'admin_enqueue_scripts', 'spielerportraits_style' );
add_action('admin_menu', 'spielerportraits_custom_menu_page');

function spielerportraits_custom_menu_page() {
   $page = add_menu_page( 'Spielerportraits', 'Spielerportraits', 'manage_options', 'spielerportraits/spielerportraits-admin.php', '', '' ), 33 );
}

function spielerportraits_style() {
    wp_enqueue_script( 'spielerportraits-admin-script', plugins_url('/script.js', __FILE__) );

}

global $jal_db_version;
$jal_db_version = "1.0";

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

   $table_name = $wpdb->prefix . 'spielerportraits';

   $sql = "CREATE TABLE $table_name (
        id int NOT NULL AUTO_INCREMENT,
        name tinytext NOT NULL,
        gebdatum date',
        PRIMARY KEY id (id)
    );";

    if( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name ) {
        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
        dbDelta( $sql );
        add_option( "jal_db_version", $jal_db_version );
    }
}

register_activation_hook( __FILE__, 'jal_install' );

?>
4

4 に答える 4

0

それは一種のリロードの問題でした。これを機能させるために私がしたことは次のとおりです。

jQuery('a.edit').on('mousedown', function(){
    var id = jQuery(this).attr('data-title');
    alert(id);
    jQuery.ajax({
        url: document.location,
        data: {id: id},
        success: function(data){
            var newDoc = document.open("text/html", "replace");
            newDoc.write(data);
            newDoc.close();
        }
    });
});

ドキュメントの一部を置き換えるだけでなく、この方法ではページの履歴が表示されるため、ユーザーにとって非常に役立ちます。

于 2013-08-27T06:09:14.083 に答える