循环变量并分配值


Loop through variables and allocate values

我有一个20行10列的表单,元素ID由_r1、_r2等区分。我希望通过循环遍历它们,而不是手动分配查询中的所有值。

类似的东西

//Set all mileage fields to empty
for ($i = 1; $i <= 20; $i++) {
    $strTravelDate_r.$i = "";
    $strHBE_r.$i = "";
    $strPassenger_r.$i = "";
    $strCongestionCode_r.$i = "";
    $strTravelReason_r.$i = "";
    $strAddress1_r.$i = "";
    $strAddress2_r.$i = "";
    $strDistance_r.$i = "";
    $strRate_r.$i = "";
    $strLineAmount_r.$i = "";
}
//Get mileage claims
$sql_miles = 'SELECT * FROM `tblsaved_mileage` WHERE `strUsername`="'.addslashes($username).'"';
$rs_miles = mysql_query($sql_miles);
$count_miles = mysql_num_rows($rs_miles);
$i = 1;
if ($count_miles > 0) {
    while ($row_miles = mysql_fetch_array($rs_miles)) {
        $strTravelDate_r.$i = $row_miles['strTravelDate'];
        $strHBE_r.$i = $row_miles['strHBE'];
        $strPassenger_r.$i = $row_miles['strPassenger'];
        $strCongestionCode_r.$i = $row_miles['strCongestionCode'];
        $strTravelReason_r.$i = $row_miles['strTravelReason'];
        $strAddress1_r.$i = $row_miles['strAddress1'];
        $strAddress2_r.$i = $row_miles['strAddress2'];
        $strDistance_r.$i = $row_miles['strDistance'];
        $strRate_r.$i = $row_miles['strRate'];
        $strLineAmount_r.$i = $row_miles['strAmount'];
        $i = $i + 1;
    }
}

但我有很多

Notice: Undefined variable: strTravelDate_r in ........
Notice: Undefined variable: strHBE_r in ........
Notice: Undefined variable: strPassenger_r in ........

使用数组,而不是变量:

$results = array();
while ($row_miles = mysql_fetch_assoc($rs_miles)) {
    $results[] = $row_miles;
}

例如,现在可以访问$results[$i]['strTravelDate']

您的方法完全错误,从MySQL库的选择(目前已过时的扩展)到分配变量的方式。您将数组用于此目的。此外,如果您使用PDO,那么您创建的所有混乱都会变成这样(假设您使用PHP的PDO类创建了$PDO对象):

$stmt = $pdo->prepare("SELECT * FROM `tblsaved_mileage` WHERE `strUsername` = ?");
$stmt->execute(array($username));
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); // And now you have all of your data in $results array

不需要初始化N个变量,不需要使用过时的mysql_*扩展,不需要在您获得的记录集中循环,也不需要使用addslash等,最终您会得到更少的代码。