【问题标题】:php mysql: select from database and populate formphp mysql:从数据库中选择并填充表单
【发布时间】:2016-04-23 06:08:42
【问题描述】:

我想从我的数据库中为客户填充地址。 我使用此代码从 db 中进行选择:

$stmt = $conn->prepare("SELECT * FROM peopleaddress WHERE peopleID=?");
    if ( !$stmt ) {die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );}
else if ( !$stmt->bind_param('i', $peopleID ) ) {die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );}
else if ( !$stmt->execute() ) { die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) ); }
else {
    $result = $stmt->get_result();

    while($row = $result->fetch_assoc()) {
        $addressID_array = array ($row['addressID']); 
        $addresstype_array = array ($row['addresstype']); 
        $addressactive_array = array ($row['active']);
        $street_array = array ($row['street']);
        $city_array = array ($row['city']);
        $town_array = array ($row['town']);
        $state_array = array ($row['state']);
        $zip_array = array ($row['zip']);
        $country_array = array ($row['country']);
        $latitude_array = array ($row['latitude']);
        $longitude_array = array ($row['longitude']);

    }   
} /* end else */

这个代码来显示表单:

 <?php      
              for ($i = 0; $i < count($addressID_array); $i++) {
                  echo '<input type="text" name="street[]" id="" placeholder="street" value="';
                            if (isset ($street_array[$i])){echo $street_array[$i];}  echo '" />';
                  echo '<input type="text" name="city[]" id="city" placeholder="city" value="';
                            if (isset ($city_array[$i])){echo $city_array[$i]; } echo '" />';
                  echo '<input type="text" name="zip[]" id="zip" placeholder="postalcode" value="';
                            if (isset ($zip_array[$i])){echo $zip_array[$i]; } echo '" />'; 
                  echo '<input type="text" name="town[]" id="town" placeholder="town" value="';
                            if (isset ($town_array[$i])){echo $town_array[$i]; } echo '" />'; 
                  echo '<input type="text" name="state[]" id="state" value="';
                            if (isset ($state_array[$i])){echo $state_array[$i];} echo '" />'; 
                  echo '<input type="text" name="country[]" id="country" value="';
                            if (isset ($country_array[$i])) {echo $country_array[$i];} echo '" />'; 
                  echo '<input type="text" name="addresstype[]" id="" value="';
                            if (isset ($addresstype_array[$i])) {echo $addresstype_array[$i];} echo '" />';                       
                  echo '<input type="text" name="addressactive[]" id="" value="';
                            if (isset ($addressactive_array[$i])) {echo $addressactive_array[$i];} echo '" />';                                           echo '<input type="text" name="latitude[]" id="latitude" READONLY value="';
                            if (isset ($latitude_array[$i])) {echo $latitude_array[$i];} echo '" />';  
                  echo '<input type="text" name="longitude[]" id="longitude" READONLY value="';
                            if (isset ($longitude_array[$i])) {echo $longitude_array[$i];} echo '" /> <br>'; 
              }
              ?>

问题: 1)它只显示一个地址,即使在db中同一个客户端有2个地址。

2) 我对此很陌生。我做得对还是有最快(更少代码)的选项可以做到这一点? 谢谢!!

【问题讨论】:

  • 在您的 while 循环中,每次迭代时,您都会为变量分配一个全新的数组,从而覆盖以前的值。

标签: php mysql populate


【解决方案1】:

这样做会覆盖数组中的值

$addressID_array = array ($row['addressID']); 

而不是

$addressID_array[] = $row['addressID']; 

更新: 此外,迭代您的数据是一个好主意,而不是创建一个数据数组然后再次读取该数组。使用这个:

else {
$result = $stmt->get_result();
}   
// Then in display
while($row = $result->fetch_assoc()) {
    echo '<input type="text" name="street[]" id="" placeholder="street" value="';
    if (isset ($row['street'])){echo $row['street'];}  echo '" />';
}

【讨论】:

  • 感谢 Marinus,我做到了,但现在表单中填充了:
    注意:数组到字符串的转换在...中,它指的是代码填充表单的行... !!
  • 显示代码在正文后面,之后$stmt关闭。如何在那里使用 while 循环?
【解决方案2】:

查看:https://en.wikipedia.org/wiki/SQL_injection

往下看“十六进制转换”部分。我在那里放了一个简短的函数来执行 SQL 命令。当您获取信息时,它将位于一个数组中。因此,如果您使用 $row 来获取信息,它将位于 $row[0][]、$row[1][] 等中。

上面的问题是 - 每次执行“array()”时都会创建一个新数组。所以它会抹去你之前在那里的东西。 :-)

【讨论】:

  • 谢谢马克。我仍然很难理解数组编码......任何时候有一个数组我都会惊慌失措:) !!!我希望我会习惯和他们一起工作! PS你是在暗示我的代码容易被注入吗?!!!!
【解决方案3】:

问题出在你的 while 循环中:

$addressID_array = array ($row['addressID']);

这会在每次 while 循环到变量时分配一个新数组。这些赋值行都应该改变

$addressID_array[] = $row['addressID'];

至于您的第二个问题:这不是真正可以回答的,因为我们不知道您需要解决的要求。

【讨论】:

  • 谢谢Shadow,我做到了,但现在表单中填充了:
    注意:数组到字符串的转换在....中,它指的是代码填充表单的行... !!
  • 我认为你在代码中留下了 array() 函数,就像在@marinus' 1st 版本中一样,这是不正确的。你能告诉我你到底尝试了什么吗?编辑:他现在已经更正了。
  • 是的,显示代码在正文后面,之后$stmt关闭。 &lt;?php for ($i = 0; $i &lt; count($addressID_array); $i++) { echo '&lt;input type="text" name="street[]" id="" placeholder="street" value="'; if (isset ($street_array[$i])){echo $street_array[$i];} echo '" /&gt;'; }
  • 这个? while($row = $resultaddress-&gt;fetch_assoc()) { $addressID_array[] = array ($row['addressID']); $addresstype_array[] = array ($row['addresstype']); ...
  • 我告诉你从代码中删除 array() 函数,请检查我的答案增益!
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 2017-01-18
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多