-1

私がウェブサイトに実装しようとしている簡単なスクリプトで、最も訪問されたページを数え、上位10のリストを出力として表示します。まだアマチュアである(php / mysqlで)コードが実行されるときにフィールドに適切なデータが入力されない理由がわかりません。

コードは次のとおりです。

$pagename = $_SERVER['PHP_SELF']; 
$sql = "UPDATED visits SET hits=hits+1 WHERE pagename='$pagename' LIMIT 1"; 
$res = mysql_query($sql); 
if(!$res) { 

} 

エラー処理ではエラーは表示されませんが、テーブルは空のままです。私は何が欠けていますか?(私はmysqlのrootユーザーとしてセッションを開始することでこれを実行しようとしているので、すべての特権が存在し、フィールド:pagename、hitsを作成しました。)私は他のコードを使おうとしました:

*$sql = "CREATE TABLE 'yourDatabaseName'.'count' ('id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 'count' INT NOT NULL, 'page_id' INT NOT NULL) ENGINE = MyISAM;";
mysql_query($sql) or die('<p>Error, the count table was not created.</p>');
$query = "INSERT INTO count (page_id) VALUE ('$thePageID')";
mysql_query($query) or die('<p>Error, the Page ID was not entered into the table field.</p>');
$data = mysql_query("SELECT * FROM count WHERE page_id='$thePageID'")
or die(mysql_error('Could not find the page id in the count table.'));
while($info = mysql_fetch_array( $data ))
{
$count=$info['id'];
$count = $count + 1;
}
$querytwo = "UPDATE 'count' SET 'count' = '$count' WHERE 'page_id' ='$thePageID'";
mysql_query($querytwo) or die('Error, the count was not updated');*

そして、page_id / idフィールドは更新されますが、「カウント」フィールドは更新されません(この場合、エラー処理はエラーを返します)。これらの2つのスクリプトで基本的に同じ問題であるため、ここでは単純なものが欠落していると確信しています。

4

3 に答える 3

1

更新は、既存の行のみを更新します。更新でカウントを増やす前に、最初に指定されたページ名とカウントが0の行を追加する必要があります。

または、次のSQLを試してください。

$sql = "INSERT INTO visits (pagename, hits) VALUES ('$pagename', 0) ON DUPLICATE KEY UPDATE hits=hits+1";"

SQLクエリは「UPDATED」ではなく「UPDATE」と読み替える必要があることにも注意してください:)

于 2013-03-03T23:26:29.393 に答える
0

UPDATEの間違ったスペルの外では、もちろん2番目の例と同じではありません。

また、テーブル列のページ名に何が含まれているかにも関心があります。index.phpのようなものがあると思います。その場合、からファイルにアクセスすると、sub/index.phpに基づいてfalseが返され$_SERVER['PHP_SELF'];ます。だからエコーしてみてください/sub/index.phpWHERE CLAUSE

echo $_SERVER['PHP_SELF'];

結果を確認し、データベースの値、ディレクトリ、ファイル名が同じであることを確認します。そこに何があるのか​​わからないので、そこにもファイル拡張子があり、余分な文字はないと思います。

UPDATEの間違ったスペルを修正し、データベースにあるものが$_SERVER['PHP_SELF']のエコーから得られるものと一致することを確認した場合。最初のコードの方がうまくいくはずです。

于 2013-03-03T23:33:06.860 に答える
0

最初に考えたのは...これでしょうか:

$sql = "UPDATED visits SET hits=hits+1 WHERE pagename='$pagename' LIMIT 1"; 

なれ

$sql = 'UPDATE visits SET hits=hits+1 WHERE pagename=' . mysql_real_escape_string($pagename) . ' LIMIT 1';

失敗する理由は、UPDATE(D)ステートメントが原因です。クエリも変更して、$ pagenameを「挿入」できないようにしました。http://en.wikipedia.org/wiki/SQL_injectionを参照してください。

mysqlは最新バージョンのPHPで非推奨になっているため、mysqliの使用を検討することもできます。

于 2013-03-03T23:23:48.827 に答える