0

ユーザーが別のユーザーに 1 つの応答を送信するメッセージ システムに取り組んでいます。受信者は、while ループですべてのメッセージを表示します。削除ボタンがリンクされているメッセージを削除する削除ボタンを作成しました。2 つの問題があります。まず、削除ボタンが機能しません。次に、機能していたとき (現在は機能していません)、while ループがすべての削除ボタンを最初のメッセージにリンクしていましたが、while ループが生成した各メッセージに個別にリンクしていませんでした。また、mysql が非推奨であることも承知しています。もうすぐ乗り換えです。

最初のコードは次のとおりです。

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

<script type="text/javascript" >
    function load(thefile, thediv) {    
        if (window.XMLHttpRequest) {    
            xmlhttp = new XMLHttpRequest();
        } else {
        xmlhttp = new ActiveXObject ('Microsoft.XMLHTTP');  
        }

        xmlhttp.onreadystatechange = function () {  
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {

                document.getElementById(thediv).innerHTML = xmlhttp.responseText;   
            }
        }   

        xmlhttp.open('GET', thefile + key, true);
        xmlhttp.send();
    }
</script>

<?php

while($ergo_data = mysql_fetch_assoc($ergo_query_result)) {
    echo 'Message: ' . $ergo_data['ergo'] . '<br>'; 

    echo 'From: ' . username_from_user_id($ergo_data['user_id_seeker']) . '<br>'; 
    echo 'Time submitted: ' . $ergo_data['ergo_time_submitted'] . '<br><br><br><br>';
    echo $ergo_data['primary_key'];

?>

<div class="changes">    
    <input type="button" value="delete" class="<?php echo $ergo_data['primary_key']; ?>" 
        name="<?php echo $ergo_data['user_id_seeker']; ?>" 
        onclick="load('ajax_ergo_list.php?key=', 
        'delete');">
</div>

<script type="text/javascript" >
    $(document).ready(function(){
        var key = $(".changes :input").attr("class");   
        alert(key); 
    }); 
</script>   
<br>
<br>
<br>
<?php   
}
?>

<div id="delete"></div>

ボタンが押されたときに何をしたいのかを含む2番目のファイルを次に示します。

if (isset($_GET['key'])) {
    $key = sanitize($_GET['key']);      
}

if (!empty($key)) {
    $query = "DELETE FROM `ergo` WHERE `primary_key` = '$key'";
    $query_run = mysql_query($query);
    echo 'Deleted!';
}

?>
4

1 に答える 1

3

わかりました、まず最初に、これはあなたがここで行っているあらゆる種類のクレイジーなコードです...

<script type="text/javascript" >
    $(document).ready(function(){
        var key = $(".changes :input").attr("class");   
        alert(key); 
    }); 
</script>

while ループ内にスクリプトがあります。これは、ループの回数だけアラートを出します。そして、それが実際に関数が行うすべてです。グローバル変数などを設定していません。

jQueryに関しては、それを使用してください:

function load(thefile, thediv) {    
    if (window.XMLHttpRequest) {    
        xmlhttp = new XMLHttpRequest();
    } else {
    xmlhttp = new ActiveXObject ('Microsoft.XMLHTTP');  
    }

    xmlhttp.onreadystatechange = function () {  
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {

            document.getElementById(thediv).innerHTML = xmlhttp.responseText;   
        }
    }   

    xmlhttp.open('GET', thefile + key, true);
    xmlhttp.send();
}

それを次のように要約します。

function load(thefile, thediv) {    
    $.get(thefile+key,function(responseText){
        $('#'+thediv).html(responseText);   
    });
}

削除機能に関するご質問について:

<div class="changes">    
    <input type="button" value="delete" class="<?php echo $ergo_data['primary_key']; ?>" 
        name="<?php echo $ergo_data['user_id_seeker']; ?>" 
        onclick="load('ajax_ergo_list.php?key=', 
        'delete');">
</div>

あなたonclickは発砲しているjavascriptです。最初の変数はリンクに設定され、2 番目の変数は私が推測しているアクションに設定されていますか? 関数コードでは、2 番目の変数は、情報が表示される div であると想定されています。はkeyどこにもありません。代わりにこれを試してください:

<div class="changes">    
    <input type="button" value="delete" class="<?php echo $ergo_data['primary_key']; ?>" 
        name="<?php echo $ergo_data['user_id_seeker']; ?>" 
        onclick="load('ajax_ergo_list.php?key=<?php echo $ergo_data['primary_key'];?>', 
        'delete');">
</div>

そして、これに対するロード関数:

function load(thefile, thediv) {    
    $.get(thefile,function(responseText){
        $('#'+thediv).html(responseText);   
    });
}

幸運を!

于 2012-08-02T20:50:03.723 に答える