试图将数据插入mySQL数据库

时间:2016-10-11 14:24:43

标签: php mysql codeigniter

我的mySQL数据库上有一个联系人列表。我的数据库中的列是name,email和phone_number。使用codeigniter。我知道将表单中的数据插入数据库所需的代码,但我无法确定将其放入代码的位置。我将下面的代码放在一个名为form.php的单独文档中,但是只要我点击提交,就会一直给我错误。因此,为什么form.php是view.php格式。

$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone_number'];

$sql = "INSERT INTO data (name, email, phone_number) VALUES ('$name', '$email', '$phone')";

Controller.php这样:

<?php

class controller extends CI_Controller
{
    public function index()
    {
        $this->load->model('model');
        $data['info'] = $this->model->getData();

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

}
?>

model.php:

<?php

    class model extends CI_Model
{

    public function getData()
    {
        $query = $this->db->get('data');

        return $query->result();
    }
}
?>

view.php:

<!DOCTYPE html>
<html>
<head>
    <title>Contact List</title>
</head>
<body>
<form action="form.php" method="post">
    <p>Name: <input type="text" name="name"></p>
    <p>Email: <input type="text" name="email"></p>
    <p>Phone Number: <input type="text" name="phone_number"></p>
    <input type="submit" value="Submit"><br><br>
    <input type="button" onClick="history.go(0)" value="Refresh">
</form>
<br>
<?php
    foreach ($records as $rec) {
        echo "Name: ".$rec->name."<br>";
        echo "Email: ".$rec->email."<br>";
        echo "Phone Number:".$rec->phone_number."<br><br>";
    }

?>
</body>
</html>

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

你的主要问题是对MVC架构的理解不足。如果你是新人,请花点时间探索它。

- 查看

<!DOCTYPE html>
<html>
<head>
    <title>Contact List</title>
</head>
<body>
<?php echo form_open('controller/insert');?>
    <p>Name: <input type="text" name="name"></p>
    <p>Email: <input type="text" name="email"></p>
    <p>Phone Number: <input type="text" name="phone_number"></p>
    <input type="submit" value="Submit"><br><br>
    <input type="button" onClick="history.go(0)" value="Refresh">
<?php echo form_close();?>
<br>
<?php
    foreach ($info as $rec) {
        echo "Name: ".$rec->name."<br>";
        echo "Email: ".$rec->email."<br>";
        echo "Phone Number:".$rec->phone_number."<br><br>";
    }

?>
</body>
</html>

CONTROLLER

<?php

class controller extends CI_Controller
    {
        function __CONSTRUCT(){
            parent::_CONSTRUCT();
            $this->load->helper('file');
            $this->load->helper('form');
            $this->load->helper('url');
            $this->load->model('model');

        }
        public function index()
        {
            $this->load->model('model');
            $data['info'] = $this->model->getData();

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

        public function insert() {

            $data = array (
                'name' => $this->input->post('name'),
                'email' => $this->input->post('email'),
                'phone_number' => $this->input->post('phone_number')
                );

            $this->model->insert_data($data);
            $this->load->view('view');

        }

    }
    ?>

MODEL

<?php

    class model extends CI_Model
{
    function __CONSTRUCT(){
        parent::__CONSTRUCT();
        $this->load->database('your_databse_name');
        $this->load->library('db'); // optionali you could set it on autoload 

    }

    public function getData()
    {
        $query = $this->db->get('data');

        return $query->result();
    }

    public function insert_data($data){
        $this->db->insert('your_data_table', $data);
    }
}
?>

我认为这应该对你有帮助。

答案 1 :(得分:1)

如果我正确理解了您的问题,那么您正在尝试提交表单。但是您将其提交给form.php,但不存在。

进一步详述:在传统的PHP中,您可以将表单提交到新页面或同一页面,并检查该页面中的$ _POST值。由于Codigniter是一个MVC框架,您可以将数据发布回控制器。哪个控制器无关紧要。

在控制器中加载一个模型,您可以在其中创建一个函数来写入数据或从数据库获取数据。但是,现在该模型的使用较少。我不确定为什么,因为它让事情井然有序。

控制器处理完数据后,将加载新视图。在您的情况下,您将创建一个名为form.php的新视图,并通过控制器方法加载视图。

这样做的正确方法是这样的:

<!DOCTYPE html>
<html>
<head>
    <title>Contact List</title>
</head>
<body>
<form action="controller/form" method="post">
    <p>Name: <input type="text" name="name"></p>
    <p>Email: <input type="text" name="email"></p>
    <p>Phone Number: <input type="text" name="phone_number"></p>
    <input type="submit" value="Submit"><br><br>
    <input type="button" onClick="history.go(0)" value="Refresh">
</form>
<br>
<?php
    foreach ($records as $rec) {
        echo "Name: ".$rec->name."<br>";
        echo "Email: ".$rec->email."<br>";
        echo "Phone Number:".$rec->phone_number."<br><br>";
    }

?>
</body>
</html>

您的控制器应该是这样的:

<?php

class controller extends CI_Controller
{
    public function index()
    {
        $this->load->model('model');
        $data['info'] = $this->model->getData();

        $this->load->view('view', $data);
    }
    public function form() {
        $this->load->model('model');
        $data = array(
            'name' => $_POST['name'],
            'email' => $_POST['email'],
            'phone_number' => $_POST['phone_number'] // should be exact table column name for this to work
        );
        $this->model->insertData($data);
        $this->load->view('view', $data);
    }
}
?>

在你的模特中:

<?php

class model extends CI_Model
{
    public function getData()
    {
        $query = $this->db->get('data');

        return $query->result();
    }
    public function insertData($data)
    {
        return $this->db->insert('data', $data);
    }
}
?>

**复制答案后,您在foreach语句中提供了无效参数。

应该是:

foreach ($info as $rec) {

而不是你的

foreach ($records as $rec) {

答案 2 :(得分:0)

在模型公共函数插入($ data)

中创建方法
public function insert($data){
$sql = "INSERT INTO data (name, email, phone_number) VALUES ('$data['name']', '$data['email']', '$data['phone_number']')";

$this->db->query($sql);
}