简体   繁体   English

不了解mysqli_fetch_array

[英]not understanding mysqli_fetch_array

So i guess i don't understand this i am a very newbie to coding in general. 所以我想我不明白这一点,我通常是一个非常新手。 I have searched and can't find a good enogh explanation to get it to work in my situatation. 我进行了搜索,但找不到很好的解释,无法使其在我的情况下起作用。 I need to fill a table from a fetch command then update each result with an input of information into a new column. 我需要从fetch命令中填写表格,然后将信息输入中的每个结果更新到新列中。 Here is the code i have: 这是我的代码:

This fills the table: 这将填满表格:

    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">

And this writes the input for budgetname into the column 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));
}

Right now it just doesn't write anything. 现在它什么也没写。 I have used echo var_dump($envelopename)."<br>"; and echo var_dump($budgetamount)."<br>"; 我已经使用echo var_dump($envelopename)."<br>"; and echo var_dump($budgetamount)."<br>"; var_dump($envelopename)."<br>"; and echo var_dump($budgetamount)."<br>"; to try and see what it is doing but $envelopename is always blank. 尝试看看它在做什么,但是$ envelopename始终为空。 Thanks for any help you can provide. 感谢您的任何帮助,您可以提供。

only <input> , <textarea> , <select> and <button> are submitted to the server in a form <input><textarea><select><button>以表格形式提交到服务器

If you want to re-submit some static values create some hidden inputs 如果要重新提交一些静态值,请创建一些隐藏的输入

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>";

But your next issue will be that you're creating the elements in a loop so you'll have multiple inputs with the same name 但是您的下一个问题将是您正在循环中创建元素,因此您将有多个具有相同名称的输入

<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>

so you must submit as an array 所以你必须提交一个数组

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>";

and at the server end process as an array 并在服务器端以数组的形式进行处理

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

suppose the form rendered looks like this: 假设呈现的表单如下所示:

<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>

when the user hits submit the $_POST that arrives at newpaycheck.php will look like: 当用户点击时,提交到达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'
}

so you can do something like this: 因此您可以执行以下操作:

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));
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM