使用来自3个表的查询填充表单字段


Populating form fields with query from 3 tables

我有一个包含字段idusernameuser_sexuser_city的表users。在列user_sexuser_city中,我保存int值1 ... n

还有另外两个表user_sex,表中有字段user_idmalefemale,表cities字段city_idcity_name

现在,我希望当用户打开他的配置文件时能够编辑它,但我不能填充字段。字段是sex字段的单选按钮,是城市的下拉按钮。

<div class="form-group">
    <div class="col-md-6"> 
        <label class="radio-inline" for="radios-0">
            <input type="radio" name="user_sex" id="radios-0" value="1">
            Male
        </label> 
        <label class="radio-inline" for="radios-1">
            <input type="radio" name="user_sex" id="radios-1" value="2">
            Female
        </label> 
    </div>
</div>
<div class="form-group">
      <label class="col-md-4 control-label" for="selectbasic">City</label>
      <div class="col-md-4">
         <select id="selectbasic" name="selectbasic" class="form-control">
             <option value="">Choose your city</option>
         </select>
      </div>
</div>

我希望从用户表中填充这些字段。

这是我上面解释的SQL Fiddle。

注意:由于某些原因,当我在phpmyadmin中执行该查询时,该查询不会返回任何内容

更新:

$result = $pdo->prepare("
                        SELECT *, userSex.*, city.* 
                        FROM users usr
                        JOIN user_sex userSex ON usr.user_sex = userSex.user_id
                        JOIN cities city ON usr.user_city = city.city_id
                        WHERE id =?
                        LIMIT 1");

 $result -> bindParam(1, $id, PDO::PARAM_INT);
 $result -> execute();
 foreach ( $result as $row )                
 {
  echo '<legend><strong><i>'.$row['username'].'</i></strong></legend>
   <div class="form-group">
    <div class="col-md-6"> 
        <label class="radio-inline" for="radios-0">
            <input type="radio" name="user_sex" id="radios-0" value="1">
            Male
        </label> 
        <label class="radio-inline" for="radios-1">
            <input type="radio" name="user_sex" id="radios-1" value="2">
            Female
        </label> 
    </div>
  </div>
  <div class="form-group">
      <label class="col-md-4 control-label" for="selectbasic">City</label>
      <div class="col-md-4">
         <select id="selectbasic" name="selectbasic" class="form-control">
             <option value="">Choose your city</option>
         </select>
      </div>
  </div>';
 }

到目前为止。这是一张空白页。正如我所说,我不知道如何填写表格。

如果我做一个简单的查询,比如:SELECT * FROM users WHERE id = 1,我就得到了正确的$row['username']。所以我认为问题出在查询上。

Query没有返回,因为您正在将usr.user_sex加入到用户id中。在下面找到工作的:

SELECT usr.*, userSex.*, city.*
   FROM users usr
JOIN user_sex userSex
    ON usr.id = userSex.user_id
JOIN cities city
    ON usr.user_city = city.city_id
WHERE id = 1

要检查单选按钮,可以使用"checked"属性。一个简单的检查性别是否等于1或2应该做。

因此:

$sex = $row['user_sex'];
$maleChecked = ($sex == 1) ? "checked" : "";
$femaleChecked = ($sex == 2) ? "checked" : "";
<radio name="sex" value="1" $maleChecked >
<radio name="sex" value="2" $femaleChecked >

您的查询返回布尔值false请参阅:PHP PDO获取返回false

所以不是

$result -> bindParam(1, $id, PDO::PARAM_INT);

请使用以下代码:

 $id = 1;
 $result -> bindParam(intval($id), $id, PDO::PARAM_INT);

然后你可以玩你的结果,比如fetch data$result->fetch();etc