5

こんにちは、php と html の重複挿入を回避/停止する方法を知っている人はいますか? 更新するたびに、同じデータが繰り返されますが、これは私が望んでいるものではありません。ここから何か変えられることはありますか?UNIQUE INDEX を追加することで回避・停止できると聞きました。うまくいくかもしれませんが、間違って配置するとうまくいきません。何か助けはありますか?前もって感謝します!!!本当に感謝します!

<?php
session_start();
include("Validation.php");

$connect=mysqli_connect("localhost","root","","jailbird");
if(mysqli_error($connect))
{
die("Could not connect.");
}

if(isset($_POST["insert_click"]))
{
//Bookingid is auto increment, therefore no need
//$Bookingid=$_POST["BookingID"];
$Prisonerid=$_SESSION['Prisonerid'];
$Visiting_method=$_POST["VisitingMethod"];
$Visiting_location=$_POST["VisitingLocation"];
$Date=$_POST["Date"];
$Time=$_POST["Time"];

$query=$connect->prepare("insert into Booking(PrisonerID, VisitingMethod, VisitingLocation, Date, Time) values (?,?,?,?,?)");
$query->bind_param('sssss', $Prisonerid, $Visiting_method, $Visiting_location, $Date, $Time);
$query->execute();
}

$query=$connect->prepare("select * from booking WHERE Prisonerid=?");
$query->bind_param('s',$_SESSION['Prisonerid']);
$query->execute();
$query->bind_result($Bookingid, $Prisonerid, $Visiting_method, $Visiting_location, $Date, $Time);

while($query->fetch())
{
echo "<tr>";
//echo "<td width=60>".$Bookingid."</td>";
echo "<td>$Prisonerid</td>";
echo "<td>$Visiting_method</td>";
echo "<td>$Visiting_location</td>";
echo "<td>$Date</td>";
echo "<td>$Time</td>";
echo "</tr>";
}   
?>
4

3 に答える 3

0

重複が許可されないように、PrisonerID を MySql テーブルの主キーにすることができます。

于 2013-07-27T12:44:35.760 に答える
0

既に述べたように、2 つの値を持つことができないことがわかっているテーブルのフィールドに UNIQUE 制約を追加する必要があります。あなたが言うとき、maybe it worksそれはあなたが本当にその方法を試していないことを意味します. また、それをどのように試したのか、何が問題だったのかについて詳しく教えていただけない限り、私たちはお手伝いできません.

UNIQUE 制約が機能するには、テーブル内のどのフィールドが各行を一意に表すかを選択する必要があります。たとえば、 がPrisonerId各行を一意に表すとします。UNIQUE次に、テーブルを作成するときに、次のように制約を PrisonerId フィールドに追加する必要があります。

CREATE TABLE `Booking` (
  `PrisonerId` int(10) NOT NULL,
  `VisitingMethod` varchar(100) NOT NULL,
  # Put other fields here #
  UNIQUE KEY `uc_PrisonerId` (`PrisonerId`)
) ENGINE=InnoDB;

テーブルを作成するときにそのクエリを実行するか、ALTERテーブルに新しい制約を追加するか、phpMyAdmin/MySQL Workbench またはその他の任意の方法を使用して、新しいレコードを挿入すると、MySQL は新しい制約を尊重することを確認します。

また、重複行を挿入するIGNOREことはできませんが、クエリでキーワードを使用する場合はエラー メッセージを黙らせることができます。挿入ドキュメントを参照

もう 1 つの方法は、費用がかかりますが、新しいレコードがまだデータベースにないかどうかを確認することです。ある場合は挿入しないでください。そうでない場合は挿入してください。

最後に、フォーム送信後にフォームハンドラー (フォームの URL action) からリダイレクトすることを検討してください。こちらをご覧ください

于 2013-07-27T12:45:15.860 に答える