0

5td-sの動的データを含むテーブルを取得しました。1つ目はID用、2つ目は日付用、3つ目は作成者の名前用、4つ目は一部のプロパティ用で、最後の1つには2つのボタンがあります。アプリケーションテーブルの$statusの値を変更してもらいたい。そのために、ボタンごとにmysql更新機能を追加した2つのphpファイルを作成しました。しかし、ボタンを押すと、$ statusの値が変更されないことを除いて、phpですべてが実行される理由がわかりません。どこが間違っているのか、どうすれば機能させることができるのか教えてください。前もって感謝します。

ボタンのhtmlコード(最後のtd):

<form action="status1.php">
<input type="submit" name="approve" value=" + ">
</form>
<form action="status2.php">
<input type="submit" name="refuse" value=" - ">
</form>

ボタンのPHPコード--status1.php(status2.phpは同じですが、$ statusの値が1ではなく2に変更されます)

<?php
    require_once('config.php');
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
    mysql_query('set names windows-1251', $link);
    if(!$link) {
        die('Failed to connect to server: ' . mysql_error());
    }
    $db = mysql_select_db(DB_DATABASE);
    if(!$db) {
        die("Unable to select database");
    }
    $id=$_GET['id'];
    $qry="UPDATE applications SET status=1 WHERE id='$id'";
    $result = mysql_query($qry);
        if($result) {
            header("location: applications.php");
            exit();
        }
        else {
            die("Query failed");
        }
?>
4

3 に答える 3

2

識別子として使用$_GET['id']していますが、コードで確認できる限り、送信ボタン自体以外にGET情報を実際に送信しているわけではありません。したがって、クエリは現在実際に行を更新していますWHERE id=''。そのため、エラーは発生しませんが、目的の結果も得られません。

フォームのアクションパラメータをに変更するか、フォーム内に次のstatus1.php?id=$idようなものを追加し<input type="hidden" name="id" value="$id"/>ます。

于 2012-09-14T15:52:10.627 に答える
1

さて、何かエラーが発生していますか?header("location: applications.php"); をコメントアウトします。行を変更して、何かがスローされるかどうかを確認します。また、クエリが正しいことを視覚的に確認できるように、echo $qry などを追加してみてください。

また、SQL インジェクションとそれを防ぐ方法についてもお読みください。このようにユーザー入力をクエリに直接貼り付けることは、不快感への扉を開く可能性があります。また、クエリを壊す可能性のあるアポストロフィのユーザー入力をチェックしていません。私は個人的にPDOを使用しています。これにより、PDOがはるかに簡単になり、少し安全になります。

もう 1 つの提案は、2 つの別々の送信 PHP ファイルを維持するのではなく、次のように 2 つの送信ボタンを配置することです。

<input type="submit" name="status" value=" + ">
<input type="submit" name="status" value=" - ">

次に、フォーム アクションを統合された php ファイルの名前に変更し、そのファイルで、ステータスの値を次のように評価します。

$status = 0;
if ($_GET["status" == " + ") $status = 1;

PDO をインストールする場合は、DB 更新の要点を次のように行います。

$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE, DB_USER, DB_PASSWORD);
$sql = $pdo->prepare("UPDATE applications SET status=? WHERE id=?");
$sql->execute(array($status, $_GET["id"]));

..これは、現在行っていることよりも少し安全です。

免責事項: 私はただの趣味の PHP プログラマーなので、私が言及したよりも良い方法があるかもしれません :)

于 2012-09-14T16:03:06.930 に答える
0

フォーム1のフォームタグの代わりにこれを使用します

<from method="get" action="status1.php">

<input type="hidden" name="id" value="1"/>

<input type="submit" name="approve" value=" + "/>

</form>

form2の場合

<from method="get" action="status2.php">

<input type="hidden" name="id" value="2"/>

<input type="submit" name="refuse" value=" - "/>

</form>
于 2012-09-14T15:55:27.830 に答える