не в состоянии получить форму сообщения отправить значения в codeigniter - PullRequest
5 голосов
/ 22 июля 2011

Я пытался отправить простую форму, но я не могу получить значения формы на контроллере, используя $this->input->post, а также $_POST[] методы.Моя часть просмотра -

<html>
<head>
    <title> Feedback page</title>       
</head>
<body>

    <?php echo form_open('feedback/save'); ?>       
    <p>
        <label>name: </label>
        <?php echo form_input('name'); ?>

    </p>
    <p>
    <label>Email: </label>
        <?php echo form_input('email'); ?>
    </p>
    <p>
    <label>Feedback: </label>
        <?php echo form_textarea('feedback'); ?>
    </p>
    <p>
        <?php echo form_submit('submit','Submit'); ?>
    </p>

    <?php echo form_close(); ?>

</body> 

</html>

, а часть контроллера -

<?php
class Feedback extends CI_Controller {

function __construct() {
    parent::__construct();      
    $this->load->model("MFeedback");

}
function index() {

    $this->load->view('home/feedback_view.php');
    //print "loaded";


}

function save() {
    print "called";     
    print_r($this->input); 
    $name = $this->input->post('uname');
    $email = $this->input->post('email');
    $feedback = $this->input->post('feedback');
    print $name . $email . $feedback;
    $this->index();
}

}
?>

Я не уверен, что здесь пошло не так или есть какие-либо настройки конфигурации, которые мне нужно посмотреть .?

Ответы [ 9 ]

6 голосов
/ 23 июля 2011

Я обнаружил проблему. Это на самом деле с правилом перезаписи. Убедитесь, что у вас есть правило перезаписи, например

</p> <pre><code>RewriteEngine On RewriteRule ^(application) - [F,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php/$0 [PT,L]

в корневой папке codeigniter.

4 голосов
/ 22 июля 2011

Взгляните на это: http://codeigniter.com/user_guide/libraries/form_validation.html#validationrules

У меня была похожая проблема, когда я начал использовать CI.Вам необходимо установить хотя бы одно правило проверки для формы, а затем проверить, соответствует ли отправленная форма этому правилу.Затем вы можете получить доступ к отправленным данным формы, как вы делали выше.

Прошло много времени с тех пор, как я использовал CI, но что-то вроде этого должно решить вашу проблему: (взято по ссылке выше)

    $this->load->library('form_validation');

    $this->form_validation->set_rules('uname', 'Username', 'required');
    $this->form_validation->set_rules('email', 'Password', 'required');
    $this->form_validation->set_rules('feedback', 'Feedback', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required');

    if ($this->form_validation->run() == FALSE)
    {
                    // Here is where you do stuff when the submitted form is invalid.
        $this->load->view('myform');
    }
    else
    {
                    // Here is where you do stuff when the submitted form is valid.
            print "called";     
            print_r($this->input); 
            $name = $this->input->post('uname');
            $email = $this->input->post('email');
            $feedback = $this->input->post('feedback');
            print $name . $email . $feedback;
            $this->index();

    }

Надеюсь, что в чем-то вам поможет ..:)

3 голосов
/ 10 февраля 2014

Ваш URL-адрес должен совпадать с config->config.php->$config['base_url'] если ваш URL-адрес, как

http://www.test.com

тогда ваш конфи должен быть

$config['base_url'] =  'http://www.test.com/';
1 голос
/ 03 сентября 2013

Использование form action='domain/index.php?/controller/function name/parameter1/parameter2'

Например, ваш домен abc.com, контроллер get, имя функции value, а параметр, передаваемый в функции: a и b затем просто напишите действие формы следующим образом.

<form action='http:/abc.com/index.php?/get/value/a/b' method='post' >

Я решил свою проблему таким образом. Надеюсь, это сработает для вас. Спасибо

1 голос
/ 15 февраля 2012

Спасибо за идеи, что я решил свои проблемы.У меня та же проблема.Мой код хорошо работал в WAMP, но когда я перешел в LAMP, у меня возникли всевозможные проблемы с проводной связью, с которыми я никогда не сталкивался, и отсутствие получения значения формы в форме сообщения было одной из них.

Согласно предложению выше:

Я использовал form_open(index.php/controller/method) вместо form_open(controller/method), и это сработало сразу.

Однако я удалил index.php, и он не отображается в адресной строке.Как я уже сказал, это проводной ...

1 голос
/ 06 февраля 2012

Я столкнулся с той же проблемой, что и вы, поскольку последние полчаса не могли заставить что-либо работать.Я попробовал ваше решение, оно не помогло.Но вы были правы, это связано с маршрутизацией.

Я также передавал другие переменные моему действию, например:

domain/controller/action/value1/value2

, когда моя форма отправляла данные в:

domain/index.php/controller/action/value1/value2

это решило проблему.Я предполагаю, что если вы передадите значения в конце, переменные записи не будут работать должным образом.Я знаю, что это должно работать, и я думаю, что это тоже хорошоПодумайте, проблема в правильной настройке .htaccess.

0 голосов
/ 28 июня 2016
$data = array('id' => 'email',
 'name' => 'email',
 'class' => 'form-control');

echo form_input($data);

Просто быстрое упоминание, что если вы используете массив для настройки своих входов и т. Д., Не забудьте включить имя => 'your_desired_post_variable_name' в ваш массив, так как это была моя ошибка, я дал ему простоидентификатор и интересно, почему мой массив POST был пустым!Не делай то же самое!;)

0 голосов
/ 03 мая 2014

Ну, я столкнулся с той же проблемой, и следующие дополнения к .htaccess помогли решить мою проблему.

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
0 голосов
/ 22 июля 2011

Во-первых, по вашему мнению, вы указали имя вашего единственного входа, равное name, в вашем контроллере вы ищете в сообщении uname.

Во-вторых, я непомните, если CodeIgniter делает то же самое с $_POST, но он определенно уничтожает массив $_GET.Если вам нужен ассоциативный массив всех почтовых входов, вы можете вызвать это:

$this->input->post();

В-третьих, в очень очень редком случае ваши входы могут быть заблокированы XSS Filtering , вы можетечтобы не допустить этого, вызовите это так: (только для целей проверки, чтобы понять, что не так, не используйте это в работе) :

$this->input->post(NULL, FALSE);

Если что-то не так, эти вызовыreturn FALSE, вы должны проверить это с помощью оператора ===, так как он будет совпадать только с FALSE, где == будет совпадать и с NULL.

В-четвертых, вы должны быстро протестировать, используяпростая HTML-форма, похоже, что вы строите свою форму правильно с помощью помощника по формам , но вам не помешает использовать простую HTML-форму для быстрого тестирования.

Кроме этого, выВам нужно будет предоставить больше информации о вашей среде / конфигурации / сгенерированном html / etc ... для нас, чтобы выяснить.Вы действительно не дали нам много работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...