2013-04-20 42 views
6

i, wenn eine ID in der Datenbank zu überprüfen versuchen bereits vorhanden ist, und wenn es dann nicht nur, dass die ID einfügen und nicht die andere, dieWie überprüfen, ob id bereits vorhanden - codeigniter

ich existiert haben versucht, tut eine where-Anweisung, wenn ihre überprüft eine ID in der Datenbank vorhanden ist, sondern auch dann, wenn ihre neue Informationen ist es nicht in die Datenbank einfügen

im ganz hier verloren würde jede Führung

ps i geschätzt werden möchte keine Zeile aktualisieren Ich möchte eine neue aktualisierte einfügen, die nicht existiert

+0

Haben Sie überprüft, was '$ q' ist, wenn Sie das ausführen? – matthewpavkov

+0

$ q überprüft, ob irgendwelche der IDs in der Datenbank existieren, es funktioniert, weil es keine neuen Informationen in die Datenbank einfügt – Hashey100

+0

Richtig, aber ich würde verifizieren, dass $ q eigentlich 'false' ist. Probiere 'if ($ q-> num_rows()> 0) {...}' und mache dann einfach ein 'echo' in deinem' if', damit du sehen kannst, was genau passiert. – matthewpavkov

Antwort

9

Modell

<?php 
class Fruits_model extends CI_Model 
{ 
    function __construct() 
    { 
     parent::__construct(); 
     $this->load->database(); 
    } 

    function check() 
    { 
     $query = null; //emptying in case 

     $id = $_POST['id']; //getting from post value 
     $name = $_POST['name']; 

     $query = $this->db->get_where('fruits', array(//making selection 
      'id' => $id 
     )); 

     $count = $query->num_rows(); //counting result from query 

     if ($count === 0) { 
      $data = array(
       'name' => $name, 
       'id' => $id 
      ); 
      $this->db->insert('fruits', $data); 
     } 
    } 
} 

?> 
+2

Dafür können Sie immer die Formularvalidierungsregel is_unique [table.filed_name] verwenden, um nach eindeutigen Werten zu suchen – MSN

1

Sie müssen die IDs in Ihrer MYSQL-Tabelle mit der ID auswählen, die Sie überprüfen möchten, und dann die Zeilen zählen. Wenn die Zeilenanzahl 0 ist, ist die ID nicht vorhanden.

 $query = mysql_query("SELECT * FROM  your_table WHERE id='$id'"); 
    $count = mysql_num_rows($query); 
    If($count!=0){ 
    // id exists 
    } else { 
    // id doesn't exist 
    } 
1

normalerweise ‚id‘ Feld wird gesetzt mit auto_increment und stellen primären, die einzigartig und nicht wiederholbar ist. Es gibt also kein Problem, sich um existierende Sorgen zu kümmern.

In Ihrem Fall denke ich, dass Sie es nicht als ein "einzigartiges Feld" verwenden.

Lassen Sie mich Ihnen ein Beispiel geben.

Hier habe ich einen 'Früchte'

++++++++++++++++++++++++++++++++++++ 
ငfruit_id | int (primary) 
name  | text 
id  | int 
++++++++++++++++++++++++++++++++++++++ 

Tabellennamen in Ihrem Modell

function checkId($id) 
{ 
    $query=$this->db->get_where('fruits',array('id'=>$id)); //check if 'id' field is existed or not 

    if($query!=null) // id found stop 
    { 
    return FALSE; 
    } 
    else // id not found continue.. 
    { 
     $data = array(
      'fruit_id' => $fruit_id , 
       'name' => $name , 
      'id' => $id 
     );  
     $this->db->insert('fruits', $data);   
    }  
} 
+0

$ fruit_id, $ name, $ id sind Werte von Ihrem Formular –

+0

Ich versuchte Ihren Code, aber es gibt alle Ergebnisse als zurück falsch, auch wenn es eine neue ID ist – Hashey100

+0

okay, es funktioniert, müssen Sie verwenden | num_rows(); Überprüfen Sie meine nächste Antwort auf die vollständige Lösung –

3
$ql = $this->db->select('id')->from('testing')->where('id',$id)->get(); 

if($ql->num_rows() > 0) {} else { 
    $a = array('id' => $id, 'message' => $message); 
    $this->db->insert('testing', $a); 
} 

Dies sollte es tun.

3

Sie haben ein logisches Problem mit Ihrem Code, den Sie beheben müssen.

In Ihrem Code speichern Sie das Ergebnis Ihrer Abfrage, da $q = $this->db->get('testing'), und $q immer unabhängig von der Anzahl der zurückgegebenen Zeilen als wahr ausgewertet werden.

Sie müssen überprüfen, die Anzahl der Zeilen mit $query->num_rows() > 0 und dann den Rest von Ihnen Code wird sich wie erwartet verhalten.

Weitere Informationen finden Sie unter: http://ellislab.com/codeigniter/user-guide/database/results.html

0

für eine ID Überprüfung oder jede Spalte Wert existieren nicht in der Datenbank CI eine Gültigkeitsregel für sie.

Sehen Sie es hier leben: Validation Rule

Regel: is_unique

gibt false zurück, wenn das Formularelement auf die Tabellen- und Feldnamen in dem Parameter nicht eindeutig ist. Hinweis: Für diese Regel muss der Abfrage-Generator aktiviert sein, damit er funktioniert.

Beispiel: is_unique[table.field]

$this->form_validation->set_rules(
     'username', 'Username', 
     'required|min_length[5]|max_length[12]|is_unique[users.username]', 
     array(
       'required'  => 'You have not provided %s.', 
       'is_unique'  => 'This %s already exists.' 
     ) 
); 

Weitere Vorgriff der Validierung können Sie alle Regeln Validierung Rahmen fügen Sie ein Array verwenden.

 $this->form_validation->set_rules(
      'username', 'Username', 
      'required|min_length[5]|max_length[12]|is_unique[users.username]', 
      array(
        'required'  => 'You have not provided %s.', 
        'is_unique'  => 'This %s already exists.' 
      ) 
    ); 


    $config = array(
     'your_rule_name' => array(
       array(
         'username', 'Username', 
         'required|min_length[5]|max_length[12]|is_unique[users.username]', 
         array(
           'required'  => 'You have not provided %s.', 
           'is_unique'  => 'This %s already exists.' 
         ) 
       ) 
     ),   
     array(
       'field' => 'email', 
       'label' => 'Email', 
       'rules' => 'required' 
     ) 
); 

$this->form_validation->set_rules($config); 
Verwandte Themen