我正在编写一个PHP页面,其中包含下拉状态选择和注释文本区域。目前,我无法确定如何编码,以便下拉列表和文本区域在提交时正确更新。
我已将下拉列表的默认值设置为显示'---选择状态---',没有值。
我的问题是:每当我选择状态并在评论区域进行更改时,只有状态得到更新,评论保持不变。我想知道是否有更有效的方法来做到这一点..
更新:我已经考虑过了......有4种情况:
如何对其进行编码以便在所有场合更新?
以下是我的下拉状态/评论文字区域的代码:
// this is the function for status dropdown menu
function statusDropdown($case){
print("<b>Status:</b>");
$dropdown = "<select name = 'status'><option selected='selected' value=NULL>--Select Status--</option>";
$connection = getMySqlConnection();
$sql = "SELECT STATUS_ID, STATUS_NAME FROM primary_status_lookup ORDER BY STATUS_ID ASC";
$result = mysql_query($sql, $connection) or die(mysql_error());
while($record=mysql_fetch_array($result)){
$dropdown .= "<option value = '{$record['STATUS_ID']}'> {$record['STATUS_NAME']}</option>";
}
$dropdown .="</select>";
echo $dropdown;
}
//This part incorporates Status dropdown & Comments (text area)
function tableStatus($case) {
$connection = getMySqlConnection();
$sql = "SELECT statistics_status, statistics_comments FROM cases WHERE caseid='".$case."'";
$result = mysql_query($sql, $connection) or die(mysql_error());
if($result!== FALSE){
while ($record = mysql_fetch_row($result)) {
$status=$record[0];
$comments=$record[1];
print("<form><p>");
showStatusComment($case);
statusDropdown($case);
print("<input type=hidden name='case' value='".$case."'/>");
print(" <label><b>Comments:</b><textarea name='comments' cols=70 rows=2 >".$comments."</textarea></label><br/><br/>");
print("<input type='submit' name='submit' value='Submit'/></form>");
}
}
}
这是我更新数据的代码:
function saveTableStatus($case)
{
//retrieve selected status
if(isset($_REQUEST['status'])) {
$status = $_REQUEST['status'];
}
//retrieve typed comments
if(isset($_REQUEST['comments'])) {
$comments = $_REQUEST['comments'];
}
if($status=='NULL') {
print("<p class='error'>No status selected, please select a status and try again.</p>");
}
else if (($status!=='NULL')){
$connection = getMySqlConnection();
mysql_query("START TRANSACTION", $connection);
$result= mysql_query("Update cases Set statistics_status=".$status.", statistics_comments =".mysql_real_escape_string($comments)." Where caseid='".mysql_real_escape_string($case)."'", $connection);
if($result) {
mysql_query("COMMIT", $connection);
print("<p class='saved'>Table Status Updated!</p>");
} else {
mysql_query("ROLLBACK", $connection);
}
mysql_close($connection);
}
}
答案 0 :(得分:2)
你写的showStatusComment($case)
函数在哪里?
如果您忘记编写函数showStatusComment()
,那么请在该函数中编写一些处理注释的代码。
答案 1 :(得分:1)
$result= mysql_query("Update cases Set statistics_status=".$status.", statistics_comments =".mysql_real_escape_string($comments)." Where caseid='".mysql_real_escape_string($case)."'", $connection);
此声明应为
$result= mysql_query("Update cases Set statistics_status=".$status.", statistics_comments ='".mysql_real_escape_string($comments)."' Where caseid='".mysql_real_escape_string($case)."'", $connection);
检查为“statistics_comments”列添加的报价。
答案 2 :(得分:1)
您在HTML中使用了value=NULL
,并针对“NULL”字符串进行了检查。您的代码中需要进行的主要修改是删除value=NULL
属性。
接下来,您需要检查它是否为NULL,而不是'NULL':
if ( $status == NULL ) {
print("<p class='error'> . . . </p>");
}
这应该显然可以解决问题。此外,请参阅Rameshkrishnan S的回复并修改:
$result= mysql_query("Update cases Set statistics_status='".$status."', statistics_comments ='".mysql_real_escape_string($comments)."' Where caseid='".mysql_real_escape_string($case)."'", $connection);
答案 3 :(得分:1)
参考Nj Subedi答案,你必须在你的条件中使用value == null因为null不应该是一个字符串。
并重新修改UPDATE查询中的代码。你应该使用它。
$result = mysql_query("Update cases Set statistics_status='".$status."',statistics_comments ='".mysql_real_escape_string($comments)."' Where caseid=".mysql_real_escape_string($case), $connection);
注意:我删除了caseid中的引号,因为我认为它不是字符串。所以不需要引用。
顺便说一句,你不应该使用mysql_query,因为它现在已被弃用。改为使用MySQLi或PDO_MySQL。
答案 4 :(得分:1)
您应该编写2个不同的SQL查询。 这一行会产生问题
else if (($status!=='NULL')){
它仅在状态不为null时运行更新查询。但在你的情况下,它应该在每个案例上运行。
if($status!='NULL'){
mysql_query("Update cases Set statistics_status=".$status." Where caseid='".mysql_real_escape_string($case)."'", $connection);
}
if($comments!='NULL'){
mysql_query("Update cases Set statistics_comments =".mysql_real_escape_string($comments)." Where caseid='".mysql_real_escape_string($case)."'", $connection);
}
答案 5 :(得分:1)
您的form
标记没有action
,没有method
。因此,它不清楚,如何处理表单提交以运行像saveTableStatus($case)
这样的函数。
但您应该知道,表单提交的默认method
为GET
。因此,当您更改status
和comment
输入并提交表单时,它会将数据作为网址发布。由于长注释,它可能会导致处理长URL的问题。最好对POST
<form method="POST">
方法