【问题标题】:not understanding mysqli_fetch_array不理解 mysqli_fetch_array
【发布时间】:2014-08-24 10:19:26
【问题描述】:

所以我想我不明白这一点,我通常是编码的新手。我已经搜索并找不到一个很好的解释来让它在我的情况下工作。我需要从 fetch 命令中填充一个表,然后将每个结果与输入的信息更新到一个新列中。这是我的代码:

这填满了表格:

    echo "<table border='1'>
    <tr>
    <th>Envelope</th>
    <th>Budget</th>
    <th>Amount</th>
    </tr>";

    while($row = mysqli_fetch_array($result)) {

    echo "<tr>";
    echo "<td>" . $row['envelopename'] . "</td>";
    echo "<td>" . $row['envelopebudget'] . "</td>";
    ?><td><input type="text" name="budgetamount"></td><?php;
    echo "</tr>";
    }

    echo "</table>";
?>  
    <input type="submit">

这会将budgetname 的输入写入budgetname 列:

$paycheckname = mysqli_real_escape_string($con, $_POST['paycheckname']);
$budgetamount = mysqli_real_escape_string($con, $_POST['budgetamount']);
$envelopename = mysqli_real_escape_string($con, $_POST['envelopename']);
}

$sql="UPDATE envelopes SET $paycheckname='$budgetamount' WHERE envelopename ='$envelopename'";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}

现在它只是不写任何东西。我使用 echo var_dump($envelopename)."&lt;br&gt;"; and echo var_dump($budgetamount)."&lt;br&gt;"; 尝试查看它在做什么,但 $envelopename 始终为空白。感谢您的任何帮助,您可以提供。

【问题讨论】:

  • 您没有 envelopename 的输入,因此不会有 post 值。如果$envelopename 为空,那就是问题所在,与 MySQL 无关。在将 MySQL 拖入您的项目之前,采取较小的步骤并首先尝试构建一个工作静态表单,仅显示发布的值。这段代码有几个不相关的问题,很难为它写一个好的、完整的和(重)可用的答案。
  • 我认为你需要做$row = mysqli_fetch_array($result, MYSQLI_ASSOC) 来获得一个关联数组,因为默认是数字索引......这里可能是错误的。
  • envelopename 从创建如上所示表单的数据库表信封中提取。如果我能让这更简单,请告诉我。
  • 也许你应该去 PHP 文档并寻找 mysqli_result::fetch_assoc,这正是你所需要的。要了解有关 mysqli_fetch_array 的更多信息:php.net/manual/en/mysqli-result.fetch-array.php
  • @Ohgodwhy 默认类型为mysqli_fetch_array = MYSQLI_BOTH 所以它可以正常工作

标签: php arrays mysqli


【解决方案1】:

只有&lt;input&gt;&lt;textarea&gt;&lt;select&gt;&lt;button&gt;以表单形式提交给服务器

如果您想重新提交一些静态值,请创建一些隐藏输入

while($row = mysqli_fetch_array($result)) {

echo "<input type='hidden' value='$row[envelopename]' name='envelopename'/>";
echo "<input type='hidden' value='$row[envelopebudget]' name='envelopebudget'/>";
echo "<tr>";
echo "<td>" . $row['envelopename'] . "</td>";
echo "<td>" . $row['envelopebudget'] . "</td>";
?><td><input type="text" name="budgetamount"></td><?php;
echo "</tr>";
}

echo "</table>";

但您的下一个问题是您在循环中创建元素,因此您将有多个具有相同名称的输入

<tr>
    <input type='hidden' value='envName1' name='envelopename'/>
    <input type='hidden' value='envBudget1' name='envelopename'/>
    <td>envName1</td>
    <td>envBudget1</td>
    <td><input type="text" name="budgetamount"></td>
</tr>
<tr>
    <input type='hidden' value='envName2' name='envelopename'/>
    <input type='hidden' value='envBudget2' name='envelopename'/>
    <td>envName2</td>
    <td>envBudget2</td>
    <td><input type="text" name="budgetamount"></td>
</tr>

所以你必须以数组的形式提交

