0

これは、ユーザーを削除するための私のコード全体です:

 <?php
  $page_title = 'Delete a User';
  include ('includes/header.html');
   echo '<h1>Delete a User</h1>';

   if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // From view_users.php
     $id = $_GET['id'];
     } elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // sbmsn
 $id = $_POST['id'];
     } else { // No valid ID, kill the script.
echo '<p class="error">This page has been accessed in error.</p>';
include ('includes/footer.html'); 
exit();

    }

  require_once ('../connect.php');

  if($_SERVER['REQUEST_METHOD'] == 'POST') {
if($_POST['sure'] == 'Yes') {
    $q="DELETE FROM user WHERE user_id= $id ";
    $r= @mysqli_query ($dbc, $q);
    if(mysqli_affected_rows($dbc) == 1) {
        echo '<p>The user has been deleted</p>';
    }
    else {
        echo '<p class="error">Sorry! the user could not be deleted.</p>';
        echo '<p>' . mysqli_error($dbc) . '<br/>Query: '.$q. '</p>';
    }
}
else {
    echo '<p>The user has not been deleted.</p>';
}
   }
    else {
$q="SELECT first_name FROM user WHERE user_id=$id";
$r= @mysqli_query($dbc,$q);

if(mysqli_num_rows($r) == 1) {
    $row = mysqli_fetch_array($r,MYSQLI_NUM);

    echo "<h3>Name: $row[0]</h3> Are you sure you want to delete this user?";
    echo '<form action="delete_user.php" method="post">
      <p> <input type="radio" name="sure" value="Yes" />Yes</p>
      <p> <input type="radio" name="sure" value="No" checked="checked" />No</p>
       <input type="submit" name="submit" value="submit" />
      <input type="hidden" name="id" value=" '.$id.' "/>

    </form>';
}
else {
    echo '<p class="error">ERROR Sorry!</p>';
}
  }

   mysqli_close($dbc);

  include ('includes/footer.html');
 ?>

しかし、エラーが発生するたびに

This page has been accessed in error

スタッフは、$idユーザーの情報を編集するために、同じ種類のスクリプトに取り組んでいます。

4

3 に答える 3

0

この問題は SQL とは関係ありません。問題は次のコード内にあります。

if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // From view_users.php
    $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // sbmsn
    $id = $_POST['id'];
} else { // No valid ID, kill the script.
    echo '<p class="error">This page has been accessed in error.</p>';
    include ('includes/footer.html'); 
    exit();
}

したがって、これは次のことが当てはまることを意味します。

  1. $_GET['id']数値ではないか、設定されていません
  2. $_POST['id']数値ではないか、設定されていません

このページに何が送信されているかを確認します。

デバッグするには、最初print_r($_GET); print_r($_POST);にページの上部に挿入し、出力を確認します。$_GET$_POSTが空の場合、このページには何も送信されていません。値がある場合、おそらく数値ではありません。以降、必要に応じて修正してください。

于 2013-02-28T21:06:53.523 に答える
0
<?php

//Access From view_users.php?id=1;
//Access via form input with name "id" submitted via get or post methods
//You might want to do an integer casting (int)$_REQUEST['id']; //Not very necessary

  $page_title = 'Delete a User';
  include ('includes/header.html');
   echo '<h1>Delete a User</h1>';

   if ( (isset($_REQUEST['id'])) && (is_numeric(trim($_REQUEST['id']))) ) { // From view_users.php
     $id = mysqli_real_escape_string($dbc, trim($_REQUEST['id'])); //Be paranoid about security
     } else { // No valid ID, kill the script.
echo '<p class="error">This page has been accessed in error.</p>';
include ('includes/footer.html'); 
exit();

    }
于 2013-02-28T21:49:24.293 に答える
-1

問題はis_numeric($ _ GET ['id'])またはis_numeric($ _ POST ['id'])だと思います。文字列を投稿すると、その文字列が数値ではなく文字列として検出されます。

于 2013-02-28T21:05:31.417 に答える