【问题标题】:Use CodeIgniter (MVC) to Connect Form to Database使用 CodeIgniter (MVC) 将表单连接到数据库
【发布时间】:2011-11-21 03:40:23
【问题描述】:

我的任务是使用 CodeIgniter(一个 MVC 框架)并将视图中的表单连接到数据库。我已经完成了大部分代码,并且我相信其中大部分是正确的。我终于得到了要加载的视图页面(表单),但我无法加载控制器中的Register 函数。有人在我的代码中看到任何错误吗?这对我有很大帮助。

form.php(视图):

      <!DOCTYPE html>
 <html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title><?php //echo $title;?></title>
</head>
<body>

    <h1>Register for a Dorm</h1>
    <form method="post"        
    action="http://ispace.ci.fsu.edu/~trm07/assignment4/index.php/controller/register/">

        <fieldset>

            <label>First Name</label>
            <input type="text" name="first_name"/>

            <label>Last Name</label>
            <input type="text" name="last_name"/>
            </fieldset>

        <label>Undergraduate Level:</label>

        <?php

        //dropdown list for level
    echo '<select name="level">';
    $level = array('Freshman','Sophomore', 'Junior', 'Senior');
        foreach ($level as $selection) {
        echo '<option value="'.$selection.'">'.$selection.'</option>';
    }
echo '</select>';
    ?>

        <label>Gender:</label>

        <?php

        //dropdown list for gender
        echo '<select name="gender">';
    $gender = array('Male','Female');
        foreach ($gender as $gend_selection) {
        echo '<option
   value="'.$gend_selection.'">'.$gend_selection.'</option>';
    }
echo '</select>';


        //radio buttons for dorms



        $requested_dorm = array('Landis','Salley','DeGraff','Cawthon','Reynolds');

        echo("<fieldset><legend>Requested Dorm</legend>");

        foreach ($requested_dorm as $dorm_names){
            echo "<input type='radio' name='dorm_name' value='$dorm_names' /> 
     $dorm_names <br />";

        }

         ?>

        <br><input type="submit" value="Register">


    </body>
 </html>



                 controller.php


 <?php 

 class Controller extends CI_Controller {

 function index()
 {   //$data['title'] = "Register for a Dorm";
    $this->load->view('form');
 }

  function show()
 {
    $this->load->model('model');

    $dorms = $this->model->get_dorms();

    foreach($dorms as $dorm){
        if($dorm['dorm_name'] == $dorm_name)
            $chosen_dorm = $dorm['dorm_name'];
    }

  }


   function register()
  {
   $this->load->library('form_validation');           

   $view_data = array('message' => '');

   //If the form was submitted, process it
   if (count($_POST) > 0)
    { $dorm_name = $this->input->post('dorm_name');
      $first_name = $this->input->post('first_name');
      $last_name = $this->input->post('last_name');
      $level = $this->input->post('level');
      $gender = $this->input->post('gender');

    {          
      //Validate the input

      $this->form_validation->set_rules('first_name', 'First Name',
   'required|strip_tags|trim');
      $this->form_validation->set_rules('last_name', 'Last Name',  
   'required|strip_tags|trim');

      $val_result = $this->form_validation->run();

      //Add the data to the database
      if ($val_result == TRUE)
      {
        $this->load->model('model');
        $db_result = $this->model->add_student_to_dorm($_POST['dorm_name'],  
  $_POST['first_name'], $_POST['last_name'], $_POST['level'], $_POST['gender']);

        if ($db_result == TRUE)
        {
          $view_data['message'] = "Added student to the dorm!";  
          //$view_data['message'] = "Added" . "$_POST['first_name']" . " " . 
 "$_POST['last_name']". " to " . "$_POST['dorm_name']" .  " hall.";
        }
        else
        {
          $view_data['message'] = "An error occured adding the student to the dorm!";
        }
      }
      }



      $this->load->view('form',$view_data);
  //$this->load->model('model');
  //$this->model->get_students();
   }
  } 
 }
 ?>

model.php:

 <?php

  class Model extends CI_Model {

   //function to take student info posted from form, and adds to database

   public function add_student_to_dorm()
   {
    $this->load->database($dorm_name, $first_name, $last_name, $level, $gender);

    $data = array
    (
        'dorm_name' =>$dorm_name,
        'student_fname' => $first_name,
        'student_lname' => $last_name,
        'student_level' => $level,
        'student_gender' => $gender,

    );

    $result = $this->db->insert('student', $data);

    return $result;
    }

     //get dorm table results in an array from database, return its rows

      public function get_dorms()
   {
   $this->load->database();     
   $dorms = $this->db->get('dorm');
   $rows = $dorms->result_array();
   return $rows;

    }

   //get student table results in an array from database, return its rows
    public function get_students()
   {
    $this->load->database();     
    $students = $this->db->get('student');
    $stu_rows = $students->result_array();
    return $stu_rows;

    }

    }

   ?>

【问题讨论】:

  • 在视图页面中调用 register() 时遇到任何错误吗?

标签: php database forms model-view-controller codeigniter


【解决方案1】:

在这里,您在控制器页面中使用参数调用了add_student_to_dorm() 函数,但在模型中您没有采用该参数

$db_result = $this->newmodel->add_student_to_dorm($_POST['dorm_name'],  
      $_POST['first_name'], $_POST['last_name'], $_POST['level'], $_POST['gender']);

这是控制器中的功能,但您的模型只有 public function add_student_to_dorm()没有变量所以改变 public function add_student_to_dorm()

public function add_student_to_dorm($dorm_name, $first_name, $last_name, $level, $gender)

也要改变

$this-&gt;load-&gt;database($dorm_name, $first_name, $last_name, $level, $gender);

$this-&gt;load-&gt;database(); 在模型中然后它正在工作

【讨论】:

  • 谢谢!这是一个巨大的错误,但是当我的表单将我重定向到控制器中的 register() 函数时,它给我留下了一个白页,并且什么也不加载。还有其他想法吗?
  • 可以插入数据库吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多