回显值到下拉列表中进行编辑和保存

时间:2012-10-10 12:04:46

标签: php mysql

我有3个下拉框,效果很好。我可以从3个不同的表中选择值,并通过各种表ID提交/保存到汇总表。但是,我也希望能够在相同的下拉字段中编辑这些值。我有一个编辑函数,它将汇总表ID发送到$ _GET函数以标识该行。这些值当前显示在3个文本框中,但我宁愿将它们填充到相同的下拉字段中。我无法让选项语法正确。我想我在那里需要一个“选中”选项。我只想更新proj_hours列,但仍希望所有3个下拉列表都填充值。

我希望这有道理吗?我想摆脱文本框。

最近的代码:

<?php

    // Connect to server and select database.
    $link = mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");

    //grabs ID from the initial edit submit 
//grabs ID from the initial edit submit 
    if(isset($_GET['id']))
echo "<pre>Value of \$_GET:</br>";print_r($_GET);echo"</pre>";  
    {
        $summary_id = $_GET['summary_id'];
        $res = mysql_query("SELECT *
                    FROM summary S
                    JOIN projects P ON S.proj_id = P.proj_id
                    JOIN departments D ON D.dept_id = S.dept_id
                    JOIN hours H ON H.hours_id = S.hours_id
                    WHERE S.summary_id = '$_GET[id]'
                    ORDER BY D.dept_id
                    LIMIT 0 , 30");

        $rows = mysql_fetch_array($res);

//echo "<pre>Value of \$rows:</br>";print_r($rows);echo"</pre>";  //was using to check what's going on 
        }

//submits the edited values, does a join to find out what's what, and inserts the correct digits into the summary DB        
    if (isset($_POST['btnsubmit']))  
echo "<pre>Value of \$_POST:</br>";print_r($_POST);echo"</pre>";
    {
//echo "<pre>Value of \$_POST:</br>";print_r($_POST);echo"</pre>";
        $summary_id     = $_POST['summary_id'];     
        $nclarity_id    = $_POST['nclarity_id'];
        $nproj_hours    = $_POST['nproj_hours'];
        $ndept_name     = $_POST['ndept_name'];

        $sql1           = "UPDATE summary S
                            SET S.hours_id = (
                            SELECT H.hours_id  
                            FROM Hours H 
                            WHERE H.proj_hours = '$nproj_hours' )
                            WHERE S.summary_id = '$summary_id'" 
                            or die ("couldn't update".mysql_error());

//multiple queries to get the field edited - i know this can be done more efficiently and safely, but I'm not proficient enough                         
        $query1 = mysql_query($sql1);
        if ($query1)
{
echo "success_1!";
}
else
            {
        die('error inserting new record_1'.mysql_error());
    } // end of the nested if statement

}

 if (isset($_POST['btnnew']))  

    {
    //echo "<pre>Value of \$_POST:</br>";print_r($_POST);echo"</pre>";

        $nclarity_id    = $_POST['nclarity_id'];
        $nproj_hours    = $_POST['nproj_hours'];
        $ndept_name     = $_POST['ndept_name'];
        $proj_id        = $_POST['nclarity_id'];
        $hours_id       = $_POST['nproj_hours'];
        $dept_id        = $_POST['ndept_name'];

        $sql        = "INSERT INTO `summary` VALUES (null,'$proj_id','$hours_id','$dept_id',NOW(),null)" 
                            or die ("couldn't update".mysql_error());
        $query = mysql_query($sql);

        if ($query)
{
echo "success_2!";
}
else
            {
        die('error inserting new record_2'.mysql_error());
    } // end of the nested if statement
}

    $res = mysql_query("SELECT *
                    FROM summary S
                    JOIN projects P ON S.proj_id = P.proj_id
                    JOIN departments D ON D.dept_id = S.dept_id
                    JOIN hours H ON H.hours_id = S.hours_id
                    WHERE P.proj_status = 'open'
                    ORDER BY D.dept_id
                                        LIMIT 0 , 30"); 

?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
   <tr>
   <td>
   <table width="100%" border="0" cellspacing="1" cellpadding="0">
   <tr>
   <td>&nbsp;</td>
   <td colspan="3"><strong>Update data in mysql</strong> </td>
   </tr>
   <tr>
   <td align="center">&nbsp;</td>
   <td align="center">&nbsp;</td>
   <td align="center">&nbsp;</td>
   </tr>
   <tr>
   <td align="center">&nbsp;</td>
   <td align="center"><strong>Clarity ID</strong></td>
   <td align="center"><strong>Hours</strong></td>
   <td align="center"><strong>Department</strong></td>
   </tr>
   </table>
   </td>
   </form>
   </tr>
   </table>

<table width="500" border="0" cellspacing="1" cellpadding="0">

<form method="post" action="index.php">
<tr>
<td>&nbsp;</td>

<select name="nclarity_id">
<option name="">
<?php
$sql = "SELECT proj_id, clarity_id FROM projects WHERE proj_status='open'";

$rs = mysql_query($sql);

$id = -9999; // a value that cannot exist in your database
if(isset($_GET['proj_id'])) { // check if there is an id in the $_GET variable
    $id = $_GET['proj_id']; // if so, set the $id variable
}
while($row = mysql_fetch_array($rs))
{
    $selectedText = "";
    if($row['proj_id'] == $id) { // if this row id is the same as the post id
        $selectedText = ' selected="selected"'; // set some text to be included in the markup
    }
    echo "<option value=\"".$row['proj_id']."\"".$selectedText.">".$row['clarity_id']."</option>\n  ";
}
?>
</select>

<select name="nproj_hours">
<option name="">
<?php
$sql = "SELECT hours_id, proj_hours FROM hours";
$rs = mysql_query($sql);
$id = -9999; // a value that cannot exist in your database
if(isset($_GET['hours_id'])) { // check if there is an id in the $_GET variable
    $id = $_GET['hours_id']; // if so, set the $id variable
}
while($row = mysql_fetch_array($rs))
{
    $selectedText = "";
    if($row['hours_id'] == $id) { // if this row id is the same as the post id
        $selectedText = ' selected="selected"'; // set some text to be included in the markup
    }
    echo "<option value=\"".$row['hours_id']."\"".$selectedText.">".$row['proj_hours']."</option>\n  ";

}
?>
</select>
<select name="ndept_name">
<option name="">
<?php
$sql = "SELECT dept_id, dept_name FROM departments";
$rs = mysql_query($sql);
$id = -9999; // a value that cannot exist in your database
if(isset($_GET['dept_id'])) { // check if there is an id in the $_GET variable
    $id = $_GET['dept_id']; // if so, set the $id variable
}
while($row = mysql_fetch_array($rs))
{
    $selectedText = "";
    if($row['hours_id'] == $id) { // if this row id is the same as the post id
        $selectedText = ' selected="selected"'; // set some text to be included in the markup
    }
    echo "<option value=\"".$row['dept_id']."\"".$selectedText.">".$row['dept_name']."</option>\n  ";

}
?>
</select>
<td align="center">
<input type="submit" name="btnnew" value="Enter New Record">
<input type="submit" name="btnsubmit" value="Save Edited Record">
</td>
</tr>
</form>
</table>

<table width="700" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<table width="700" border="1" cellspacing="0" cellpadding="3">
<tr>
<td colspan="5"><strong>Project Information </strong> </td>
</tr>

<tr>
<tr>
<td align="center"><strong>Clarity ID</strong></td>
<td align="center"><strong>Estimated Hours</strong></td>
<td align="center"><strong>Department</strong></td>
<td align="center"><strong>Date Submitted</strong></td>
<td align="center"><strong></strong></td>
</tr>

<?php
while($row=mysql_fetch_array($res))
{

?>

<tr>
<td align="center"><?php echo $row['clarity_id']; ?></td>
<td align="center"><?php echo $row['proj_hours']; ?></td>
<td align="center"><?php echo $row['dept_name']; ?></td>
<td align="center"><?php echo $row['date_entered']; ?></td>
<td align="center"><a href="index.php?id=<?php echo $row['summary_id']; ?>">Edit</a></td>
</tr>

<?php
}

?>

</table>
</td>
</tr>
</table>


<?php
mysql_close();
?>

1 个答案:

答案 0 :(得分:0)

您可以构建相同的选项列表,但检查ID是否与您在$ _POST或$ _GET数组中找到的ID相同。

编辑:刚才意识到你在下面的例子中用$ _GET表示$ _GET - 替换$ _POST。

类似的东西:

$id = -9999; // a value that cannot exist in your database
if(isset($_POST['proj_id'])) { // check if there is an id in the $_POST variable
    $id = $_POST['proj_id']; // if so, set the $id variable
}
while($row = mysql_fetch_array($rs))
{
    $selectedText = "";
    if($row['proj_id'] == $id) { // if this row id is the same as the post id
        $selectedText = ' selected="selected"'; // set some text to be included in the markup
    }
    echo "<option value=\"".$row['proj_id']."\"".$selectedText.">".$row['clarity_id']."</option>\n  ";

}

希望这有帮助。

编辑回答评论:

嗨,迈克,我已经检查了你的代码,对$_POST$_GET变量有点混淆。您可以在提交表单时找到表单中的$_POST个变量。 $_GET变量来自URL。当您单击“编辑”链接时,您将重定向到index.php,并且您正在传递一个名为“id”的变量。此时,您的$_GET数组将包含一个名为“id”的键/值对及其值。然而,我在你的代码中注意到你试图从$_GET数组中获取一个名为'summary_id'的变量,该变量可能不存在。此外,在构建每个选项列表之前,您正在寻找$_GET['proj_id']$_GET['hours_id']$_GET['dept_id'],它们也不存在。总之,在“编辑”页面上,您正在搜索未在URL中传递的变量。这可能是您的下拉列表未填充的原因。一种解决方案是更改“修改”链接,以便同时传递proj_iddept_idhours_id变量。另外,请记住,$ _POST数组仅在提交表单时填充,并且仅可用于表单元素的“action”属性中指定的页面。只要您离开该页面(即使您导航到同一页面,就像使用“编辑”链接一样),也不再填充$ _POST数组。