-1

ユーザーがクリックしたリンク (2 つのうちの 1 つ) に応じて、php Web サイトで mysql データベースを更新しようとしていますが、データベース内の両方のリンクを取得するか、同じリンクを取得します。クリックされたリンクを区別しようとしているので、if ステートメントを使用しています。

$_GET['state']$_REQUEST['state']、コードの再配置、または 1 つの else if ステートメントの代わりに 2 つの if ステートメントを使用しようとしましたが、それでも役に立ちません。(curr_statは私のテーブルです)、ここに私のコードがあります:

<?php
//if links are clicked, will write to database the status

$connect_error= 'Sorry, we are experiencing connection problems.';
$db_name = "database name";
$connection = @mysql_connect("some host", "some username","password") or die($connect_error);
$db3 = @mysql_select_db($db_name,$connection) or die($connect_error);

//if statement

$unlock = '<a href="doorlock.php?state=1">UNLOCK &nbsp;</a>&nbsp;';
echo $unlock;

$lock = '<a href="doorlock.php?state=0">LOCK</a>';
echo $lock;

if ($_GET['state'] == 1){
    $one = 1;
    mysql_query("INSERT INTO curr_stat(status) VALUES($one)");
}
elseif ($_GET['state'] == 0){
    $zero = 0;
    mysql_query("INSERT INTO curr_stat(status) VALUES($zero)");
}
?>
4

3 に答える 3

0

if ステートメントに問題が 1 つあります。

get 変数stateが定義されていない場合、条件($_GET['state'] == 0)は true を返します。

そのため、パラメータを指定せずにサイトを開くと、ステータス 0 の新しい行が挿入されます。

これが、0 と 1 の両方、または 0 の 2 倍を取得する理由です。

代わりに、ゼロに等しくない値をテストする必要があります。

$unlock = '<a href="doorlock.php?state=1">UNLOCK &nbsp;</a>&nbsp;';
echo $unlock;

$lock = '<a href="doorlock.php?state=-1">LOCK</a>';
echo $lock;

if ($_GET['state'] == 1){
    $one = 1;
    mysql_query("INSERT INTO curr_stat(status) VALUES($one)");
}
elseif ($_GET['state'] == -1){
    $zero = 0;
    mysql_query("INSERT INTO curr_stat(status) VALUES($zero)");
}
?>
于 2013-04-22T00:34:45.073 に答える
0

<td> <?PHP echo "<a href='action.php?kisi=$id' onclick='return hs.htmlExpand(this, { objectType: &#39;iframe&#39; } )'>$ad $soyad</a>";?></td>

リンクをクリックすると、別のユーザーはクリックできません (データベースは変更できません)

于 2013-11-06T16:19:55.500 に答える