簡體   English   中英

SQL查詢將表單值插入MySQL表

[英]SQL query to insert form value into MySQL table

我正在嘗試創建一個php代碼,將一個郵政編碼插入到我的數據庫中,並將其與用戶選擇的城市和州相關聯,但我已經在這里工作了將近兩天而且我的智慧結束了。 任何幫助是極大的贊賞。

我有三張桌子:

|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查詢,該查詢使用來自郵政編碼輸入字段的數據以及用戶選擇的城市和州的名稱。 我似乎無法理解如何將城市和州的名稱與城市和國家ID配對,從一個查詢中從其他表中選擇它們...

再次,非常感謝任何幫助。 謝謝。

而不是為<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>

在您提交時,表單會將選定狀態的ID發布到該頁面。 因此,您無需再次編寫狀態名稱並再次獲取狀態ID。 你可以直接使用它。 在城市的情況下也是類似的

嘗試這個

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

將選擇的郵政編碼值直接放在select命令中,如果zipcode為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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM