【问题标题】:form action codeigniter does not find post data表单动作codeigniter找不到发布数据
【发布时间】:2014-04-29 09:28:42
【问题描述】:

我在 codeigniter 中遇到了表单问题。我尝试了不同的方法,但我找不到解决方案。

这是表格:

<form method="post" action="<?php echo base_url(); ?>cms/cms/newUser">
<div class="row">
    <div class="col-md-3">
        Naam:
    </div>
    <div class="col-md-9">
        <input type="text" id="naam" name="username" />
    </div>
</div>

<div class="row">
    <div class="col-md-3">
        E-mail:
    </div>
    <div class="col-md-9">
        <input type="email" name="mail" id="email" />
    </div>
</div>

<div class="row">
    <div class="col-md-3">
        Passwoord:
    </div>
    <div class="col-md-9">
        <input type="password" name="pass" id="password" />
    </div>
</div>

<div class="row">
    <div class="col-md-8 col-md-offset-2">
        <input type="submit" name="aanmaken" class="btn btn-block btn-info" value="aanmaken" />
    </div>
</div>

在我的控制器中,我处理来自表单的数据。 控制器位于 controllers/cms/cms.php

class Cms extends MY_Controller 
{
    public function newUser()
    {
        if(isset($_POST))
        {
            echo "verwerk deze data <br>";

            if(isset($_POST['username']))
            {
                echo 'naam is set!';
            }
            else {
                echo 'naam is not set!';
            }

            $naam = $_POST['username'];
            $mail = $_POST['email'];
            $pass = $_POST['password'];

            echo "naam: " . $naam . "<br>";
            echo "mail: " . $mail . "<br>";
            echo "pass: " . $pass . "<br>";

            $time = new DateTime();
            $time->setTimezone(new DateTimeZone ('Europe/Brussels'));
            $tijd = $time->format('Y-m-d H:i:s');

            include_once('application/libraries/PasswordHash.php');

            $hasher = new PasswordHash(12,false);
            $passwoord = $hasher->HashPassword($pass);

            $gebruiker = new Gebruiker();
            $gebruiker->naam = $naam;
            $gebruiker->email = $mail;
            $gebruiker->paswoord = $passwoord;
            $gebruiker->laatsteLogin = $tijd;
            $gebruiker->active = 0;

            echo "coded pas" . $passwoord . "<br>";
        }
        else 
        {
            echo "no post";
        }
    }

当我检查我的网站并填写表格时,我收到 3 个 php 错误,即我从帖子中放入变量中的值不存在。 if(isset) 函数也表示未设置变量。我不知道为什么表单操作不起作用。

我什至尝试了 codeigniter 方式,但结果相同。

$name = $this->input->post('username');

感谢您的帮助。

【问题讨论】:

  • 放:var_Dump($_POST);在 if 之前,看看里面有什么..
  • 你的 base_url() 是什么

标签: php html forms codeigniter post


【解决方案1】:
HTML:

enter code here

<form method="post" action="<?php echo site_url(); ?>/cms/cms/newUser">
<div class="row">
<div class="col-md-3">
    Naam:
</div>
<div class="col-md-9">
    <input type="text" id="naam" name="username" />
</div>

电子邮件:

<div class="row">
<div class="col-md-3">
    Passwoord:
</div>
<div class="col-md-9">
    <input type="password" name="pass" id="password" />
</div>
</div>

<div class="row">
<div class="col-md-8 col-md-offset-2">
    <input type="submit" name="aanmaken" class="btn btn-block btn-info" value="aanmaken" />
</div>
</div>

PHP:
class Cms extends MY_Controller 
{
public function newUser()
{
    if(isset($_POST))
    {
        echo "verwerk deze data <br>";

        if($this->input->post('username'))
        {
            echo 'naam is set!';
        }
        else {
            echo 'naam is not set!';
        }

        $naam = $this->input->post('username');
        $mail = $this->input->post('mail');
        $pass = $this->input->post('pass');

        echo "naam: " . $naam . "<br>";
        echo "mail: " . $mail . "<br>";
        echo "pass: " . $pass . "<br>";

        $time = new DateTime();
        $time->setTimezone(new DateTimeZone ('Europe/Brussels'));
        $tijd = $time->format('Y-m-d H:i:s');

        include_once('application/libraries/PasswordHash.php');

        $hasher = new PasswordHash(12,false);
        $passwoord = $hasher->HashPassword($pass);

        $gebruiker = new Gebruiker();
        $gebruiker->naam = $naam;
        $gebruiker->email = $mail;
        $gebruiker->paswoord = $passwoord;
        $gebruiker->laatsteLogin = $tijd;
        $gebruiker->active = 0;

        echo "coded pas" . $passwoord . "<br>";
    }
    else 
    {
        echo "no post";
    }
}

$this->input->post('') 将自动检查不需要 isset()。 $this->input->post('') 将使用名称而不是 id

【讨论】:

  • 你能解释一下为什么 site_url() 有效而 base_url() 无效吗?
【解决方案2】:

在表单标签中

<form method="post" action="<?php echo base_url(); ?>cms/cms/newUser">

cms 是控制器的名称,您已经使用了两次。试试

<form method="post" action="<?php echo base_url(); ?>cms/newUser">

【讨论】:

  • 名为 Cms 的控制器位于名为 cms 的地图中,而地图 cms 位于控制器中 -> 这就是我使用它两次的原因
【解决方案3】:

您只需要传递控制器名称/功能名称并将控制器文件保存在controller 目录中 然后用CI方式试试

<?php echo form_open("cms/newUser");?>
<?php echo form_close();?>

<form method="post" action="<?php echo base_url(); ?>cms/newUser">

否则,您需要为此使用 routing 并告诉在该路线上选择此控制器 为此,请转到 config/routes.php 并添加如下路由:-

$route['cms'] = "cms/cms";

【讨论】:

  • 并且根据它的设置方式,他可能需要在html 表单版本中包含index.php
【解决方案4】:

尝试加载表单助手并使用此代码

控制器:

$this->viewContent['form_action'] = base_url()."cms/cms/newUser"; $this->load->view('your_view_page',$this->viewContent);

视图: echo form_open($form_action);

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2016-09-04
    • 2019-08-23
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多