while($row = mysqli_fetch_array($result)) {

echo "<input type='hidden' value='$row[envelopename]' name='envelopename[]'/>";
echo "<input type='hidden' value='$row[envelopebudget]' name='envelopebudget[]'/>";
echo "<tr>";
echo "<td>" . $row['envelopename'] . "</td>";
echo "<td>" . $row['envelopebudget'] . "</td>";
?><td><input type="text" name="budgetamount[]"></td><?php;
echo "</tr>";
}

echo "</table>";

并在服务器端进程作为数组

 foreach ($_POST['budgetamount'] as $budgetamount){
       echo $budgetamount. '<br>';
  }

【讨论】:

  • 这看起来像我需要的,但我也想了解它。我得到了 while 语句部分,但在 for each 中。这是否在 echo "" 下进行;如果是这样,那么我的语句将 $budgetamount 写回表会是什么样子?抱歉,我正在努力解决这个问题。
  • 表单是提交到与自身相同的页面还是不同的页面(表单操作与其所在文件的名称不同)?一个表单可以有一个 action 属性,&lt;form action="somephpfile.php"&gt; 你的呢?
  • 如果你在上面的评论中回答我的问题,我会发布另一个解释 foreach 循环的答案,但我需要先知道
  • 我有一个单独的操作文件,表单调用它是 newpaycheck.php,我的语法显示在我原始帖子的第二个代码中。我还需要对你给我的 echo 输入语句做一些不同的事情吗,因为页面现在在我的表格上方显示 name='envelopename[]'/> name='envelopename[]'/>。
  • 可能,我确实编辑了答案并删除了几个错误的&gt;,所以再次复制它,现在为您准备第二个答案
【解决方案2】:

假设呈现的表单如下所示:

<tr>
    <input type='hidden' value='envName1' name='envelopename[]'/>
    <input type='hidden' value='envBudget1' name='envelopebudget[]'/>
    <td>envName1</td>
    <td>envBudget1</td>
    <td><input type="text" name="budgetamount[]"></td>
</tr>
<tr>
    <input type='hidden' value='envName2' name='envelopename[]'/>
    <input type='hidden' value='envBudget2' name='envelopebudget[]'/>
    <td>envName2</td>
    <td>envBudget2</td>
    <td><input type="text" name="budgetamount[]"></td>
</tr>
<tr>
    <input type='hidden' value='envName3' name='envelopename[]'/>
    <input type='hidden' value='envBudget3' name='envelopebudget[]'/>
    <td>envName3</td>
    <td>envBudget3</td>
    <td><input type="text" name="budgetamount[]"></td>
</tr>

当用户点击提交时,到达newpaycheck.php$_POST 将如下所示:

$_POST
['envelopename']{
   [0]=>'envName1',
   [1]=>'envName2',
   [2]=>'envName3'
},['envelopebudget']{
   [0]=>'envBudget1',
   [1]=>'envBudget2',
   [2]=>'envBudget3'
},['budgetamount']{
   [0]=>'someValueEnteredByUser',
   [1]=>'anotherValueEnteredByUser',
   [2]=>'yetAnotherValueEnteredByUser'
}

所以你可以这样做:

foreach ($_POST['envelopename'] as $envelopename){
   $arrayIndex = array_search($envelopename,$_POST['envelopename']);
   $envelopebudget = $_POST['envelopebudget'][$arrayIndex];
   $budgetamount= $_POST['budgetamount'][$arrayIndex];

   $paycheckname = mysqli_real_escape_string($con, $envelopebudget);
   $budgetamount = mysqli_real_escape_string($con,$budgetamount);
   $envelopename = mysqli_real_escape_string($con,$envelopename);

   $sql="UPDATE envelopes SET $paycheckname='$budgetamount' WHERE envelopename ='$envelopename'";

   if (!mysqli_query($con,$sql)) {
       die('Error: ' . mysqli_error($con));
    }

}

【讨论】:

  • 看看怎么样,抱歉我没有机会测试它
  • 对不起,我还有一个问题。那么 foreach 语句会出现在表单页面上,如果是在表格内部或外部,还是会出现在操作页面上?我不擅长这个,但你很有耐心。谢谢。
  • foreach 循环将进入newpaycheck.php您的操作页面
  • 这似乎有效,只是它只使用最后一个预算金额输入结果。您还错过了 foreach 语句的结束 },但我已修复。
  • 我不知道你说我错过了} 是什么意思?它就在代码sn-p的末尾,sql语句在foreach循环内,它必须为每组输入运行插入语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2019-01-31
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多