Я пытаюсь создать форму php, которая вставляет почтовый индекс в мою базу данных и связывает его с выбранным пользователем городом и штатом, но я был у него почти два дня и я нахожусь в конце. Любая помощь приветствуется.SQL-запрос для вставки значения формы в таблицу MySQL
У меня есть три таблицы:
|state |
|state_id INT | PK
|state VARCHAR(25)|
|city |
|city_id INT | PK
|city VARCHAR(45) |
|state_id INT | PK FK
|zip_code |
|zip_code_id INT |
|zip_code VARCHAR(10) |
|city_id INT | PK FK
|city_state_id INT| PK
У меня есть форма PHP, который имеет вход для почтового индекса и выберите ящики для города и государства (варианты города каскадны на основе выбора состояния):
<form action="address.php" method="post">
<h3>Add ZIP Code</h3>
Zip Code:<br />
<input type="text" name="zipCode" id="zipCode" value="" /><br /><br />
City:<br />
<select name="city" id="cityName">
</select>
<select name="state">
<?php foreach($rows as $row): ?>
<option value="<?php echo htmlentities($row['state'],ENT_QUOTES,'UTF-8');?>"><?php echo htmlentities($row['state'],ENT_QUOTES,'UTF-8');?>
</option>
<?php endforeach; ?>
</select>
<input type="submit" name="zipCode_submit" id="" value="Add Zip Code" />
</form>
А вот PHP для обработки формы:
if (!empty($_POST['zipCode_submit'])){
if(empty($_POST['zipCode'])){
die("Please enter a ZIP Code.");
}
if (empty($_POST['city']) || empty($_POST['state'])){
die("Please select a city and a state.");
}
//Check if zip code is already in database
$query = "SELECT 1 FROM zip_code WHERE zip_code = :zip_code";
$query_params = array(':zip_code' => $_POST['zipCode']);
$stmt = DB\query($query, $query_params, $db);
if($stmt){
die("This ZIP code is already entered.");
}
//Insert zip code into database
$query = "SOME Magical SQL query that I cannot seem to figure out...";
$query_params = array(':zipCode' => $_POST['zipCode'], ':city' => $_POST['city'], ':state' => $_POST['state']);
$stmt = DB\query($query, $query_params, $db);
}
Это немного кода я должен обрабатывать запрос:
function query($query, $query_params, $db){
try{
$stmt = $db->prepare($query);
$stmt->execute($query_params);
return ($stmt->rowCount() > 0) ? $stmt : false;
}catch(PDOException $ex){
//On production remove .getMessage().
die("Failed to run query: " . $ex->getMessage());
}
}
Насколько волшебный SQL запрос, который я не могу показаться, чтобы выяснить, я попробовал несколько различных запросов (я относительно новым для MySQL, так что я не пробовал что-то слишком продвинутое). Но это ближе всего, что я думаю, что я получил:
INSERT INTO zip_code (zip_code, city_city_id, city_state_state_id) SELECT zip_code, city_city_id, city_state_state_id
FROM zip_code
JOIN (city, state)
ON zip_code.city_city_id = city.city_id
AND zip_code.city_state_state_id = state.state_id
WHERE zip_code.zip_code = :zipCode
AND city.city = :city
AND state.state = :state
Опять же, я пытаюсь создать запрос INSERT, который использует данные из поля ввода почтового индекса наряду с именами города и укажите, что пользователь выбирает. Кажется, я не могу обернуть голову тем, как сопоставить имена города и штата с идентификатором города и штата внутри запроса, который выбирает их из других таблиц ...
Опять же, любая помощь очень много оценили. Спасибо.
При попытке запроса вы предложили , он успешно (без ошибок), но строки не вставлены. Что я делаю не так? – Michael
SELECT 8, city.city_id, state.state_id Из города, укажите, где city.state_id = state.state_id и city.city_id = '$ city'and state_id =' $ state_id 'запускают этот запрос и проверяют, будут ли какие-либо строки возвращаться или нет –
он возвратил нулевые строки ... – Michael