【问题标题】:WEBPAGE loads wrong after form_validation set_Rules codeigniterWEBPAGE 在 form_validation set_Rules codeigniter 之后加载错误
【发布时间】:2012-12-08 00:06:54
【问题描述】:

可以在form_validation中set_rules之后,是这样的:

$this->form_validation->set_rules('empfact', 'Nome da Empresa','trim|required|xss_clean');

此操作修改我的网页布局?这有可能吗?

因为我遇到了问题,并且在此操作(set_rules)之后出现问题。

问题是:在我提交表单和 set_rules 后,我的网页加载时页面顶部有一个空白区域,高度为 +/- 10 像素。

另外:在 IE 中(仅在 IE 中)执行此操作后,我的网页加载时没有一些图像并左对齐。

有什么想法吗?

表单控制器

<?php

class Form extends CI_Controller {

function __construct()
{
    parent::__construct();
}

function index()
{

    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|matches[emailconf]|callback_value_email|xss_clean');
$this->form_validation->set_rules('emailconf', 'Confirmação de Email', 'trim|required|xss_clean');
    $this->form_validation->set_rules('passwd', 'Password', 'trim|required|matches[passconf]|xss_clean');
    $this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required|xss_clean');
    $this->form_validation->set_rules('empfact', 'Nome da Empresa', 'trim|required|xss_clean');
    $this->form_validation->set_rules('contr', 'Nº Contribuinte', 'trim|required|xss_clean');
    $this->form_validation->set_rules('nome', 'Nome', 'trim|required|xss_clean');
    $this->form_validation->set_rules('apelido', 'Apelido', 'trim|required|xss_clean');
    $this->form_validation->set_rules('morada', 'Morada', 'trim|required|xss_clean');
    $this->form_validation->set_rules('codpostal', 'Código Postal', 'trim|required|xss_clean');
    $this->form_validation->set_rules('localidade', 'Localidade', 'trim|required|xss_clean');
    $this->form_validation->set_rules('telefone', 'Telefone', 'trim|required|xss_clean');
    $this->form_validation->set_rules('telemovel', 'Telemóvel', 'trim|required|xss_clean');
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('header');
        $this->load->view('myform');
        $this->load->view('footer');
    }
    else
    {
        $this->load->view('header');
        $this->load->view('formsuccess');
        $this->load->view('footer');
    }
}

public function value_email($str)
{
    $this->load->model('carfinder_model');

    // Validate exists
    $result = $this->carfinder_model->confirmExistence('email', $str);

    // Now we verify the result
    if(! $result)
    {
            return TRUE;
        }
        else
        {
            $this->form_validation->set_message('value_email', 'O e-mail escolhido já está registado');
            return FALSE;
        }
    }   
}
?> 

我的表单视图

