2013-04-19 2 views
0

Я пытаюсь создать форму 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, который использует данные из поля ввода почтового индекса наряду с именами города и укажите, что пользователь выбирает. Кажется, я не могу обернуть голову тем, как сопоставить имена города и штата с идентификатором города и штата внутри запроса, который выбирает их из других таблиц ...

Опять же, любая помощь очень много оценили. Спасибо.

ответ

1

Вместо того чтобы указывать имя для <option value="">, укажите state_id. Тогда это будет сделано.

<select name="state"> 
    <?php foreach($rows as $row): ?> 
     <option value="<?php echo $row['state_id']; ?>"><?php echo htmlentities($row['state'],ENT_QUOTES,'UTF-8');?> 
     </option> 
    <?php endforeach; ?> 
</select> 

Пока вы отправляете, форма отправляет идентификатор выбранного состояния на эту страницу. Поэтому вам не нужно составлять имя состояния и снова получать идентификатор состояния. Вы можете использовать его напрямую. Это похоже в случае городов также

1

Попробуйте это

$city=$_POST["CITY_ID"]; 
$state_id=$_POST["STATE_ID"] 

Put выбрать значения почтового индекса непосредственно выберите команду, как если почтовый индекс 8, то

INSERT INTO zip_code (zip_code, city_city_id, city_state_state_id) 
(SELECT 8,city.city_id,state.state_id FROM city,state where city.state_id=state.state_id and city.city_id='$city'and state_id='$state_id') 
+0

При попытке запроса вы предложили , он успешно (без ошибок), но строки не вставлены. Что я делаю не так? – Michael

+0

SELECT 8, city.city_id, state.state_id Из города, укажите, где city.state_id = state.state_id и city.city_id = '$ city'and state_id =' $ state_id 'запускают этот запрос и проверяют, будут ли какие-либо строки возвращаться или нет –

+0

он возвратил нулевые строки ... – Michael

 Смежные вопросы

  • Нет связанных вопросов^_^