2013-04-20 15 views
6

staram się sprawdzić, jeśli id ​​w bazie danych już istnieje, a jeśli tak nie jest to tylko wstawić ten identyfikator, a nie na tych, które istniejąJak sprawdzić, czy identyfikator już istnieje - CodeIgniter

Próbowałem zrobić w razie stwierdzenia, że ​​sprawdza, czy ich jest id nie istnieje w bazie danych, ale nawet jeśli są nowe informacje nie wstawić go do bazy danych

Im całkiem stracił tutaj dowolny wskazówki będą mile widziane

pS Nie chcę aktualizować wiersza Chcę wstawić nowy zaktualizowany, który nie istnieje

$this->db->where('id',$id); 
$q = $this->db->get('testing'); 

if($q) 
{ 
    //Do nothing 
} 
else 
{ 

    $this->db->set('id', $id); 
    $this->db->set('message', $message); 
    $query= $this->db->insert('testing'); 

} 
+0

Czy sprawdziłeś, co to '$ q', kiedy to robisz? – matthewpavkov

+0

$ q sprawdza, czy któryś z identyfikatorów istnieje w db działa, ponieważ nie wstawia żadnych nowych informacji do bazy danych – Hashey100

+0

Dobrze, ale chciałbym sprawdzić, że $ q jest faktycznie "false". Spróbuj 'if ($ q-> num_rows()> 0) {...}', a następnie po prostu wykonaj 'echo' w swoim' if', abyś mógł zobaczyć, co się dzieje na pewno. – matthewpavkov

Odpowiedz

9

model

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

W tym celu zawsze możesz użyć reguły sprawdzania poprawności formularza is_unique [table.filed_name], aby sprawdzić unikalne wartości – MSN

1

Musisz wybrać identyfikator w tabeli MYSQL z identyfikatorem, który chcesz sprawdzić, a następnie zliczyć wiersze. Jeśli liczba wierszy wynosi 0, identyfikator nie istnieje.

 $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

zwykle pole „id” znajduje się w auto_increment i ustawić podstawową który jest niepowtarzalny i nie powtarzalny. Nie ma problemu, aby martwić się o istniejący.

Jednak w twoim przypadku myślę, że nie używasz go jako "unikalnego pola".

Pozwól, że dam ci przykład.

Tutaj mam

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 są wartościami wysłanymi z twojego formularza –

+0

próbowałem twojego kodu, ale on zwraca wszystkie wyniki jako false, nawet jeśli jest to nowy identyfikator – Hashey100

+0

ok, ale działa, musisz użyć | num_rows(); sprawdź moją następną odpowiedź na kompletne rozwiązanie –

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

To powinno wystarczyć nazwę tabeli 'owoce'

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

w modelu.

3

Masz problem logiczny z kodem, który musisz naprawić.

W kodzie zapisujesz wynik zapytania, ponieważ $q = $this->db->get('testing'), i $q zawsze będą miały wartość true bez względu na liczbę wierszy, którą zwrócisz.

Musisz sprawdzić liczbę wierszy za pomocą $query->num_rows() > 0, a reszta z twojego kodu będzie zachowywać się zgodnie z oczekiwaniami.

Aby uzyskać więcej informacji, zobacz: http://ellislab.com/codeigniter/user-guide/database/results.html

0

do sprawdzania identyfikatora lub dowolną wartość kolumna nie istnieje w bazie danych CI mają regułę walidacji dla niego.

Zobacz żyć tutaj: Validation Rule

Reguła: is_unique

Zwraca FALSE jeśli element forma nie jest przypisany do tabeli i pola nazwy w parametrze. Uwaga: ta reguła wymaga włączenia Kreatora zapytań, aby działał.

Przykład: 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.' 
     ) 
); 

Dla większego wykorzystania Advance walidacji, można dodać wszystkie zasady ustalania poprawności za pomocą tablicy.

 $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); 
Powiązane problemy