Php 提交时更新下拉选择和文本区域的最佳方法
我正在编写一个PHP页面,该页面有一个下拉状态选择和一个用于注释的文本区域。目前,我很难弄清楚如何编码,以便在提交时正确更新下拉列表和文本区域 我已将下拉列表的默认值设置为显示'--Select Status---',不带任何值 我的问题是:每当我选择状态并在评论区域中进行更改时,只有状态得到更新,评论保持不变。我想知道有没有更有效的方法 更新:我已经考虑过了。。。有4种情况:Php 提交时更新下拉选择和文本区域的最佳方法,php,mysql,database,Php,Mysql,Database,我正在编写一个PHP页面,该页面有一个下拉状态选择和一个用于注释的文本区域。目前,我很难弄清楚如何编码,以便在提交时正确更新下拉列表和文本区域 我已将下拉列表的默认值设置为显示'--Select Status---',不带任何值 我的问题是:每当我选择状态并在评论区域中进行更改时,只有状态得到更新,评论保持不变。我想知道有没有更有效的方法 更新:我已经考虑过了。。。有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>");
}
}
//这是状态下拉菜单的功能
函数状态下拉列表($case){
打印(“状态:”);
$dropdown=“--选择状态--”;
$connection=getMySqlConnection();
$sql=“按状态ID ASC从主状态查找顺序中选择状态ID、状态名称”;
$result=mysql\u query($sql,$connection)或die(mysql\u error());
而($record=mysql\u fetch\u array($result)){
$dropdown.=“{$record['STATUS_NAME']}”;
}
$下拉列表=“”;
echo$下拉列表;
}
//本部分包含状态下拉列表和注释(文本区域)
函数表状态($case){
$connection=getMySqlConnection();
$sql=“选择caseid=”“$case.”的案例中的统计信息\状态、统计信息\注释;
$result=mysql\u query($sql,$connection)或die(mysql\u error());
如果($result!==FALSE){
而($record=mysql\u fetch\u row($result)){
$status=$record[0];
$comments=$record[1];
打印();
showStatusComment($case);
状态下拉列表($case);
打印(“”);
打印(“注释:.$Comments.”
);
打印(“”);
}
}
}
以下是我更新数据的代码:
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);
}
}
函数saveTableStatus($case)
{
//检索所选状态
如果(isset($_请求['status'])){
$status=$_请求['status'];
}
//检索键入的注释
如果(isset($_请求['comments'])){
$comments=$_请求['comments'];
}
如果($status='NULL'){
打印(未选择状态,请选择一种状态并重试。
”;
}
else if(($status!='NULL')){
$connection=getMySqlConnection();
mysql_查询(“启动事务”,$connection);
$result=mysql_query(“更新案例集统计信息_status=“.$status.”,统计信息_comments=“.mysql_real_escape_string($comments)”。“其中caseid=”。mysql_real_escape_string($case)。“”,$connection);
如果($结果){
mysql_查询(“提交”,$connection);
打印(表状态已更新!
);
}否则{
mysql_查询(“回滚”,$connection);
}
mysql_close($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);
检查为“统计和评论”栏添加的报价 您编写的
showStatusComment($case)
函数在哪里?如果您忘记编写函数
showStatusComment()
,请在该函数中编写一些处理注释的代码。您在HTML中使用了value=NULL
,并对照“NULL”字符串进行了检查。代码中需要的主要修改是删除value=NULL
属性
接下来,您需要检查它是否为NULL,而不是“NULL”:
if ( $status == NULL ) {
print("<p class='error'> . . . </p>");
}
参考Nj Subedi answer,您必须在条件中使用value==null,因为null不应该是字符串 以及在更新查询中重新修改代码。你应该用这个
$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\u查询,因为它现在已经被弃用了。改用MySQLi或PDO_-MySQL。您应该编写两个不同的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);
}
您的
表单
标记没有操作
和方法
。因此,不清楚如何处理表单提交以运行类似于saveTableStatus($case)
的函数。
但您应该知道,表单提交的默认
方法是GET
。因此,当您更改状态
和注释
输入并提交表单时,它会将数据作为URL发布。由于注释过长,可能会导致处理长URL时出现问题。因此,最好对您的表单使用POST
方法,如
mysql_uuu函数已被弃用,您应该考虑使用MySQLi或PDO
else if (($status!=='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);
}