2016-10-11 13 views
0

私のmySQLデータベースに連絡先リストがあります。私のデータベースの列は、名前、電子メール、phone_numberです。 codeigniterの使用。私はフォームからデータをデータベースに挿入するために必要なコードを知っていますが、コードに入れる場所を特定できません。私は以下のコードをform.phpと呼ばれる別のドキュメントに入れましたが、提出するといつでもエラーが表示されてしまいました。したがって、なぜ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

あなたの主な問題は、MVCのarhitectureの悪い理解である($データ)を挿入モデルパブリック関数で

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

foreach ($info as $rec) { 

のでview.phpに、私は= "model.php" アクション= "form.php" は現在どこのアクションを持っているのですか? –

+0

このエラーが発生しています。あなたのアクション= "controller.php" で 構文エラー、予期しない ''(T_ENCAPSED_AND_WHITESPACE)、期待識別子(T_STRING)または変数(T_VARIABLE)または番号(T_NUM_STRING) –

+0

.. –

1

のメソッドを作成します。あなたが新しい人なら、時間をかけて探検してください。

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

     } 

    } 
    ?> 

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

私は、これはあなたを助けるべきだと思います。

+0

コードを実行したところ、「要求されたクラスをロードできません:Db」というエラーが発生しました。 hit submit私は2つのエラー、1)未定義の変数:info 2)foreach()の引数が無効です。どちらもview.phpにあります –

+0

ああ、申し訳ありません!行を削除する$ this-> load-> library( "db"); foreach文の中の変数の名前が、渡されたコントローラ内の$ data変数の名前と同じではないため、ビュー内のエラーが存在します。コントローラの変数$ data ['info'] = $ this-> model-> getData();をクリアします。 foreachステートメント内のビュー内の引数は次のようにする必要があります。foreach($ info as $ rec)、これはうまくいくと思いますが、コードをチェックしてください。 – Goran

+0

あなたの最後のコメントにあなたが投稿したものがあるので、コードをチェックしました。 ファイル:E:これはエラーのバックトレースの下に表示されているものである22 機能:_error_handler ファイル:E:XAMPP \ \ xamppのXAMPP \ \ xamppの\ htdocsに接触\アプリケーション\ビュー\ view.php ライン\ \ htdocsに\連絡先\アプリケーション\コントローラ\ controller.php ライン:36 機能:ビュー ファイル:E: ラインのindex.php XAMPP \ \ xamppの\ htdocsに問い合わせ\ \:315 機能: サイド質問するrequire_once私が持っているリフレッシュボタンは元のページに再ロードされていませんが、これはエラーが原因です。 –

1

質問が正しく分かっている場合は、フォームを送信しようとしています。しかし、存在しないform.phpに提出しています。

従来のPHPでは、フォームを新しいページまたは同じページに送信し、そのページの$ _POST値を確認します。 CodigniterはMVCフレームワークなので、データをコントローラに返送します。どちらのコントローラーでも問題ありません。

コントローラでは、データベースとの間でデータの書き込みまたは取得を行うための関数を作成するモデルをロードします。しかし、このモデルはあまり使われていません。私は物事を整理しておく理由がわからない。

コントローラがデータを処理した後、新しいビューがロードされます。あなたの場合は、form.phpという名前の新しいビューを作成し、コントローラメソッドを介してビューをロードします。

これはこのようなものになるだろう行うには正しい方法:

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

そして、あなたのモデルで::あなたのコントローラは次のようにする必要があり

<!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 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 ($records as $rec) { 
関連する問題