ホームページ >バックエンド開発 >PHPチュートリアル >アップデートステートメントについて教えてください、そして質問の数を増やしてください!

アップデートステートメントについて教えてください、そして質問の数を増やしてください!

WBOY
WBOYオリジナル
2016-06-23 13:24:291067ブラウズ

select * from user where names='test';: ??sql ステートメント
update user SET num=$nums where names = '$test';: ??sql 増加回数ステートメント
114: ??$nums in theデータベースの保存回数+1
113: ??$row['num'] データベースの保存回数
1: ??$row['id'] ユーザーテーブルのID
test: ? ?$row['names' ]データベース内のテストデータ

これは、names 値のアクセスクリック数です。不思議なのは、リンクをクリックすると回数が2回ずつ増えますが、リンクを開いて新しいウィンドウで実行すると1回しか増えず、更新も1回増えます

とは。その理由は何ですか?どこが間違いなのでしょうか?クエリ更新文とテーブル作成の内容は以下のとおりです。

$test = $_GET['names'];
$sql = "select * from user where names='$test'";
$result = mysql_query($sql);
$row = mysql_fetch_array($ result); ;
$nums = $row['num']+1;
mysql_query("update user SET num=$nums where names = '$test'"); または: mysql_query("update user SET num=$num+ 1 where names = '$test'");

CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`names` varchar(15) NOT NULL DEFAULT '',
` num` tinyint(1) unsigned NOT NULL DEFAULT '0',
主キー (`id`),
一意のキー `names` (`names`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1;
INSERT; INTO `user` (`id`, `names`, `num`) VALUES
(1, 'test', 0)

現在のページ - href ="?names=test"
レコードを 1 つだけ追加するには、ページのリンクを 2 回クリックして新しいウィンドウを開き、現在のページを更新します。とても奇妙なことですが、私は何を間違えたのでしょうか?


ディスカッションへの返信 (解決策)

$row = mysql_fetch_array($result)

$nums = $row['num']+1; l_query("ユーザーSETを更新num=$nums where names = '$test'");
または: mysql_query("update user SET num=$num+1 where names = '$test'");

$nums = $row['num' ]+1; すでに 1 が追加されていますが、次の 1 を追加する必要があるのはなぜですか? [SET num=$num+1]


また、渡された値で判断してませんか?

また、渡された値で判断していませんか?

$test = $_GET['names'];

これは単純な書き方です。
$nums = $row['num']+1; これは、アクセスしたい場合にデータベースに追加されるだけです。一度
さらに
mysql_query ("update user SET num=$num+1 where names = '$test'");
これはタイプミスのはずです、num=num+1 です
この投稿のコードをテストしました通常の状況では問題ありません。ページ自体にリンクを置くか、外部リンクをクリックしてこれを入力しますか? namestest... この場合、num フィールドは 1 ずつ増加し続けます。つまり 2 回増加します。ただし、このリンクをクリックして新しいウィンドウで開くか、現在のページを更新すると、num フィールドは 2 回増加します。通常1倍に増加します!
理由がわかりません。また、この PHP COOKIE について質問させてください。
if (!isset($_COOKIE['visits'])) $_COOKIE['visits'] = 0;
$visits = $_COOKIE[' Visits'] + 1;
setcookie('visits', $visits, time() + 60);
このようなコードは gbk ファイルに配置すると正常に実行できますが、UTF-8 では実行できません。


への対処方法

あなたの説明からすると奇妙に思えますが、次のようにデバッグできます。
$test = $_GET['names'];
$sql = "select * from user where names='$test'";
$result = mysql_query($sql); ($result);
file_put_contents('sos.txt', $row['num'].PHP_EOL,FILE_APPEND );
$nums = $row['num']+1; $nums.PHP_EOL,FILE_APPEND );
mysql_query("update user SET num=$nums where names = '$test'");
file_put_contents('sos.txt', 'update'.PHP_EOL,FILE_APPEND); ;

実行後、sos.txt を見て 3 つの文があるかどうかを確認します。6 つの文がある場合は、2 回実行されたことを意味します。


あなたの説明からすると奇妙に思えますが、次のようにデバッグできます。

^^。

73
74

更新
74
75
更新
75
76
更新
76
77
更新
これは、クリックして訪問した後、連続 2 回クリックしてしまいました。
以下のコンテンツは私のものです
73
74
アップデート
74
75
アップデート
75
76
アップデート
76
77
アップデート
77
78
アップデート
78
79
更新
新しいウィンドウを開いて実行してください. 現在のページを更新します

そして、さらにとんでもないものを発見しました!
普段はFirefoxブラウザを使ってテストしてみたのですが、今日はたまにIEを使ってテストしてみました。 IE8 では、新しいウィンドウを作成したり、更新したり、現在のリンクをクリックしたりしても、ウィンドウは 1 回しか追加されません。これはごく普通のことです。次に、Firefox で再度更新すると、新しいウィンドウが表示され、現在のリンクが表示されます。奇妙なことが起こりますが、すべて正常です。 その後、翌日IEや携帯電話のブラウザで最初にアクセスすると正常になり、次の日最初にFirefoxでアクセスするとまた増えます!

わかりません!ローカルとサーバーの両方でテストされました。これで完了です。どこで間違った動きをしたのでしょうか?

あなたは現象を説明しただけで、テストコードを与えていません。
何とも言えませんが、コード (HTML 部分) に何か問題がある可能性があります

php に問題がないことは確認できます。複数回呼び出されているかどうかを確認してください。
firebug ネットワークのリクエストを見てください


そこで呼び出された回数を確認して、php に問題がないことを確認してください。

firebug networkからのリクエストを見てください

firebug、この機能は本当に期待していませんでした、忘れていましたが、最近は普通です...
先に投稿を終了します、皆さんありがとう!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP CURL クッキー次の記事:PHP CURL クッキー