Codeigniter $ _SERVER ['PHP_SELF'] не работает в представлениях - PullRequest
0 голосов
/ 22 января 2012

У меня есть диалоговая форма.

 <div id="dialog-form" title="Create new Admin">
<p class="validateTips">All form fields are required.</p>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<fieldset>
    <label for="name">Name</label>
    <input type="text" name="name" id="name" value="" class="text ui-widget-content ui-corner-all" />
    <label for="role">Role</label>
    <select name="user_role" class="select ui-widget-content ui-corner-all" >
    <option value="administrator">Administrator</option>
    <option value="visitor">Visitor</option>
    <option value="Helper">Helper</option>
    </select>
    <label for="email">Email</label>
    <input type="text" name="login_email_admin" id="login_email_admin" value="" class="text ui-widget-content ui-corner-all" />
    <label for="Passoword">Password</label>
    <input type="passowrd" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" />
    <label for="Passoword">Re-Enter Password</label>
    <input type="password" name="password_2" id="password_2" value="" class="text ui-widget-content ui-corner-all" />

    <input style="margin-top:15px;" type="submit" name="add_admin" value="Add New Admin">
</fieldset>
</form>

Я использую следующий php-код в представлениях, чтобы получить данные из этой диалоговой формы, когда она будет отправлена ​​..

 <?php 

    if($_POST['add_admin'])
    {

    $this->user_role=$this->input->post('name');
    $this->user_role=$this->input->post('user_role');
    $this->login_email_admin=$this->input->post('login_email_admin');
    $this->password=$this->input->post('password');

    $this->load->database();
    $this->db->insert('admin_user',$this);
    }

?>

Но это не вставка в db.Эта проблема действительно застряла у меня. Я вызываю саму страницу при отправке формы, я не знаю, по какой причине она не работает. Кроме того, есть ли способ, которым я избавлюсь от использования моделей, вместо этого я могу делать все операции с БД в представлениях?

Ответы [ 4 ]

4 голосов
/ 22 января 2012

Добавьте echo для печати переменной;)

 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" 
       enctype="multipart/form-data">
2 голосов
/ 22 января 2012

Этот код неверен во многих аспектах:

if($_POST['add_admin'])
    {

    $this->user_role=$this->input->post('name');
    $this->user_role=$this->input->post('user_role');
    $this->login_email_admin=$this->input->post('login_email_admin');
    $this->password=$this->input->post('password');

    $this->load->database();
    $this->db->insert('admin_user',$this);
    }
  1. Вы перезаписываете свойство user_role;
  2. вы передаете всю ссылку $this, которая содержитнамного больше, чем эти свойства
  3. , это не то, как вы делаете вставку с Active Record!Имена полей должны передаваться как массив, а не как свойства объекта

Должно быть что-то вроде:

$field['user'] = $this->input->post('name'); //or whatever is the FIELD NAME
$field['user_role'] = $this->input->post('user_role');
$field['login_email_admin'] = $this->input->post('login_email_admin');
$field['password'] = $this->input->post('password');
$this->load->database();
$this->db->insert('admin_user',$field);

См. вставить главу в руководстве для справки.

Кроме того, я не знаю, почему вы хотите сделать это внутри представления, вы должны выполнить вставку в модель, а проверка отправляемой формы должна быть выполнена в контроллере (в идеале вы могли быиспользуйте класс проверки формы, который очень удобен для этой задачи.

Вы используете платформу с архитектурой MVC, но в этом фрагменте кода вы почти ничего не получаете от обоих ...

1 голос
/ 22 января 2012

1) Вам нужно передать $ _POST вашему представлению в контроллере ...

$this->load->view("MyView",array('_POST'=>$_POST));

2) Вам не понадобится PHP, чтобы ваше решение отправляло сообщения в себя

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

Браузер по умолчанию, когда действие пустое равно self.Альтернативное (более абсолютное) решение также может быть $_SERVER['REQUEST_URI']

Если вы хотите получить больше CI, вы можете сделать это встроенным (с созданным экземпляром класса валидации и включенным помощником формы)

<?php echo form_open(''); ?>

Кроме того, $ _SERVER ['PHP_SELF'] не будет работать, потому что вы работаете с index.php, ваш URL контролируется с помощью .htaccess.

0 голосов
/ 15 мая 2013

На этот вопрос уже дан ответ, но я хочу указать, что form_open () без , любые аргументы будут делать именно то, что вы хотите (создание действия = "").

Таким образом, вы можете просто использовать приведенный ниже фрагмент:

<?php echo form_open(); ?>

Вот ссылка из источника CodeIgniter:

function form_open($action = '', $attributes = '', $hidden = array())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...