Frage Wie man ein Formular mit CodeIgniter bearbeitet


Ich bin neu in CodeIgniter. Ich muss ein Formular bearbeiten. Ich habe eine form.html Seite im Blick

<html>
  <head>
    <title>Search</title>
  </head>
  <body>
    <form action="search">
      <input type="text" name="search" value="" size="50" />
      <div>
        <input type="submit" value="Submit" />
      </div>
    </form>
  </body>
</html>

und Formular-Controller

class Form extends Controller {

  function Form() {
    parent::Controller();   
  }

  function index() {    
    $this->load->view('form');
  }

}

und ich habe eine View-Datei search.php, aber wenn es verarbeitet wird, zeigt die Seite nicht gefunden ...


13
2018-02-17 08:43


Ursprung


Antworten:


Im M.odel V.iew C.ontroller Setups wie CodeIgniter die Ansichten sind Benutzeroberflächenelemente. Sie sollten keine Ergebnisse analysieren.

Wenn ich mich nicht täusche, möchte ich Daten von Ihnen weitergeben www.yoursite.com/index.php/form zu www.yoursite.com/index.php/search

In unstrukturierten PHP haben Sie vielleicht ein form.html mit einer Formaktion von search.php. Ein Benutzer würde zu navigieren yoursite.com/form.html, die anrufen würde yoursite.com/search.php, auf die möglicherweise umgeleitet wird yoursite.com/results.php.

In CodeIgniter (und, soweit ich es verstehe, in jedem MVC-System, unabhängig von der Sprache) Regler, Form ruft eine Funktion auf, die das lädt form.html  Aussicht  in sich selbst und dann läuft es. Das Aussicht generiert den Code (in der Regel HTML, aber nicht notwendigerweise), mit dem der Benutzer interagiert. Wenn der Benutzer eine Anforderung stellt, die von der View nicht verarbeitet werden kann (Anforderungen für mehr Daten oder eine andere Seite), leitet er diese Anforderung an den Controller zurück, der mehr Daten oder eine andere Ansicht lädt.

Mit anderen Worten, die Ansicht bestimmt, wie die Daten angezeigt werden. Der Controller ordnet Anforderungen Ansichten zu.

Es wird etwas komplizierter, wenn komplexe und / oder sich ändernde Daten in einer Ansicht angezeigt werden sollen. Um das zu erhalten Trennung von Bedenken dass MVC erfordert CodeIgniter bietet Ihnen auch Modelle.

Modelle sind für den schwierigsten Teil einer Webanwendung verantwortlich - den Datenfluss. Sie enthalten Methoden zum Lesen von Daten, Schreiben von Daten und vor allem Methoden zum Sicherstellen der Datenintegrität. Mit anderen Worten sollten Modelle:

  • Stellen Sie sicher, dass die Daten im richtigen Format vorliegen.
  • Stellen Sie sicher, dass die Daten nichts (böswilliges oder sonstiges) enthalten, das die Umgebung zerstören könnte, für die sie bestimmt ist.
  • Verfügen über Methoden für C.essen, R.lesen, U.pdating und D.leating Daten innerhalb der oben genannten Einschränkungen.

Akelos hat eine gute Grafik, die die Komponenten von MVC auslegt:

Anfrage - Antwort http://svn.akelos.org/trunk/docs/images/akelos_mvc.png

Das heißt, die einfachste (lies "einfachste", nicht "am besten erweiterbare") Art zu erreichen, was du machen willst ist:

function Form()
{
    parent::Controller();   
}

function index()
{   
        $this->load->view('form');
}

function search()
{
        $term = $this->input->post('search');
        /*
            In order for this to work you will need to 
            change the method on your form.
            (Since you do not specify a method in your form, 
            it will default to the *get* method -- and CodeIgniter
            destroys the $_GET variable unless you change its 
            default settings.)

            The *action* your form needs to have is
            index.php/form/search/
        */

        // Operate on your search data here.
        // One possible way to do this:
        $this->load->model('search_model');
        $results_from_search = $this->search->find_data($term);

        // Make sure your model properly escapes incoming data.
        $this->load->view('results', $results_from_search);
}

32
2018-02-18 01:55



View-Datei ist nutzlos ohne den Controller zu laden und anzuzeigen. Sie müssen einen Controller erstellen, um die Formulardaten zu empfangen, zu verarbeiten und das Prozessergebnis anzuzeigen.

Sie können einen Formularhelfer verwenden, um die offenen Tags des Formulars sowie die close-Tags festzulegen:

<?php echo form_open('form/search'); ?>
<input type="text" name="search" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
<?php echo form_close(); ?>

Ohne form helper zu verwenden, können Sie es immer noch so schreiben:

<form action="<?php echo site_url('form/search'); ?>">

Dann füge das hinzu search Methode in form Regler:

function search()
{
  //get form field
  $search = $this->input->post('search');
  // do stuffs here
  //...
}

Denken Sie daran, dass CI Ihnen nur bei der grundlegenden Code-Organisation behilflich ist und eine hilfreiche Bibliothek und einen Helfer zur Verfügung stellt. Aber Sie müssen immer noch den Algorithmus des Prozesses in Ihrer Site schreiben.

Vergessen Sie nicht, das mitgelieferte Benutzerhandbuch im heruntergeladenen Codeigniter-Paket zu lesen. Sie können viele Sachen aus dem Beispiel dort lernen. Zögern Sie nicht Dinge zu fragen, die Sie hier nicht wissen, viele Mitglieder von stackoverflow werden Ihnen helfen.


10
2018-02-17 10:26



Dies ist die Formularvalidierung und die Übergabe im Controller Meine ganze Controller-Klasse

    class MY_Controller extends CI_Controller {

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

            $this->load->library(array('session','form_validation'));
            $this->load->helper(array('form', 'url', 'date'));

            //$this->load->config('app', TRUE);

            //$this->data['app'] = $this->config->item('app');


            }
    }

    <?php

    if (!defined('BASEPATH'))
        exit('No direct script access allowed');

    class Article extends MY_Controller {

        function __construct() {
            parent::__construct();
            $this->load->model('article_model');
        }

        public function index() {

            $data['allArticles']    =   $this->article_model->getAll(); 

            $data['content']        =   $this->load->view('article', $data, true);
            $this->load->view('layout', $data);

        }

        public function displayAll() {

            $data['allArticles']    =   $this->article_model->getAll(); 

            $data['content']        =   $this->load->view('displayAllArticles', $data, true);
            $this->load->view('layout', $data);

        }

        public function displayArticle($id) {

            $data['article']        =   $this->article_model->read($id); 

            $data['articleId']      =   $id;

            $data['comment']        =   $this->load->view('addComment', $data, true);

            $data['content']        =   $this->load->view('displayArticle', $data, true);


            $this->load->view('layout', $data);

        }

        public function add() {

            $this->form_validation->set_message('required', '%s is required');
            $this->form_validation->set_rules('title', 'Title', 'required|xss_clean');
            $this->form_validation->set_rules('description', 'Description type', 'required|xss_clean');

            $this->form_validation->set_error_delimiters('<p class="alert alert-danger"><a class="close" data-dismiss="alert" href="#">&times;</a>', '</p>');


            if ($this->form_validation->run() == TRUE) {

                 $article = array(
                        'title'         => $this->input->post('title'),
                        'description'   => $this->input->post('description'),
                        'created'       => date("Y-m-d H:i:s")
                  );

                 $this->article_model->create($article);

                 redirect('article', 'refresh');


            } else {

                 $data['article'] = array(
                    'title'         => $this->input->post('title'),
                    'description'   => $this->input->post('description'),
                );

                $data['message'] = validation_errors();

                $data['content'] = $this->load->view('addArticle', $data, true);
                $this->load->view('layout', $data);
            }
        }

    }

Wir können normales HTML-Formular so verwenden.

            <?php echo $message; ?>

           <form method="post" action="article/add" id="article" >
                <div class="form-group">
                    <label for="title">Article Title</label>
                    <input type="text" class="form-control" id="title" name="title" value="<?php echo $article['title']; ?>" >
                </div>
                <div class="form-group">
                    <label for="description">Description</label>
                    <textarea class="form-control" rows="13" name="description" id="description"><?php echo $article['description']; ?></textarea>
                </div>

                <button type="submit" class="btn btn-default">Submit</button>
            </form>     
        </div>
    </div>

1
2017-08-06 05:18



Verwenden Sie in Ihrer Aktion den Codeigniter "site_url", um sicherzustellen, dass Sie auf den richtigen Ort zeigen. Die Aktion in Ihrem Beispiel wäre eher an den 'Such'-Controller als an den' Formular'-Controller gegangen.

<html>
<head>
<title>Search</title>
</head>
<body>
<form action="<?= site_url('form/process_search') ?>">
<input type="text" name="search" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>

Der Index wird nur in deinem Controller verwendet, wenn nichts anderes passiert ist. Im obigen Beispiel möchtest du also etwas ähnliches:

function Form()
{
    parent::Controller();   
}

function process_search()
{   

     print "<pre>";

     print_r($_POST);

     print "</pre>";
}

0
2018-02-17 15:17



Nettuts hat ein tolles Tutorial für CodeIgniter für Login-Formular. Folgen Sie dem Screencast und es wird Ihre Fragen klären.

http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-6-login/


0
2018-02-17 15:24



Ersetzen Sie dies <form action="search"> mit <?php echo form_open('form/search');?> und autoload.php Datei hinzufügen $autoload['helper'] = array('form');

und dann Datei nicht Datei search.php einfach fügen Sie Ihre search.php Code in Ihre Controller-Datei wie hier

class Form extends Controller {

  function Form() {
    parent::Controller();   
  }

  function index() {    
    $this->load->view('form');
  }

function search(){
//your code here
}
}

0
2017-12-03 12:32