2013-03-15 95 views
1

我創建了一個將數據提交到多個表的表單。我的字段是名字,姓氏,電子郵件,城市/地區/國家,它們全部插入3個不同的表格(用戶,電子郵件,位置)。從表中選擇多個數據並使用PHP表單插入到另一個表中

數據進入用戶和電子郵件很好,但我很困惑如何處理位置。

我有3個單獨的表位置(城市,地區,國家)。我想要做的是將CityID,RegionID和CountryID插入到位置表中。我有城市/地區/國家字段設置以便自動完成基於城市是這樣的:

http://i.stack.imgur.com/CYvJG.png

我的城市表擁有所有必要的信息(CityID,RegionID,CountryID)。我如何從Cities表中提取數據並將其插入到Location表中?

這是我的代碼的一部分。我對PHP和MySQL非常陌生,所以我對這種不合理的情況表示歉意。代碼的第一部分起作用,但第二部分不起作用(將數據插入到位置表中)。

//Insert static values into people table 
$sql_user = sprintf("INSERT INTO User (FirstName, LastName,) VALUES ('%s','%s')", 
        mysql_real_escape_string($_POST['FirstName']), 
        mysql_real_escape_string($_POST['LastName']), 
$result_user = $db->query($sql_user); 

//get last inserted userid 
    $inserted_user_id = $db->last_insert_id(); 

//Insert values into location table 
$sql_city = sprintf("INSERT INTO Location (UserID, CityID, RegionID, CountryID) 
VALUES ('$inserted_user_id',(SELECT CityID, RegionID, CountryID, FROM Cities))"); 
$result_city = $db->query($sql_city); 

我想也許我需要在FROM城市之後有「WHERE ...」,但我不知道我的病情會是什麼。

回答

0

這種情況取決於您。如果您從輸入框中獲取值,則看起來您需要找出從輸入字段中讀取位置的最佳方法。以它爲你可能希望先打破輸入到一個數組:

$location = explode(',',$_POST['location']) 
$city = $location[0]; 
$region = $location[1]; 
$country = $location[2]; 

現在,在您的查詢 -

"...WHERE city_name = '{$city}' AND region_name = '{$region_name}' AND country_name = '{$country}'"; 

*編輯

更詳細的,你需要設置通過使用SQL連接來獲取位置的單獨查詢。您的連接與WHERE約束結合應該會返回您正在查找的城市。所以在這裏:

"SELECT Cities.CityID,Cities.RegionID,Cities.CountryID FROM Cities JOIN (Regions,Countries) ON Cities.RegionID = Regions.RegionID AND Cities.CountryID = Countries.CountryID WHERE Cities.CityName = '{city}' AND Regions.RegionName = '{$region}' AND Countries.CountryName = '{$country}' LIMIT 1" 

**更新

這是非常基本的東西,你可以通過查看關於MySQL PHP手冊得到。 http://php.net/manual/en/function.mysql-query.php

既然你是新人,我會給你一個通行證。

後您運行此查詢:

$location_result = mysql_query("SELECT Cities.CityID,Cities.RegionID,Cities.CountryID FROM Cities JOIN (Regions,Countries) ON Cities.RegionID = Regions.RegionID AND Cities.CountryID = Countries.CountryID WHERE Cities.CityName = '{$city}' AND Regions.RegionName = '{$region}' AND Countries.CountryName = '{$country}' LIMIT 1"); 

您需要訪問的結果。所以:

while ($row = mysql_fetch_assoc($location_result)) { 
    $cityID = $location_result['CityID']; 
    //etc... for each associative column 
} 

,然後在插入查詢,插入用於CityID列等的$ cityID變量...

+0

感謝您的答覆,凱文。儘管我的一個擔憂是 - 我的城市表沒有地區名稱或國家/地區名稱。它只包含區域ID和國家/地區ID,並且我不能僅僅滿足條件WHERE city_name ='{$ city},因爲有幾個同名的城市。你知道我該如何解決這個問題嗎? – 2013-03-15 16:53:17

+0

每個位置表中的列是什麼?城市表格列,地區列等... – kevin 2013-03-15 17:27:19

+0

城市表格:CityID,CountryID,RegionID,CityName。區域表:RegionID,CountryID,RegionName。國家/地區表格:CountryID,CountryName。我嘗試了你的解決方案,除了我省略了關於地區和國家的數據(只抓取CityID),並且它適用於沒有重複的城市。一旦有同名的城市,我會遇到錯誤。 – 2013-03-15 17:32:34

相關問題