2016-10-11 5 views
0

У меня есть список контактов в моей базе данных mySQL. Столбцы в моей базе данных - это имя, адрес электронной почты и номер телефона. Использование codeigniter. Я знаю код, который мне нужен, чтобы вставить данные из формы в базу данных, но я не могу понять, куда его поместить в код. У меня был код ниже в отдельном документе под названием form.php, но он просто продолжал давать мне ошибки в любое время, когда я нажимал submit. Следовательно, почему form.php находится в форме view.php.Застрял, пытаясь вставить данные в базу данных mySQL

$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> 

Любая помощь будет оценена.

ответ

0

Создать метод в модели публичной функции вставки ($ данных)

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

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

так в view.php у меня есть действие = "model.php", где действие = "form.php" в настоящее время? –

+0

Я получаю эту ошибку. ошибка синтаксиса, неожиданный '' (T_ENCAPSED_AND_WHITESPACE), ожидая идентификатор (T_STRING) или переменной (T_VARIABLE) или номер (T_NUM_STRING) –

+0

В вашем действии = "controller.php" .. –

1

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

-View

<!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'); 

     } 

    } 
    ?> 

МОДЕЛЬ

<?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); 
    } 
} 
?> 

Я думаю, что это должно помочь вам.

+0

Я запустил ваш код, и я получил сообщение об ошибке «Не удалось загрузить запрошенный класс: Db», если я прокомментирую это, код работает по большей части, но когда я hit submit Я получаю две ошибки: 1) Неопределенная переменная: info 2) Недопустимый аргумент, предоставленный foreach(). Оба находятся в view.php –

+0

О, извините! Удалить строку $ this-> load-> library ("db"); Ошибки в вашем представлении существуют, потому что имя переменной внутри вашего оператора foreach не совпадает с именем переменной $ data в контроллере, которая передается в view. Чтобы быть ясным, в переменной контроллера $ data ['info'] = $ this-> model-> getData(); и аргумент в поле зрения внутри оператора foreach должен выглядеть следующим образом: foreach ($ info as $ rec), я думаю, что это должно работать, но, тем не менее, проверьте свой код. – Goran

+0

Проверял код, поскольку у меня есть то, что вы разместили в своем последнем комментарии, поэтому не знаете, что вызывает ошибки. Это то, что показывает ниже ошибки трассировку: Файл: E: \ Xampp \ XAMPP \ HTDOCS \ Контакты \ Application \ вид \ view.php Line: 22 Функция: _error_handler Файл: E: \ Xampp \ XAMPP \ HTDOCS \ Обратная связь \ приложения \ контроллеры \ controller.php Line: 36 Функция: вид файла: E: \ Xampp \ XAMPP \ HTDOCS \ Контакты \ index.php Line: 315 Функция: require_once Боковой вопрос кнопка обновления, которую я имею, не перезагружается на исходную страницу, это может быть из-за ошибок. –

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) { 
Смежные вопросы