【问题标题】:PHP database UPDATE function only modified the first row?PHP数据库UPDATE函数只修改第一行?
【发布时间】:2015-09-22 09:27:05
【问题描述】:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<?php
if (!mysqli_connect_errno($con)) {

    $queryStr = "SELECT * " .
            "FROM crewlist";
}
$result = mysqli_query($con, $queryStr);
while ($row = mysqli_fetch_array($result)) {

    echo "<tr>.<th>" . $row["crew_name"] . "<br></br>" . "</th>";
    echo "<th>" . $row["crew_rank"] . "</th>";
    echo "<th>" . $row["start_date"] . "</th>";
    echo "<th>" . $row["end_date"] . "</th>";
    echo "<th>" . $row["watchkeeping"] . "</th>";
    echo "<th>" . $row["active"] . "</th>";
    echo "<td><a href=\"editcrew.php?id=" . $row['crew_id'] . "\">Edit</a>";

    echo "<td><a href=\"delete.php?id=" . $row['crew_id'] . "\">Delete</a>";
}
?>

editcrew.php

<table>
    <form action="handlecrewedit.php" method="post">
        <tr>
            <td>Crew Name:</td>
            <td><input type="text" name="CrewName" id ="CrewName"required></td>     
        </tr>
        <tr>
            <td>Crew Rank:</td>
            <td><input type="text" name="CrewRank" id="CrewRank" required></td>     
        </tr>
        <tr>
            <td>Start Date:</td>
            <td><input type="text" name="StartDate" id="StartDate" required></td>       
        </tr>
        <tr>
            <td>End Date:</td>
            <td><input type="text" name="EndDate" id="EndDate" required></td>       
        </tr>
        <tr>
            <td>Payroll No:</td>
            <td><input type="text" name="PayrollNo" id="PayrollNo" required></td>       
        </tr>
        <tr>
            <td>Employee No:</td>
            <td><input type="text" name="EmployeeNo" id="EmployeeNo" required></td>     
        </tr>
        <tr>
            <td>Watching Keeping:</td>
            <td><input type="text" name="WatchKeeping" id="WatchKeeping" required></td>     
        </tr>
        <tr>
            <td>Active:</td>
            <td><input type="text" name="Active" id="Active" required></td>     
        </tr>
        <tr>
            <td><input type="submit" value="Submit" ></td>


        </tr>
    </form>
</table>

handlecrewedit.php

<?php

require 'dbfunction.php';
$con = getDbConnect();
$crew_id = $_POST["crew_id"];
$CrewName = $_POST["CrewName"];
$CrewRank = $_POST["CrewRank"];
$StartDate = $_POST["StartDate"];
$EndDate = $_POST["EndDate"];
$PayrollNo = $_POST["PayrollNo"];
$EmployeeNo = $_POST["EmployeeNo"];
$WatchKeeping = $_POST["WatchKeeping"];
$Active = $_POST["Active"];


if (!mysqli_connect_errno($con)) {

$queryStr = "SELECT crew_id " .
        "FROM crewlist"; 
}
$result = mysqli_query($con, $queryStr);
while ($row = mysqli_fetch_array($result)) {        



if (!mysqli_connect_errno($con)) {
    $sqlQueryStr = "UPDATE crewlist SET crew_name = '$CrewName', crew_rank = '$CrewRank', start_date = '$StartDate' "
            . ", end_date = '$EndDate', payroll_no = '$PayrollNo'"
            . ", employee_no = '$EmployeeNo', watchkeeping = '$WatchKeeping', active = '$Active' WHERE crew_id = " . $row['crew_id'] . "";


    }
    mysqli_query($con, $sqlQueryStr);
    header('Location: crewlisting.php');
    mysqli_close($con);
}




mysqli_close($con);
?>

这是我修改条目的另一个问题。我不太确定我是否可以简单地复制并粘贴我的删除代码以用于我的编辑代码,但这是我的表格的一些粗略测量。与删除功能不同,通过选择编辑功能,它将用户引导到表单页面,并要求他们填写更新的数据。

【问题讨论】:

  • @Kausha Mehta 来了!抱歉,我是新来的。
  • 没关系。我给出了解决方案,检查一下。
  • @KaushaMehta 嗨,我有一个关于搜索功能的新询问。我的主页显示所有用户的记录,如何让搜索文本框读取我输入的内容,例如当我输入“J”时,记录会自动刷新为以“J”开头的名称。提前谢谢你。
  • 最好在此处创建新问题并链接。无论您在新问题中尝试了什么,我都会解释您的代码,然后我就可以解释了。
  • @KaushaMehta 我已经有了一个,但谢谢!我会有更多的查询:)

标签: php mysql database


【解决方案1】:

用以下代码替换 editcrew.phphandlecrewedit.php 文件代码。

editcrew.php

