【问题标题】:Resolve conflict between two simple forms on the same web page解决同一网页上两个简单表单之间的冲突
【发布时间】:2014-03-30 08:02:12
【问题描述】:

在我正在开发的会员网站上,一旦用户登录,他的个人资料页面上有两个简单的表单。

仅当用户在数据库中的“地区”字段为 NULL 时才会显示第一个。如果“地区”字段包含任何信息,则第一个表格将替换为显示该地区数据的表格。该表单的目的是让用户从列表中选择他的地区,并更新他的帐户,以便他可以从他的地区读取本地信息。在他点击提交后,数据库中的“地区”字段被更新,然后他再也看不到这个表单了。

第二个是基本的联系表格,如果需要任何帮助,用户可以通过该表格轻松地向支持团队发送电子邮件。发送消息后,将显示一条成功消息,而不是表单,直到刷新页面,此时文本字段恢复正常并且用户可以发送另一条消息。

我已经对它们进行了测试,它们都可以分别正常工作,但是我遇到的错误是当他的“地区”字段中为 NULL 的用户登录时,或者每当他的页面被刷新时,第二个表单会自动发送一个空白向支持团队发送电子邮件,并且总是显示成功消息而不是要写入的消息的文本输入。当第二个表单提交为空时,我设置了一个错误,但尽管如此,当第一个表单显示时,每次刷新,都会发送一封新的空白电子邮件...

用户提交了第一个表单并更新了他的“区域”后,第二个表单恢复正常并且工作正常...我知道有冲突,或者我忘记在下面的代码中设置一些条件.请善待,看看并告诉我你认为错误可能在哪里。欢迎任何帮助。

<? if($row_user['district'] == NULL ): 
        if(!isset($_POST['submit2']))
        {
            foreach($row_user as $field => $value)
            {
                $_POST[$field] = $value;
            }
        }

        $error2 = 0;

        if(isset($_POST['submit2'])){
            if(isset($_POST['distr']) && ($_POST['distr']==""))
            {
                $error2 = 1;
                $msg_distr="<br /><span class='error'>Select your district</span>";
            }

            if($error2 == 0)
            {
                $update = 'UPDATE users SET ';

                if(isset($_POST['distr'])) $update .= 'district = '.GetSQLValueString($_POST['distr'], 'text').', ';

                $update = substr_replace($update,"",-2);
                $update .= 'WHERE id_user = '.$id_user;
                mysql_query($update, $conn) or die(mysql_error());
            }
        }

        ?>

第一个表单的 HTML 代码是

<form action="" method="post" enctype="multipart/form-data" >

    <table width="465px" border="0" cellpadding="5" cellspacing="5">
        <tr>
            <td width="160" valign="middle" align="left">
                <span class="style20"><b>Choose District</b> *</span>
            </td>
            <td valign="top" align="left">
                <select name="distr" onChange="sel_distr(this.value)" class="select" >
                    <option value="">Choose</option>
                    <option value="District1" <? if($_POST['distr']=="District1") echo "'selected'"?>>District1</option>
                    <option value="District2" <? if($_POST['distr']=="District2") echo "'selected'"?>>District2</option>    
                    <option value="District3" <? if($_POST['distr']=="District3") echo "'selected'"?>>District3</option>    
                    <option value="District4" <? if($_POST['distr']=="District4") echo "'selected'"?>>District4</option>    
                    <option value="District5" <? if($_POST['distr']=="District5") echo "'selected'"?>>District5</option>
                </select>
                <?=$msg_distr?>
            </td>
        </tr>
        <tr>
            <td > 
                <input type="submit" name="submit2" class="submit" value="Insert"  />
            </td>
        </tr>
    </table>
</form>

<?endif; ?> 

另一种形式是从该页面发送电子邮件,只需插入消息并发送即可。用户不需要插入他的姓名或电子邮件。

<?php     
$error_message=0;

if ($_POST["email"]<>'') {
    if(isset($_POST['comment']) && ($_POST['comment']=="")){
        $error_message=1;
        $er_msg="<br /><span class='error'>You can't send a blank message</span>";
    } 

    if($error_message == 0){     
        $ToEmail = 'mail@domain';
        $EmailSubject = 'New message from '.$row_user['name'].'';
        $mailheader = "From: ".$_POST["email"]."\r\n";
        $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
        $mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n";
        $MESSAGE_BODY = "<b>Name:</b> ".$_POST["name"]."<br/>";
        $MESSAGE_BODY .= "<b>Email:</b> ".$_POST["email"]."<br/><br/>";
        $MESSAGE_BODY .= "       ".nl2br($_POST["comment"])."<br/>";
        mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure");
        ?>

        <div class="success" style="height:60px;">
            <b><?=$row_user['name']?>, Your message was sent!</b> <br/>
            A member of our team will contact you soon.
        </div>
    <?php
    }

    if($error_message == 1){ ?> 
        <form action="me.html" method="post">
            <input name="name" type="hidden" value="<?=$row_user['name']?>" id="name" size="32"> &nbsp;
            <input name="email" type="hidden" value="<?=$row_user['email']?>" id="email" size="32"> <br/>
            <textarea name="comment" cols="45" rows="6" id="comment" class="input" style="width:90%"></textarea><br/>
            <input class="submit" type="submit" name="Submit" value="Send">
        </form>
        <?=$er_msg?>
    <?
    }
} else {
?>
    <form action="me.html" method="post">
        <input name="name" type="hidden" value="<?=$row_user['name']?>" id="name" size="32"> &nbsp;
        <input name="email" type="hidden" value="<?=$row_user['email']?>" id="email" size="32"> <br/>
        <textarea name="comment" cols="45" rows="6" id="comment" class="input" style="width:90%"></textarea><br/>
        <input class="submit" type="submit" name="Submit" value="Send">

    </form> 
<?php
};
?>

【问题讨论】:

  • 我们能看到你在哪里调用电子邮件脚本吗?
  • 我贴的代码里都有
  • 以上所有代码都在同一个文件中?
  • 是的,它是一个 .php 文件。请让我知道您对如何消除我所描述的错误的看法

标签: php html mysql forms


【解决方案1】:

好吧,我认为这是一个小错误,您会因为错误计数器标志太多而感到困惑。

尝试改变这个:

if($error_message == 0){

到:

if($error_message == 0 && $row_user['district'] != NULL){

【讨论】:

  • 现在第二种形式已经完全消失了:)
  • 如果我将括号移到
  • @KlaussGekker 对不起,我很抱歉,请再次检查已编辑的两行。
  • 另外你为什么在&lt;/form&gt; &lt;?=$er_msg?&gt; &lt;? } 有一个额外的}?我似乎找不到它的父 if 标签。
  • @KlaussGekker 抱歉,我无法理解最后一次编辑,它毫无意义,所以我将其删除。还有你的&lt;form action="me.html" method="post"&gt; 是不是加载不正确?
猜你喜欢
  • 2011-12-02
  • 2014-10-24
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2021-03-07
  • 2012-09-08
相关资源
最近更新 更多