【问题标题】:Submit to same page with an anchor使用锚提交到同一页面
【发布时间】:2018-01-04 11:38:01
【问题描述】:

我正在尝试了解表单是如何工作的,到目前为止,我了解到我可以通过提交表单并刷新到同一页面

> action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"

然后捕获错误或没有空白输入。

但是,假设我在页面中有锚点(换句话说,如#ContactUs 之类的部分),如何使用操作刷新页面以到达该特定位置而不是返回页面顶部?

提前谢谢大家

下面是部分代码:

 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
        <h2>SEND US A MESSAGE!</h2>
        <span>We'd be happy to hear from you.</span>
        <input name="contactname" placeholder="Name" type="text" value="<?php echo $contactname;?>"/> <span class="error"> <?php echo $contactnameErr;?></span>
        <input name="contactemail" placeholder="Email" type="text" value="<?php echo $contactemail;?>" /><span class="error"> <?php echo $contactemailErr;?></span>
        <input name="contactphone" placeholder="Phone #" type="text" value="<?php echo $contactphone;?>" /><span class="error"> <?php echo $contactphoneErr;?></span>
        <input name="contactsubject" placeholder="Subject" type="text" value="<?php echo $contactsubject;?>" /><span class="error"> <?php echo $contactsubjectErr;?></span>
        <textarea name="contactmessage" placeholder="Message"><?php echo $contactmessage;?></textarea><span class="error"> <?php echo $contactmessageErr;?></span>
        <input type="submit" name="submit" value="Send" class="contact-button" />
     </form>

【问题讨论】:

    标签: php html forms


    【解决方案1】:

    例如,您应该对其进行验证

    <?php 
     if(isset($_POST['submit'])){
        //then do something
        header("Location: #contactus");
       }
    ?>
    

    所以这样即使你加载,也不给你空,也不要求你重新提交

    【讨论】:

    • 我已经有验证但没有这个标题("Location: #contactus");有回声时会带来麻烦
    • 在任何回声之前在开头使用 ob_start() 并在最后使用 ob_end_flush() ,这样可以避免标题问题,否则避免标题问题你可能不得不使用 JavaScript如果您平时不使用 JavaScript,它可能会更长,并且是一个新的学习曲线。
    • 你也可以把 ob_end_clean() 放在头部代码之前
    【解决方案2】:

    你可以使用我下面给出的 jQuery

    <?php
    
        if(isset($_POST['submit']))
        {
    
            //
            //sql query and display
            //
    
            ?>
            <script>
                $(function() {
                    $('html, body').animate({
                        scrollTop: $("#contactus").offset().top
                    }, 2000);
                 });
            </script>
            <?php
    
        }
    
        ?>
    

    【讨论】:

    • 这会跳过 htmlspecialchars() 吗?当页面刷新时,它还会发送要发布的元素吗? (如果缺少必填字段)
    • 你可以添加htmlspecialchars。它发送带有发布请求的元素
    • 我试过没用。我在我的链接specialeventsleb.com/index.php#ContactUs 中有这个,我确保 id 是正确的
    • 尝试按联系我们按钮,链接会更新,但不会转到正确的部分
    • 查看代码更新。更多信息看这里stackoverflow.com/questions/32887066/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2018-03-31
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多