0

前のページとは異なる値をキャプチャしたphpページがあります。印刷ボタンもあり、一意の番号を含むこれらすべてのフィールドを印刷します。ユーザーが印刷ボタンをクリックすると、レコードがデータベースに挿入され、印刷ウィンドウが画面に表示されます。しかし問題は、HTML ページに一意の番号があることです。たとえば、2 人が同時にログインすると、同じ一意の番号が取得され、両方が同じ一意の番号を持つ同じページを印刷できます。

この問題を制御するには、ユーザーを前のページにリダイレクトしようとしましたが、機能しません。

これが私のPHPページです。これは、ajaxを使用して呼び出しています

<?php
$conn = mysql_connect('localhost','','') or die ("");
mysql_select_db("") or die ("Database Problem");
$query = "select * from print where a = $a;
$result = mysql_query($query);
if(mysql_num_rows($result) == 0)
{
    $query = "INSERT INTO print () VALUES () 
    $result = mysql_query($query) or die();
    if(mysql_affected_rows()<>1)
    {
        header ("Location:mainpage.php?uniquenumber=xy");
    }
}
4

3 に答える 3

0

unisid http://php.net/manual/en/function.uniqid.php を使用して一意の ID を生成できます

于 2013-07-25T10:41:53.863 に答える
0

データベースに挿入する前に一意の番号を検証できます (印刷前も)。一意の番号が存在する場合は、「一意の番号は既に使用されています」というエラー メッセージをスローし、別の一意の番号を指定します (HTML ページを再度読み込むか、別の操作を行うことにより)。

于 2013-07-25T10:55:44.187 に答える
0

クライアント側で必要なこの一意の番号は何ですか? ユーザーがアクセスして編集できるようにすることは、重要な値である場合、ちょっと危険です。

印刷テーブルのさまざまなエントリを区別するためにこの番号だけが必要な場合は、このテーブルに auto_increment インデックスを使用してみませんか?

別の解決策は、セッション変数です。ユーザーが正常にログインすると、複数の変数 (ユーザー名、時間、ブラウザー) に基づいてこの一意の ID が生成されます。これにより、この ID の値が繰り返されなくなります。次に、変数を次のように保存します。

session_start();
$_SESSION['ID']=$unique_ID;

その後、次のように他の PHP スクリプトで読み取ることができます。

session_start();
$unique_ID=$_SESSION['ID'];
于 2013-07-25T10:47:19.577 に答える