2017-03-20 16 views
-2

私は登録ユーザーのテーブルを持っています。私のコードは、テーブルの削除をクリックすると、行を削除すると仮定しています。削除クリックすると これは、database.phpでそう

..... 
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { 
    echo '<tr><td align="left">' . $row['Id'] . '</td><td align="left"><a href="delete.php?id=' . $row['Id'] . '">Delete</a></td></tr>'; 
    } 
...... 

であり、私はIDを取得しています。これまでのところ、この部分は動作しますが、削除クエリを実行しようとするとうまくいきません。

<?php 
session_start(); 
include 'connection.php'; 
    if (isset($_POST['Id']) && is_numeric($_POST['Id'])){ 
    $id = mysqli_real_escape_string($conn, $_POST['Id']); 
    $result = mysqli_query("DELETE FROM table_name WHERE Id= '$id' ") 
    or die(mysqli_error()); 

    echo "<h3><br><br><a href=database.php> <b> Go Back</a></h3>"; 
    echo "Data Deleted"; 
    }else { 
     echo "Error"; 
     echo "<h3><br><br><a href=database.php> <b> Go Back</a></h3>"; 
    } 
?> 

delete.php私は「エラー」を取得し、それは行を削除しません。どうすれば修正できますか?

編集:

<?php 
session_start(); 
include 'connection.php'; 

if (isset($_GET['Id']) && is_numeric($_GET['Id'])) 
{ 
$id = mysqli_real_escape_string($conn, $_GET['Id']); 
$result = mysqli_query("DELETE FROM User_reg WHERE Id= '$id' ") 
or die(mysqli_error()); 



echo "<h3><br><br><a href=AdminLog.php> <b> Go Back</a></h3>"; 
echo "Data Deleted"; 
}else { 
echo "Error"; 
echo "<h3><br><br><a href=AdminLog.php> <b> Go Back</a></h3>"; 
} 
?> 

はまだ削除クエリが機能していないと同じ結果を得ます。 また、「Id」名はデータベースと同じ方法で設定されます。

+3

'id'は大文字と小文字が区別されます –

+0

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart。 prepared-statements.php)と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成するため、マニュアルエスケープと文字列補間または連結を使用しないでください。誤ってエスケープされていないデータは重大なリスクです。 – tadman

+0

この質問はあまりにも多くの編集が増えています –

答えて

0

$_POST['Id']は、リンクを介してそのスクリプトにアクセスしたため、設定されていません。

<a href="AdminDelete.php?id=' . $row['Id'] . '">Delete</a> 

リンクはPOSTリクエストではなく、GETリクエストです。したがって、$_GET['id'](リンクにidを使用したため、$_GET['Id']ではなく$_GET['id']であることに注意してください)、it's not really safe to use a link to delete things to begin withを設定する必要があります。

この問題を回避する方法はいくつかあります。 1つの方法は、テーブル内の削除リンクを使用して、実際の削除スクリプトに投稿する中間確認ページを表示することです。

+0

POSTをGETに置き換えましたが、削除しても同じ結果が得られます。 – Kdoinnt

+0

「id」と「id」の大文字と小文字の区別については[このコメント](http://stackoverflow.com/questions/42915572/php-delete-row-not-working/42915646#comment72930209_42915572)を参照してください。私はその答えを編集して '$ _GET ['Id']'の代わりに '$ _GET ['id']')を編集しました。 –

+0

しかし、データベースでは "Id"は "id"以外のカラムの名前です – Kdoinnt

0

パラメータを取得して投稿をチェックし、上記のコメントをメモに書き留めておき、プログラマがIDを簡単に変更して別のユーザー情報を削除できるので、getを使用しないでください社会的な使用が、私はそれを削除するには、AJAX callmてみましょうなぜあなたは代替がそうPOSTメソッドは、代わりにこの

if (isset($_POST['id']) && is_numeric($_POST['id'])){ 
$id = mysqli_real_escape_string($conn, $_POST['id']); 

この

に変更使用し作成しないかぎり、削除、検索することができないため、である微調整するカントの代わりためのポストを使用
if (isset($_GET['id']) && is_numeric($_GET['id'])){ 
$id = mysqli_real_escape_string($conn, $_GET['id']); 

これは動作するはずです

+0

POSTをGETに置き換えましたが、私はまだ同じ結果を得ています。 – Kdoinnt

+0

変更IDを小文字にする私の答えIDは​​大文字と小文字が区別され、データが広い意味を持つようになる場合は、多くのユーザーが削除を使用しないようにしてください – chiz

関連する問題