0

DELETEそれぞれの横にリンクを印刷しようとしています$row。また、別のページに「ダウンロード」リンクがあります。同じように機能するはずです。問題はこれです:各レコードと一緒に出力するためにDELETEとDOWNLOADの両方を取得していますが、私が持っているコードを使用すると、何も起こらないか、スクリプトがエラーでベイルアウトします。何らかの理由で、私は自分のサイトの最も複雑な機能を稼働させていますが、それでも私にはわかりません。ここにいくつかのコードがあります:

    while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC))
    {
  echo '<tr><td align="left">' .
    $row['title'] . '</td><td align="left">'
    . $row['genre'] . '</td><td align="left">'
    . $row['length'] . '</td><td align="left">'
    . $row['created'] . '</td><td align="left">'
    . $row['views'] . '</td><td align="left">'
    . "<a href='wprofile.php?id={$row['upload_id']}'>Delete</a></td> . '</td></tr>';
    }

同じphpページに、私が失敗しているこのロジックがあります。例は削除用ですが、ダウンロードリンクの問題についても同じ失敗が続きます。

    if(isset($_GET['upload_id']))
    {
    $id = intval($_GET['upload_id']);

    require_once (dbconnectionpath);

    $delquery = "DELETE FROM 'upload' WHERE 'upload_id' = {$id}";
    $done = @mysqli_query ($dbc, $delquery); //run the query

    if($done) {
    if (mysqli_num_rows($done)==1) {
    echo 'Record deleted';
    }
    else{
    echo 'Delete failed';
    }

    @mysqli_free_result($result);
    }
    else{
    echo "Error! Query failed: <pre>{$dbc->error}</pre>";
    }
    mysqli_close(dbconnection);

私が得ているエラーは「エラー、クエリに失敗しました」です

4

3 に答える 3

0

あなたのリンクでは、あなたは設定しているように見えますid

<a href='wprofile.php?id={$row['upload_id']} ...

しかし、あなたのコードはを参照しています$_GET['upload_id']。つまり、コードで間違った名前を参照しているということです。idコードまたはupload_idリンクで使用します。

もう1つ、これはHTMLがすべて表示されないことが原因である可能性があります。つまり</td>、コード内の多くの要素が必要であるように見えます。ただし、前述のように、リンク行の最後にあるものを確認してください。これにより、<td>表示されていない以前のデータが閉じられる場合があります。


コメントで言及しているように、「ソースの表示」がリンクを次のように表示している場合:

<a href='newwriter_profile.php?id='>Delete</a></td>

次に、そのHTMLリンクの作成に問題があります。

ここで問題が発生する可能性のあることがいくつかあります。最初に頭に浮かぶのは、元のクエリにクエリが含まれていないupdate_idか、表示している行のIDが実際に空白であるということです。

HTMLリンク行を生成する前にの値を確認し$row['update_id']てください。少なくともその仮説を確認または拒否する必要があります。それを超えて、あなたはあなたのリンクが間違っている理由を理解する必要があります。


今気づいたことの1つは、あなたが調べたいと思うかもしれませんが、引用符の使用です。

$delquery = "DELETE FROM 'upload' WHERE 'upload_id' = {$id}";

MySQLがバッククォートを使用してテーブル名と列名を誤った解析(withなどselect `column with spaces` from tbl1 ...)から保護することがあることはわかっていますが、コードにはバッククォートではなく一重引用符が含まれているようです。

チェックアウトするのはもう1つだけです。whereクエリの句が、列を比較するのではなく、リテラル文字列「upload_id」を変数と比較している可能性がありupload_id ます。

deleteこれは、IDが(おそらく)自動インクリメント整数フィールドであるために行にヒットしない理由を説明している可能性があります。つまり、数値以外の文字列リテラルと等しくなることはありません。

于 2012-05-11T01:07:41.877 に答える
0

if(isset($_GET['upload_id']))への変更if(isset($_GET['id']))

$id = intval($_GET['id']);

HTMLパラメータはidであり、upload_idではありません

于 2012-05-11T01:08:37.373 に答える
0

中括弧を削除してみてください。作成されたクエリを印刷すると、中括弧付きのIDの値が表示されるため、IDが削除されない可能性があります。

これは機能するはずです: "DELETE FROM upload WHERE upload_id = $ id";

ページが別のページに移動しないようにするには、preventdefaultjs関数を使用します。

于 2012-05-11T04:42:25.157 に答える