-1

SQLクエリを使用して、データベースに保存されたすべてのエントリを表示するPHPコードを作成しています。エントリは正しく表示されますが、ユーザーが 1 つのエントリを削除できるようにする jQuery ダイアログを実行しようとしています。
これは私のコードです:

<?php
    $username="HIDDEN";
    $password="HIDDEN";
    $database="HIDDEN";

    mysql_connect(localhost,$username,$password);
    @mysql_select_db($database) or die( "Non riesco a scaricare la lista degli eventi del Diario. L'errore &egrave; dovuto a noi. Riprova pi&ugrave; tardi. Ci scusiamo per il disagio.");
    $query= ("SELECT * FROM diary WHERE Username = '{$_SESSION['Username']}' AND NOT (folder = 'c') ORDER BY " . $_GET['sort']);
    $result= mysql_query($query);

    $i=0;
    while ($i < $num) {

    $type = mysql_result($result,$i,"type");
    $create_date = mysql_result($result,$i,"create_date");
    $priority = mysql_result($result,$i,"priority");
    $date = mysql_result($result,$i,"date");
    $materia = mysql_result($result,$i,"materia");
    $descr = mysql_result($result,$i,"descr");
    $id = mysql_result($result,$i,"id");

    ?>
<!-- finestra eliminazione -->
<div id="dialog-delete<?= $id; ?>" title="Sei sicuro di voler spostare nel cestino <?php echo($type . ' di ' . $materia); ?>" style="display: none;">
<div style="margin: 20px">
<img src="http://cdn1.iconfinder.com/data/icons/DarkGlass_Reworked/128x128/apps/konsolekalendar.png" alt="" height="127" width="120" style="margin-right: 30px; float: left" /><span class="auto-style4">Sei sicuro di voler eliminare <?php echo $type . ' di ' .$materia; ?>?<br>
</span><span class="auto-style5">Stai per spostare nel cestino questo 
elemento<br>creato in data <?php echo $create_date; ?>.<br><br></span>
<table style="width: 70%">
    <tr>
        <td style="width: 50%">
        <button onclick="javascript:window.close();" style="width: 96px; height: 28px;">Annulla</button>&nbsp;</td>
        <td class="auto-style6" style="width: 50%">
        <form name="form" method="post">
        <input type="submit" style="width: 95px; height: 28px; float: right" name="deletediary" value="Elimina">&nbsp;
        </form>
        </td>
        <?php

        if(isset($_POST['deletediary'])){

        $username="HIDDEN";
        $password="HIDDEN";
        $database="HIDDEN";

        mysql_connect(localhost,$username,$password);
        @mysql_select_db($database) or die( "Non riesco a leggere l'elemento. L'errore &egrave; dovuto a noi. Riprova pi&ugrave; tardi. Ci scusiamo per il disagio.");
        $query= ("UPDATE diary SET folder = 'c' WHERE (Username = '{$_SESSION['Username']}') AND (id = '".$id."') LIMIT 1");
        $result= mysql_query($query);


        $num = mysql_numrows($result);

        mysql_close();

        echo("Evento diario spostato correttamente nel cestino.");

        }
        ?>
    </tr>
</table>
</div>
</div>
    <?php
    echo('  <script type="text/javascript">
    function showDialogDelete'.$id.'()
    {
        $( "#dialog-delete'.$id.'" ).dialog({
                width: 650,
                height: 250,
                modal: true,
                open: function(event, ui)
                {

                }
            });
    }
</script>');
    ?>
    <table style="margin-bottom: 5px; width: 100%" cellspacing="10px">
    <tr>
    <td rowspan="2" style="width: 80px">
    <table cellpadding="10px" style="width: 70px; height: 60px">
    <tr>
    <td>
    <center style="padding: 5px">&nbsp;&nbsp;</center>
    </td>
    </tr>
    <tr>
    <td>
    <center style="padding: 5px">&nbsp;&nbsp;</center>
    </td>
    </tr>
    </table>
    </td>
    <td>
    <b><?php echo $type . ' di ' . $materia ?></b><div style="float: right; color: #585858; font-size: 16pt"><span class="tooltip" onmouseover="tooltip.pop(this, '<a href=read.php?id=<?= $id?>&type=diary>Apri</a><br/><a href=\'javascript:void(null);\' onclick=\'showDialogDelete<?= $id; ?>();\'>Elimina</a>')" style="color: <?= $_SESSION['accent'] ?>">...</span></div>
    </td>
    </tr>
    <tr>
    <td>
    <b>Priorit&agrave;: </b><?php echo $priority; ?>
    </td>
    </tr>
    </table>

問題は、エントリを削除しようとすると、選択したエントリではなく、常に最初のエントリが SQL コードによって削除されることです。
POST、GET、AJAX でもこの問題を解決しようとしましたが、常に最初のエントリが削除されます。
誰でも私を助けてもらえますか?

4

1 に答える 1

1

この種のことを行う方法はたくさんありますが、私の方法はその 1 つにすぎません。

確認する必要がある基本的なプロセスは次のとおりです。

表示された各削除可能エントリが識別可能であることを確認してください。各エントリに独自のボタンがある場合は、次のようなものが必要です。

<INPUT type='button' value='delete' onClick='deleteFunction(uniqueIdForThisLine)'>

次に、deleteFunction は、関連するエントリを削除する小さな PHP ファイルへの ajax 呼び出しを実行します。

ヒント: エントリ全体をスパン vis でラップする場合:

<SPAN id='uniqueIdForThisLine.spn'>diary text</SPAN>

PHP がバックグラウンドで作業を行っている間に、エントリを非表示 (display: none;) にするのは非常に簡単です。

あなたの問題は、すべてのエントリに同じ ID が与えられているか、おそらく ID にゼロの値を誤って SQL に渡していることが原因であると思われます。

変数名のスペルが正しいことを確認してください

SQL をエコーし​​て、本来あるべきように見えることを確認します (これは通常、データの受け渡しエラーを示します)。

エラー報告をすべてに設定する - これは面倒ですが、適切なコーディング プラクティスを強制し、ほとんどの場合、スペルミスのある変数名を検出します。

于 2013-05-26T12:17:12.393 に答える