【问题标题】:fill form from database then update database with more info从数据库填写表格,然后用更多信息更新数据库
【发布时间】:2014-08-23 22:16:06
【问题描述】:

这可能很简单,但我只是无法让最后一点工作。我有一个 PHP/HTML 表单。部分由查询数据库填写,部分由用户填写。除了 PHP 写入数据库中的最后一条 $sql 语句外,一切正常。基本上,表单页面的第二部分检索一些用户存储的信封,然后允许用户输入要放入该信封的金额。我需要存储该金额,但有很多信封,我需要确保输入的金额对应正确的信封。如您所见,我迷路了。

这是主要形式:

    <form action="newpaycheck.php" method="post">
<div id="col2top">
<?php
 include 'includes/connection.php';
    echo "<select name= 'bankaccount'>";
    echo '<option value="">'.'--- Bank Account ---'.'</option>';
    $query = mysqli_query($con,"SELECT bankaccount FROM bankaccounts");
    $query_display = mysqli_query($con,"SELECT bankaccount FROM bankaccounts");
    while($row=mysqli_fetch_array($query))
        {
        echo "<option value='". $row['bankaccount']."'>".$row['bankaccount']
        .'</option>';
        }
    echo '</select>';
?><br><br>
    Amount: <input type="text" name="paycheckamount"><br><br>
    Name: <input type="text" name="paycheckname"><br><br>
    Date: <input type="text" name="normaldate">
</div>
<div id="col2bottom">
<?php
    $result = mysqli_query($con,"SELECT envelopename, envelopebudget FROM envelopes");

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

</div>
</form> 
</div>

这是将所有内容写入数据库的内容:

<?php
//MySQL Database Connect
 include 'includes/connection.php';

// escape variables for security
$bankaccount = mysqli_real_escape_string($con, $_POST['bankaccount']);
$paycheckamount = mysqli_real_escape_string($con, $_POST['paycheckamount']);
$paycheckname = mysqli_real_escape_string($con, $_POST['paycheckname']);
$normaldate = mysqli_real_escape_string($con, $_POST['normaldate']);
$budgetamount = mysqli_real_escape_string($con, $_POST['budgetamount']);

$sql="INSERT INTO paychecks (bankaccount, paycheckamount, paycheckname, normaldate)
VALUES ('$bankaccount','$paycheckamount','$paycheckname','$normaldate')";
if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}

$sql="ALTER TABLE envelopes ADD COLUMN $paycheckname varchar (50)";
if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}

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

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);

【问题讨论】:

  • 你得到了什么错误,或者现在的结果是什么?
  • 我得到的错误是:错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''rent'='25' WHERE 'envelopename'=''' 附近使用正确的语法,结果都很好,只是它没有添加值每个信封的用户输入。

标签: php database forms


【解决方案1】:

不应引用列名。改变

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

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

如果你愿意,你可以使用反引号

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

【讨论】:

  • 当我按照您的建议取出 qoutes 时,我没有收到任何错误,但它仍然没有将每个信封的输入值保存到数据库中。表单上的第二个 while 语句填充了多个信封,用户将值放入每个信封中,因此更新语句必须根据最初从数据库中提取的信封名称更新多行。
  • 您永远不会选择 $paycheckname 例如SELECT RENT,因此它永远不会显示在您的结果中。你看到1 row added 消息了吗?
  • 老实说,您允许用户创建自定义数据库列的策略似乎错误且坦率地说很危险,您应该创建一个 paychecks 表,其中行包含不同的帐户名称,然后对它们执行连接
  • 添加的 1 条记录是从另一个脚本遗留下来的,我需要删除它,但 $paycheckname 是用户在表单顶部输入的。我认为可能没有什么可以区分信封名称,因为当我填充表格时,它是一次完成的,但是它如何将输入框与特定的信封相关联。
  • 每当用户在表单Name 字段中输入值时,您就创建了一个新信封$sql="ALTER TABLE envelopes ADD COLUMN $paycheckname varchar (50)";,这种表结构几乎不可能实现任何类型的关联。您应该创建一个 paychecks 表,其中的行包含不同的帐户名称,然后对它们执行连接
猜你喜欢
  • 2017-01-29
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 2016-06-25
相关资源
最近更新 更多