Я работаю над модулем, называемым менеджером графства. У меня проблемы с проверкой уже существующего уезда со своей страной в таблице mysql counties.
Таблица базы данных
Позволь мне объяснить
Добавить страницу В добавить страницу у меня есть 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" /> <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 значения, то есть страну и графство на странице редактирования, она все еще считает запись уже существующей в таблице. Мне нужно обработать этот аспект, чтобы он проверял уже существующую запись только в том случае, если обновлен один из них или оба значения поля формы.
Пожалуйста, помогите мне, как достичь логики, которая будет проверять уже существующую запись только в том случае, если одно из значений или обоих обновлено в форме.
в части редактирования:
попробуйте сравнить идентификатор отредактированной записи вместо сравнения старых / новых имен, например
$sql = "SELECT county_id FROM counties WHERE country='$country' AND county_name='$county_name' AND country_id !='$id' LIMIT 1";
Лично я бы добавил составной уникальный индекс для страны и county_name
ALTER TABLE `your_table_name` ADD UNIQUE ( `country` , `county_name` );