2

私は郡マネージャーと呼ばれるモジュールに取り組んでいます。郡のmysqlテーブルにある国で既存の郡をチェックする際に問題があります。

データベース テーブル 郡表

説明させてください

ページの追加 ページの追加では、2 つのフィールドがあります (スクリーンショットを確認してください) ページを追加

これは、郡をテーブルに保存するための私のコードです

$country = stripslashes($_POST["country"]);
$county_name = stripslashes($_POST["county_name"]);

// County Already Exist Check
$sql = "SELECT county_id FROM counties WHERE country='$country' AND county_name='$county_name' LIMIT 1";
$query = $mysql->query($sql);

if($mysql->rowCount($query) > 0)
{
    header("location:counties_add.php?type=warning&msg=" .urlencode("County With This Country Already Exist"));
    exit();
}

$sql = "INSERT INTO ". TABLE_COUNTIES ."";
$sql .= "(country, county_name, datecreated, datemodified) VALUES";
$sql .= "('$country', '$county_name', now(), now())";
$query = $mysql->query($sql);

$msg = "County Added Successfully";
header("location:counties_view.php?type=success&msg=" .urlencode($msg));
exit();

追加ページでは、レコードを挿入する前に (国とともに追加されている郡がテーブルに既に存在するかどうか) を正常にチェックします。

しかし、私の編集ページでは機能していません。または、それを確認する方法の背後にあるロジックを見つけることができないと言えます。

ページの編集

以下の私の編集ページをチェックしてください ページの編集

これはページを編集するためのコードです

<!-- Form Starts -->
<form id="myform" name="myform" method="post" action="counties_edit_process.php" accept-charset="utf-8">

<!-- Widget Starts -->
<div class="widget">
    <div class="title js_opened">
        <div class="icon"><img src="themes/<?php echo ADMIN_PANEL_THEME; ?>/images/icons/navigation/counties<?php echo $retina_suffix; ?>.png" width="24" height="24" alt="" /></div>
        <span>Fill The Fields Marked With *</span>
    </div>
    <div class="content">
        <div class="form_row first">
            <label>Country</label>
            <div class="form_right">
                <select name="country">
                    <option value="">Please Choose An Option</option>
                    <option value="England" <?php if ($dbData["country"]=="England") echo "selected=\"selected\""; ?> >England</option>
                    <option value="Scotland" <?php if ($dbData["country"]=="Scotland") echo "selected=\"selected\""; ?> >Scotland</option>
                    <option value="Wales" <?php if ($dbData["country"]=="Wales") echo "selected=\"selected\""; ?> >Wales</option>
                </select>
            </div>
            <div class="clear"></div>
        </div>
        <div class="form_row last">
            <label>Country Name</label>
            <div class="form_right"><input type="text" name="county_name" maxlength="25" value="<?php echo $dbData["county_name"]; ?>" /></div>
            <div class="clear"></div>
        </div>
    </div>
</div>
<!-- Widget Ends -->

<div class="form_buttons">
    <input type="submit" name="submit" value="Update" />&nbsp;&nbsp;<a href="counties_view.php">Back To View</a>
    <input type="hidden" name="country_existing" value="<?php echo $dbData["country"]; ?>" />
    <input type="hidden" name="county_name_existing" value="<?php echo $dbData["county_name"]; ?>" />
    <?php $form->passValuesToNextPage("GET"); ?>
</div>
</form>
<!-- Form Ends -->

これは、編集ページでレコードを保存/更新するための私のコードです

$id = stripslashes($_POST["id"]);

// For Already Exist Checks
$country = stripslashes($_POST["country"]);
$country_existing = stripslashes($_POST["country_existing"]);
$county_name = stripslashes($_POST["county_name"];
$county_name_existing = stripslashes($_POST["county_name_existing"]);

// County Already Exist Check

    <--- Issue is here in the sql to check for already exist. Please read the end of the post to understand my question  --->

$sql = "SELECT county_id FROM ". TABLE_COUNTIES ." WHERE (county_name='$county_name' AND county_name!='$county_name_existing') AND (country='$country' AND country!='$country_existing') LIMIT 1";
$query = $mysql->query($sql);

if($mysql->rowCount($query) > 0)
{
    header("location:counties_edit.php?id=$id&case=edit&type=warning&msg=" .urlencode("County With This Country Already Exist"));
    exit();
}

$sql = "UPDATE ". TABLE_COUNTIES ." SET";
$sql .= " country='". $country ."',";
$sql .= " county_name='". $county_name ."',";
$sql .= " datemodified=now()";
$sql .= " WHERE county_id=$id";
$query = $mysql->query($sql);

header("location:counties_view.php?type=success&msg=" .urlencode("County Updated Successfully"));
exit();

レコードを編集/更新する場合に既存のレコードをチェックするSQLロジックをコーディングできませんが、古い国名を含むフォームで2つの隠し変数を渡すことで何かを試しました(上記の編集ページコードをチェックしてください)。および郡名を確認して、SQLでそれらを比較して、レコードが既に存在するかどうかを確認できるようにします

ここでも同じページ追加ロジックを使用できます。

$sql = "SELECT county_id FROM counties WHERE country='$country' AND county_name='$county_name' LIMIT 1";

しかし問題は、編集ページで2つの値、つまり国と郡を更新しない場合でも、レコードがテーブルに既に存在すると見なされることです。フォームフィールド値の一方または両方が更新された場合にのみ、既存のレコードをチェックする必要があるという側面を処理する必要があります。

値の一方または両方がフォームで更新された場合にのみ、既存のレコードをチェックするロジックを実現する方法を教えてください。

4

2 に答える 2

1

編集部分:
古い/新しい名前を比較する代わりに、編集されたレコードの ID を比較してみてください。

$sql = "SELECT county_id FROM counties WHERE country='$country' AND county_name='$county_name' AND country_id !='$id' LIMIT 1";
于 2012-11-24T08:01:45.513 に答える
1

個人的には、国と郡名に複合一意インデックスを追加します

ALTER TABLE `your_table_name` ADD UNIQUE (
`country` ,
`county_name`
);
于 2012-11-24T08:10:51.910 に答える