(下载,Php和Mysql)在Mysql中存储值

时间:2011-06-08 21:04:19

标签: php mysql

我想在MySQL数据库中存储城市名称而不是ID。用于构建城市列表的PHP函数是这样的:

public function getCity() {
    if(isset($this->attiva)) {
        $base = mysql_connect ('localhost', 'bolmdb', 'bolmdb');
        mysql_select_db ('bolmdb', $base);                                
        $result = mysql_query("SELECT * FROM city WHERE idstate=$_POST[idcity]");
        $city = '<option value="0">Select City...</option>';

        while($row = mysql_fetch_array($result)) {
            $city .= '<option value="' . $row['idcity'] . '">' . utf8_encode($row['nomecity']) . '</option>';
        }
        return $city;
    }
}

和表单HTML:

</label>City:</label>
<select id="city" name="city" value="" ><br />
<option>Select City...</option>
</select>

因此,在提交表单时,我会使用$city = $_POST['city']获取值;它作为ID存储在MySQL中。如何存储城市名称代替ID?

[编辑:]嗨!非常感谢您的回复。也许我没有很好地解释我。我的问题是我需要在选项值中保留$ row ['idcity']以使用ajax动态填充下拉列表。显然,我需要通过ID字段将State Mysql表与City Mysql表连接以获取数据。 状态表:

CREATE TABLE `state` (
  `idstate` int(4) NOT NULL auto_increment,
  `nomestate` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`idregione`)
) TYPE=MyISAM AUTO_INCREMENT=161 ;

-- 
-- Dump dei dati per la tabella `state`
-- 

INSERT INTO `state` VALUES (1, 'Marche');
...

CITY TABLE:

CREATE TABLE `city` (
  `idcity` int(4) NOT NULL auto_increment,
  `nomecity` varchar(20) NOT NULL default '',
  `idstate` int(4) NOT NULL default '0',
  `siglacity` char(2) NOT NULL default '',
  PRIMARY KEY  (`idprovincia`)
) TYPE=MyISAM AUTO_INCREMENT=109 ;

-- 
-- Dump dei dati per la tabella `city`
-- 

INSERT INTO `city` VALUES (1, 'Ancona', 1, 'AN');
...

和两个php功能:

public function getState()
 {
  if(isset($this->attiva))
  {
$base = mysql_connect ('localhost', 'bolmdb', 'bolmdb');
mysql_select_db ('bolmdb', $base);                                
    $result = mysql_query("SELECT * FROM state");
$state = '<option value="0">Select State...</option>';

while($row = mysql_fetch_array($result))
{
$state .= '<option value="' . $row['idstate'] . '">' . utf8_encode($row['nomestate']) . '</option>';
}           
return $state;
  }
 }

public function getCity()
 {
  if(isset($this->attiva))
  {
  $base = mysql_connect ('localhost', 'bolmdb', 'bolmdb');
mysql_select_db ('bolmdb', $base);                                
    $result = mysql_query("SELECT * FROM city WHERE idstate=$_POST[idstate]");
$city = '<option value="0">Select City...</option>';

while($row = mysql_fetch_array($result))
{
$city .= '<option value="' . $row['idcity'] . '">' . utf8_encode($row['nomecity']) . '</option>';
}           
return $city;
  }
 }

但是这样当我用$city = $_POST['city'];得到值时,我在数据库中存储了ID值。我想在CITY表中使用NOMESTATE更改IDSTATE,但我发现解决它并不是更好的方法,它也可能会创建非ASCII字符问题,@ Gerard会说这些问题。最后,我想知道是否有一种方法可以获得输出函数(在特定情况下为. utf8_encode($row['nomecity']) .)而不是选项值。

2 个答案:

答案 0 :(得分:0)

首先,您需要修改字段ID,将其更改为varchar。在数据库中用他的名字替换城市的id

答案 1 :(得分:0)

我不确定,我更愿意看到您的数据库表(不是数据库表字段,正如您向Chumillas所示),但也许您应该更改此片段

'<option value="' . $row['idcity'] . '">'

这一个

'<option value="' . utf8_encode($row['nomecity']) . '">'

在你的getCity()函数中。

这可能会在提交表单时使用

获取值
$city = $_POST['city'];

你得到城市的名称而不是ID。

编辑: 顺便说一下,由于城市名称可以包含非ASCII字符,我强烈建议您在表格中创建另一个字段,以存储城市的代表名称但不包含它们。例如,如果您创建名为“nickname”的VARCHAR字段,则应使用以下内容替换上述行:

'<option value="' . $row['nickname'] . '">'