<table>
    <form action="handlecrewedit.php" method="post">
        <input type="hidden" name="crew_id" value="<?php echo $_GET['id']; ?>" />
        <tr>
            <td>Crew Name:</td>
            <td><input type="text" name="CrewName" id ="CrewName"required></td>     
        </tr>
        <tr>
            <td>Crew Rank:</td>
            <td><input type="text" name="CrewRank" id="CrewRank" required></td>     
        </tr>
        <tr>
            <td>Start Date:</td>
            <td><input type="text" name="StartDate" id="StartDate" required></td>       
        </tr>
        <tr>
            <td>End Date:</td>
            <td><input type="text" name="EndDate" id="EndDate" required></td>       
        </tr>
        <tr>
            <td>Payroll No:</td>
            <td><input type="text" name="PayrollNo" id="PayrollNo" required></td>       
        </tr>
        <tr>
            <td>Employee No:</td>
            <td><input type="text" name="EmployeeNo" id="EmployeeNo" required></td>     
        </tr>
        <tr>
            <td>Watching Keeping:</td>
            <td><input type="text" name="WatchKeeping" id="WatchKeeping" required></td>     
        </tr>
        <tr>
            <td>Active:</td>
            <td><input type="text" name="Active" id="Active" required></td>     
        </tr>
        <tr>
            <td><input type="submit" value="Submit" ></td>


        </tr>
    </form>
</table>

handlecrewedit.php

<?php
require 'dbfunction.php';
$con = getDbConnect();
$crew_id = $_POST["crew_id"];
$CrewName = $_POST["CrewName"];
$CrewRank = $_POST["CrewRank"];
$StartDate = $_POST["StartDate"];
$EndDate = $_POST["EndDate"];
$PayrollNo = $_POST["PayrollNo"];
$EmployeeNo = $_POST["EmployeeNo"];
$WatchKeeping = $_POST["WatchKeeping"];
$Active = $_POST["Active"];

if (!mysqli_connect_errno($con)) {
    $sqlQueryStr = "UPDATE crewlist SET crew_name = '$CrewName', crew_rank = '$CrewRank', start_date = '$StartDate' "
            . ", end_date = '$EndDate', payroll_no = '$PayrollNo'"
            . ", employee_no = '$EmployeeNo', watchkeeping = '$WatchKeeping', active = '$Active' WHERE crew_id = " . $crew_id . "";
    mysqli_query($con, $sqlQueryStr);
}
header('Location: crewlisting.php');
mysqli_close($con);
?>

【讨论】:

  • 再次感谢!我会稍后再试一次,让你知道!
  • @ChenJunhao 好的,添加后告诉我。
  • 嗨@Kausha Mehta,我试过了,但你的代码不起作用。当我将下面的代码与您的代码合并时,它会更新整个表格。
  • 澄清一下,它需要“ $queryStr = SELECT crowd_id FROM crowdlist ”才能工作。
  • @ChenJunhao 不需要,因为在 editcrew.php 我使用隐藏的“crew_id”字段,所以我在 handlecrewedit.php 中得到像 $_POST 这样的文件.
【解决方案2】:

错误

  1. 此处缺少结束标记 (?&gt;) &lt;form action="&lt;?php echo $_SERVER['PHP_SELF']; ?" method="post"&gt;
  2. $queryStr = "SELECT * " ."FROM crewlist"; 应该是 $queryStr = "SELECT * FROM crewlist"
  3. 没有结束标签用于 &lt;br&gt; 在这里 echo "&lt;tr&gt;.&lt;th&gt;" . $row["crew_name"] . "&lt;br&gt;&lt;/br&gt;" . "&lt;/th&gt;";
  4. 你不知道有多少数据传递给这个$result = mysqli_query($con, $queryStr); Cz 没有行计数验证
  5. while 循环中检查这个是没有用的。 if (!mysqli_connect_errno($con))
  6. 如果您只是更新字段,那么您将更新查询放在错误的地方

【讨论】:

  • 对不起,我在这里转移时错过了,我会编辑它。
  • 很抱歉,你能解释一下第四个错误,因为我比较新。
【解决方案3】:

我认为建议的答案遗漏了一点。 它只更新第一行,因为您退出带有重定向标头的 while 循环。

header('Location: crewlisting.php');
mysqli_close($con);

将这两行放在你的while循环之外,它应该更新每一行。

您的 while 循环将是:

while ($row = mysqli_fetch_array($result)) {        
    // not needed. if (!mysqli_connect_errno($con)) {
    $sqlQueryStr = "UPDATE crewlist SET crew_name = '$CrewName', crew_rank = '$CrewRank', start_date = '$StartDate' "
            . ", end_date = '$EndDate', payroll_no = '$PayrollNo'"
            . ", employee_no = '$EmployeeNo', watchkeeping = '$WatchKeeping', active = '$Active' WHERE crew_id = " . $row['crew_id'] . "";


    //} closing bracket of if, but the if is not needed.
    mysqli_query($con, $sqlQueryStr);

}
//after updating all rows, redirect
header('Location: crewlisting.php');
mysqli_close($con);

【讨论】:

  • 感谢您向我解释这些小细节!它有助于!我稍后会检查它们。
  • 我添加了 if ---- (!mysqli_connect_errno($con)) { $queryStr = "SELECT crowd_id " 。 “来自船员名单”; } $result = mysqli_query($con, $queryStr); - 在您的代码上方,它可以工作,但它会更新整个表格。否则它不起作用。
猜你喜欢
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 2013-10-14
  • 2018-07-28
  • 2017-09-19
  • 2013-10-05
  • 2012-04-15
  • 1970-01-01
相关资源
最近更新 更多