<!-- content -->
<section id="content">
<div class="wrapper">
    <div class="indent-bot-12">
        <h2 class="indent-bot-2">Registe-se agora no CarFinder-PRO.pt</h2>
        <ul class="list-box">
            <li>
                <h3 class="indent-bot-7">Para utilizar os serviços CarFinder-PRO.pt, é necessário registar-se. O registo permite-lhe aceder à listagem dos veículos, reservá-los e encomendá-los. O registo é rápido e gratuito.</h3>
                <p class="indent-bot-15">*O registo é exclusivo a comerciantes profissionais. Após o registo a sua conta só será ativada depois de passar o processo de validação. Todos os campos são de preenchimento obrigatório.</p>
            </li>
            <?php if(validation_errors())
            {
                echo '<li>';
                    echo '<div class="val-errors">';
                            echo '<div class="val-image">';
                                echo '<img src="../../images/stopp.png" alt="" />';
                            echo '</div>';
                            echo '<div class="val-text">';
                                echo validation_errors();
                            echo '</div>';
                    echo '</div>';
                echo '</li>';
            }?>
            <li>
                <?php echo form_open('form'); ?>
                <p class="indent-bot-15">*Dados de Acesso</p>


                    <b><label for="email"><?php if(form_error('email')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Email</label></b>
                    <input type="text" name="email" value="<?php if(! form_error('email')) { echo set_value('email'); } ?>" size="40" />
                    <br />

                    <b><label for="emailconf"><?php if(form_error('email')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Confirmar Email</label></b>
                    <input type="text" name="emailconf" value="<?php if(! form_error('email')) { echo set_value('emailconf'); } ?>" size="40" />
                    <br />
                    <!-- <h5>Username</h5>
                    <php echo form_error('username'); ?>
                    <input type="password" name="username" value="<php echo set_value('username'); ?>" onfocus='this.value="";' onblur='if (this.value=="") this.value = "E-mail:";' size="50" /> -->

                    <b><label for="passwd"><?php if(form_error('passwd')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Password</label></b>
                    <input type="password" name="passwd" value autocomplete="off" size="25" />
                    <br />

                    <b><label for="passconf"><?php if(form_error('passwd')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Confirmar Password</label></b>
                    <input type="password" name="passconf" value autocomplete="off" size="25" />
                    <br />
            </li>
            <li>
            <p class="indent-bot-15">*Dados Pessoais</p>
                    <b><label for="empfact"><?php if(form_error('empfact')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Nome da Empresa</label></b>
                    <input type="text" name="empfact" value="<?php if(! form_error('empfact')) { echo set_value('empfact'); } ?>" size="40" />
                    <br />

                    <b><label for="contr"><?php if(form_error('contr')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Nº Contribuinte</label></b>
                    <input type="text" name="contr" value="<?php if(! form_error('contr')) { echo set_value('contr'); } ?>" size="25" />
                    <br />

                    <b><label for="nome"><?php if(form_error('nome')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Nome</label></b>
                    <input type="text" name="nome" value="<?php if(! form_error('nome')) { echo set_value('nome'); } ?>" size="40" />
                    <br />

                    <b><label for="apelido"><?php if(form_error('apelido')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Apelido</label></b>
                    <input type="text" name="apelido" value="<?php if(! form_error('apelido')) { echo set_value('apelido'); } ?>" size="40" />
                    <br />

                    <b><label for="morada"><?php if(form_error('morada')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Morada</label></b>
                    <input type="text" name="morada" value="<?php if(! form_error('morada')) { echo set_value('morada'); } ?>" size="40" />
                    <br />

                    <b><label for="codpostal"><?php if(form_error('codpostal')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Código Postal</label></b>
                    <input type="text" name="codpostal" value="<?php if(! form_error('codpostal')) { echo set_value('codpostal'); } ?>" size="40" />
                    <br />

                    <b><label for="localidade"><?php if(form_error('localidade')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Localidade</label></b>
                    <input type="text" name="localidade" value="<?php if(! form_error('localidade')) { echo set_value('localidade'); } ?>" size="40" />
                    <br />

                    <b><label for="telefone"><?php if(form_error('telefone')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Telefone</label></b>
                    <input type="text" name="telefone" value="<?php if(! form_error('telefone')) { echo set_value('telefone'); } ?>" size="25" />
                    <br />

                    <b><label for="telemovel"><?php if(form_error('telemovel')) { echo '<div class="imgset"><img src="../../images/markerred.jpg" alt="" /></div>'; } ?> Telemóvel</label></b>
                    <input type="text" name="telemovel" value="<?php if(! form_error('telemovel')) { echo set_value('telemovel'); } ?>" size="25" />
                    <br />

                <br /><br />*Ao clicar no botão Registar, declara que aceita as <a href="#">Condições Gerais de Utilização</a> da CarFinder bem como os seus <a href="#">Termos e Condições</a>.
                <br /><br />
                <div><input class="button-registo" type="submit" value="Registar" /></div>
                <br />
                </form>
            </li>
        </ul>
    </div>
</div>

【问题讨论】:

  • 你真的在再次显示页面之前运行表单验证吗?如果是,验证是否失败?无论如何,您是否在验证后不加载其他视图?最后,您是否尝试过使用 Firebug 检查导致 10 像素间隙的原因?
  • 是的,我之前运行过 form_validation。如果我重新加载表单视图是因为 form_validation 失败。我加载页眉视图表单视图和页脚视图
  • 我无法理解 firebug 是什么导致了 10px 的差距,但很奇怪,因为 firebug 说 内:O
  • 你能显示更多代码吗?
  • Firebug 在 之后显示没有任何内容的白线,但我不知道这条线是什么

标签: php codeigniter validation


【解决方案1】:

终于,我找到了问题所在。 这是一个非常愚蠢的问题,但也许这个 POST 将来对其他程序员有用。

我选择在 NOTEPAD++ 中以 UTF-8 进行文本编码(标准是 ANSI)

现在一切正常,

所有。

【讨论】:

  • 我认为这将是一个问题,但直到今天才看到你的代码。整理得很好。
【解决方案2】:

也许你可以留下一个空的“div”来保存这样的视图中的错误:

<div class="container">
    <?php echo form_error('empfact','<div class="error">','</div>'); ?>
</div>

【讨论】:

  • 也许你没有理解我的问题,或者我没有解释清楚。在我的视图中显示表单错误没有任何问题。我的问题是关于 form_validation 和 set_rules 影响我的布局的方式。
  • 例如,在我的表单中,输入字段的高度为:20px;提交表单并重新加载表单后,输入的高度变为默认值。
  • 我认为只是显示附近输入的“错误”会影响页面。因此您可以在错误位置预先指定样式。
  • 即使我没有在页面中显示错误,当我在控制器中执行 set_rules 时布局也会发生变化
  • 很奇怪,我提交表单后,如果我不设置规则,一切正常,没有错误,但另一方面如果我在form_Validation中设置规则,网页布局就会出错即使我没有在屏幕上显示任何错误,即使我评论了 validation_errors();行号
【解决方案3】:

我相信你会在你的 CSS 中找到答案/问题。

您还将根据表单(myform)是否经过验证来加载两个不同的视图。因此,您实际上并没有在提交表单时重新加载,而是在加载新视图(formsuccess),并且可能会引入不同的元素嵌套、CSS 等。

通过仅加载一个视图 (myform) 来调试您的页面。暂时关闭条件语句,然后担心 myform。 CodeIgniter 中的表单验证可以通过一个视图来完成。这就是为什么用户手册建议那些内联 php 函数调用,我在你的标记中看到。尝试让该页面正常工作。然后担心转储到“成功”页面。

【讨论】:

  • 感谢您的评论。我已经尝试取下所有 CSS 并且问题仍然存在。真是个奇怪的问题。如果我只加载 myForm 视图,我无法检测到任何问题,因为我的问题出在页面顶部并且输入字段会改变高度(但当然,如果我不使用 css 并且没有把它们放在不同的地方)
  • 这是一个非常奇怪的问题,最大的问题是我不知道应该去哪里解决它。我已经尝试仅加载 1 个视图,尝试删除所有 CSS,尝试加载 myForm 视图而不使用任何 form_error() 函数。我没有任何问题的唯一情况是当我在表单控制器中评论所有 set_rules
  • 此外,当 form_validation 为 TRUE 时,我没有任何问题。所以你可以忘记表单成功的那部分。
  • 您最后的评论似乎是答案...如果 form_validation==true,则不显示错误,并显示 formSuccess。因此,很可能是您的 if(form_error('email')) { echo '&lt;div class="imgset"&gt;... 的 CSS 导致了问题(特别是 .imgset,或者您可能将 _error &lt;div&gt;s 包装在来自 CodeIgniter 错误函数的附加 &lt;p&gt; 标记中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2016-04-30
  • 2011-10-06
  • 2021-12-08
  • 2016-09-22
  • 2017-02-22
相关资源
最近更新 更多