2016-10-11 4 views
0

Ich habe eine Kontaktliste in meiner mySQL-Datenbank. Die Spalten in meiner Datenbank sind Name, E-Mail und Telefonnummer. Mit Codeigniter. Ich kenne den Code, den ich brauche, um die Daten aus dem Formular in die Datenbank einzufügen, aber ich kann nicht herausfinden, wo ich ihn in den Code schreiben soll. Ich hatte den Code unten in einem separaten Dokument namens form.php, aber das gab mir immer Fehler, wenn ich auf "submit" klicke. Deshalb ist form.php in der view.php Form.Ich habe versucht, Daten in die mySQL-Datenbank einzufügen.

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

Jede Hilfe würde geschätzt.

Antwort

0

Create-Methode in Modell public function Einsatz ($ 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); 
} 
+0

so in der view.php tun habe ich action = "model.php", wo action = "form.php" aktuell ist? –

+0

Ich bekomme diesen Fehler. Syntaxfehler, unerwarteter '' (T_ENCAPSED_AND_WHITESPACE), erwarte Bezeichner (T_STRING) oder Variable (T_VARIABLE) oder Nummer (T_NUM_STRING) –

+0

In deiner action = "controller.php" .. –

1

Ihr Hauptproblem ist schlecht Verständnis von MVC arhitecture. Wenn Sie neu sind, nehmen Sie sich Zeit und erkunden Sie es.

-Ansicht

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

ich denke, das sollte dir helfen.

+0

Ich habe Ihren Code und ich bekomme eine Fehlermeldung "Kann die angeforderte Klasse laden: Db", Wenn ich das auskommen der Code funktioniert größtenteils, aber wenn ich hit submit Ich bekomme zwei Fehler, 1) Undefinierte Variable: info 2) ungültiges Argument für foreach() übergeben. Beide sind in view.php –

+0

Oh, Entschuldigung! Lösche Zeile $ this-> load-> library ("db"); Fehler in deiner Sicht existieren, weil der Name der Variablen innerhalb deiner foreach-Anweisung nicht mit dem Namen der $ data-Variablen im Controller übereinstimmt, der an die View übergeben wird. Um klar zu sein, in der Controller-Variablen $ data ['info'] = $ this-> model-> getData(); und Argument in Sicht innerhalb Foreach-Anweisung sollte so sein: foreach ($ info als $ rec), ich denke, das sollte funktionieren, aber überprüfen Sie jedoch Ihren Code. – Goran

+0

überprüfte den Code, wie ich habe, was Sie in Ihrem letzten Kommentar gepostet haben, also immer noch unsicher, was die Fehler verursacht. Dies ist, was unter dem Fehler Backtrace zeigt: Datei: E: \ Xampp \ xampp \ htdocs \ Kontakt \ application \ Ansichten \ view.php Line: 22 Funktion: _error_handler Datei: E: \ Xampp \ xampp \ htdocs \ Kontakt \ application \ Controller \ controller.php Line: 36 Funktion: Ansicht Datei: E: \ Xampp \ xampp \ htdocs \ Kontakt \ index.php Line: 315 Funktion: require_once Side Frage Die Refresh-Schaltfläche, die ich habe, wird nicht auf die ursprüngliche Seite neu geladen, könnte dies wegen der Fehler sein. –

1

Wenn ich Ihre Frage richtig verstanden habe, versuchen Sie ein Formular zu senden. Aber Sie senden es an form.php, die nicht existiert.

Um weiter zu gehen: In traditionellen PHP würden Sie Ihr Formular an eine neue Seite oder die gleiche Seite senden und auf dieser Seite nach $ _POST-Werten suchen. Da Codigniter ein MVC-Framework ist, würden Sie Ihre Daten zurück an einen Controller senden. Welcher Controller spielt keine Rolle.

In Ihrem Controller laden Sie ein Modell, in dem Sie eine Funktion zum Schreiben oder Abrufen von Daten von oder zur Datenbank erstellen. Das Modell wird heutzutage jedoch weniger verwendet. Ich bin mir nicht sicher warum, weil es die Dinge organisiert.

Nachdem der Controller die Daten verarbeitet hat, wird eine neue Ansicht geladen. In Ihrem Fall würden Sie eine neue Ansicht namens form.php anlegen und die Ansicht über die Controller-Methode laden.

Der richtige Weg, dies zu tun, so etwas wie dieses wäre:

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

Ihr Controller dies möchte:

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

Und in Ihrem Modell:

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

** Nachdem Sie meine Antwort kopiert haben, haben Sie ein ungültiges Argument in die foreach-Anweisung eingegeben.

Sollte sein:

foreach ($info as $rec) { 

Anstelle von Ihnen

foreach ($records as $rec) { 
Verwandte Themen