Codeigniter检查数据库中是否存在值

时间:2011-10-07 20:06:37

标签: codeigniter codeigniter-2

我想将值与数据库中的值进行比较。

这是我的数据库

            Id  xone     xtwo   yone    ytwo
            1   519      819    64      364

数据库的名称是num。

 public function coord_check() {

               $X = $this->input->post('X');
        $Xm = $this->input->post('Xm');
         $Y = $this->input->post('Y');
         $Ym = $this->input->post('Ym');

        $query = $this->db->where('xone',$X)->select('xone')->get('num');
         $query2 = $this->db->where('xtwo',$Xm)->select('xtwo')->get('num');
         $query3 = $this->db->where('yone',$Y)->select('yone')->get('num');
         $query4 = $this->db->where('ytwo',$Ym)->select('ytwo')->get('num');

         if($query->num_rows() > 0 && $query->num_rows() > 0 )        {

             echo "xerror";
                               }
         elseif($query3->num_rows() > 0 || $query4->num_rows() > 0 )        {

             echo "yerror";  }

               else{
                   echo "noerror";
               }



 } 

我的代码目前只有echo没有错误,即使我将数值与数据库中的内容完全相同。任何人都可以看到问题出在哪里?

我真正想要的是比较让我们说$ xm是否在数据库值xone和xtwo的范围内。那可能吗? 非常感谢提前..

3 个答案:

答案 0 :(得分:3)

我不确定您是否关注MVC架构,因为您的帖子实际上有点令人困惑。

然而,这就是我要做的事 - 在Codeigniter中。我会尽可能地尝试匹配您的代码风格。还有很多方法可以做到这一点,有些方法可能比这更有效,但这将完成工作。我从来没有运行过这个脚本,所以它可能有错误或者需要一些调试:

<?php
/* Controller
*************************/

class Something extends CI_Controller {

function coord_check() {

    //Form Validation -- if necessary
    $this->form_validation->set_rules('X', 'X', 'required|xss_clean');
    $this->form_validation->set_rules('Xm', 'Y', 'require|xss_clean'); 
    $this->form_validation->set_rules('Y', 'Y', 'require|xss_clean'); 
    $this->form_validation->set_rules('Ym', 'Ym', 'require|xss_clean'); 

    if ($this->form_validation->run() == FALSE) {
        $this->load->view('your_view'); 
    } else {
        $this->load->model('num');

        $X = $this->input->post('X');
        $Xm = $this->input->post('Xm');
        $Y = $this->input->post('Y');
        $Ym = $this->input->post('Ym');

        $X_result = $this->num->check_if_coord_thingy_exists('xone', $X);
        $Xm_result = $this->num->check_if_coord_thingy_exists('xtwo', $Xm);
        $Y_result = $this->num->check_if_coord_thingy_exists('yone', $Y);
        $Ym_result = $this->num->check_if_coord_thingy_exists('ytwo', $Ym);

        /*
        if ($X_result == TRUE && $Xm_result == TRUE && $Y_result == TRUE && $Ym_result == TRUE) {
            //all things inputed match database
        } else {
            //all values don't match database
        }


        if ($X_result == TRUE && $Xm_result == TRUE) :
            //all X things inputed match database
                    endif;

        if ($Y_result == TRUE && $Ym_result == TRUE) :
            //all X things inputed match database
                    endif; */


        $data['X_repsonse'] = ($X_result == TRUE ? 'X exist' : 'X doesn\'t exist';
        $data['Xm_repsonse'] = ($Xm_result == TRUE ? 'Xm exist' : 'Xm doesn\'t exist';
        $data['Y_repsonse'] = ($Y_result == TRUE ? 'Y exist' : 'Y doesn\'t exist';
        $data['Ym_repsonse'] = ($Ym_result == TRUE ? 'Ym exist' : 'Ym doesn\'t exist';

        $this->load->view('your_view', $data);
    }
}
?>

<?php
/* Model
*************************/  

class Num extends CI_Model {

    function check_if_coord_thingy_exists($value, $variable) {
        $this->db->select($value);
        $this->db->where($value, $variable);

        $query = $this->db->get('num');

        if ($query->num_rows() > 0) {
            //Value exists in database
            return TRUE;
        } else {
            //Value doesn't exist in database
            return FALSE;
        }
    }   
}

?>

<?php 
/* View -> your_view.php
*************************/  

    echo validation_errors('<div class="message">', '</div>');

    if (!empty($X_response)) echo '<div class="message">X: '.$X_response.'</div>';
    if (!empty($X_response)) echo '<div class="message"Xm: >'.$Xm_response.'</div>';
    if (!empty($X_response)) echo '<div class="message">Y: '.$Y_response.'</div>';
    if (!empty($X_response)) echo '<div class="message">Ym: '.$Ym_response.'</div>';

?>

<?php echo form_open('something/coord_check'); ?>

<?php echo form_label('First Coord', 'X'); ?><br>
<?php $first_coord = array('name' => 'X', 'id' => 'X', 'value' => set_value('X')); ?>
<?php echo form_input($first_coord); ?><br>

<?php echo form_label('Second Coord', 'Xm'); ?><br>
<?php $second_coord = array('name' => 'Xm', 'id' => 'Xm', 'value' => set_value('Xm')); ?>
<?php echo form_input($second_coord); ?><br>

<?php echo form_label('Third Coord', 'Y'); ?><br>
<?php $third_coord = array('name' => 'Y', 'id' => 'Y', 'value' => set_value('Y')); ?>
<?php echo form_input($third_coord); ?><br>

<?php echo form_label('Fourth Coord', 'Ym'); ?><br>
<?php $fourth_coord = array('name' => 'Ym', 'id' => 'Ym', 'value' => set_value('Ym')); ?>
<?php echo form_input($fourth_coord); ?><br>

<?php echo form_submit('submit', 'Coord Check or Whatever'); ?>
<?php echo form_close(); ?>

希望这会有所帮助。这是假设您自动加载数据库和form_validation库。

最后,您的数据库很奇怪。 X和Y我觉得应该是不同的表。我不知道你的项目的范围。祝你好运!

答案 1 :(得分:0)

表格会有多于1个值吗?

如果没有,那么最好使用单个查询来先拉出整个记录。然后你可以比较这些值是否在x和y的范围内。

这样的事情:

public function coord_check() {

  $X = $this->input->post('X');
  $Xm = $this->input->post('Xm');
  $Y = $this->input->post('Y');
  $Ym = $this->input->post('Ym');

  $query = $this->db->where('Id',1)->get('num');
  if ($query->num_rows())
  {
    $row = $query->row();

    if ($row->xone > $X || $row->xtwo < $X || $row->xone > $Xm || $row->xtwo < $Xm) {
      echo "xerror";
    }
    elseif ($row->xone > $Y || $row->xtwo < $Y || $row->xone > $Ym || $row->xtwo < $Ym) {
      echo "yerror";
    }
    else {
      echo "noerror";
    }
  }
}

答案 2 :(得分:0)

function check_record($db, $table, $where) {
    try {
        $db->where($where);
        return $db->count_all_results($table);
    } catch (Exception $e) {
        return false;
    }
}