用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2221|回复: 9
收起左侧

[版本 2.x] 关于表单唯一值,怎么解决

[复制链接]
发表于 2015-4-15 17:51:54 | 显示全部楼层 |阅读模式
controllers中代码 acm.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class ACM extends Ci_Controller
        {
               
                public function index()
                {
                        $this->load->view('baoming');
               
                }
               
                function baoming()
                {
                       
                                $username=$_POST['username'];
                                 $xuehao=$_POST['xuehao'];
                                 $sushe=$_POST['sushe'];
                                 $telephone=$_POST['telephone'];
                                 $QQ=$_POST['QQ'];
                                 $zhuanye=$_POST['zhuanye'];
       
                                                $this->load->model('acm_m');
                                               
                                                $arr = array(
                                                  'username' => $username,
                                                  'xuehao' => $xuehao,
                                                  'sushe' => $sushe,
                                                  'telephone' => $telephone,
                                                  'QQ' => $QQ,
                                                  'zhuanye' => $zhuanye
                                                  );
                                                         
                                        $this->acm_m->baoming_insert($arr);
                                       
                                        if ( $this->db->affected_rows() > 0)
                                        {
                                                echo"<script>alert('提交成功!返回报名主页');location.href='/www/index.php/acm';</script>";
                                        }
                                        else
                                        {
                                                echo"<script>alert('提交失败!请重新报名');location.href='/www/index.php/acm';</script>";
                                        }
                }
               


}



model 的代码acm_m.php
<?php
class Acm_m extends CI_Model
{
        public function __construct()
        {
                parent::__construct();
                        $this->load->database();//链接数据库
        }
         function baoming_insert($arr)
        {

                 $this->db->insert('baoming',$arr);                         
       
        }
}
?>






view 中的代码 baoming.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>报名网站</title>
  <meta name="description" content="这是一个 user 页面">
  <meta name="keywords" content="user">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta name="renderer" content="webkit">
  <meta http-equiv="Cache-Control" content="no-siteapp" />
  <link rel="icon" type="image/png" href="assets/i/favicon.png">
  <link rel="apple-touch-icon-precomposed" href="assets/i/app-icon72x72@2x.png">
  <meta name="apple-mobile-web-app-title" content="Amaze UI" />
  <link rel="stylesheet" href="../AmazeUI-2.2.1/assets/css/amazeui.min.css"/>
  <link rel="stylesheet" href="../AmazeUI-2.2.1/assets/css/admin.css">
          <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.amazeui.org/amazeui/2.2.1/js/amazeui.min.js"></script>
<script type="text/javascript">
$(function(){
  var progress = $.AMUI.progress;

  $(document).ready(function() {  
    progress.start();
  });

  $(window).load(function() {
    progress.done();
  });
});
</script>

<style>
.doc-ir-demo {
  background: #2a2c2e;
}

.doc-ir-demo h1 {
  margin-top: -20px;
  padding: 10px;
}

.doc-ir-demo a {
  display: block;
  height: 56px;
  width: 210px;
  background: url() no-repeat left center;
  -webkit-background-size: 210px 56px;
  background-size: 210px 56px;
}
</style>
<header class="doc-ir-demo">
  <h1><a  class="am-text-ir"></a></h1>
</header>
                <div class="am-g am-container am-margin-top-xl  am-margin-bottom-sm mj_title " data-am-scrollspy="{animation:'slide-left'}">
                        <h1 class="am-text-center">ACM程序设计大赛</h1>
                        <small class=".am-sm-text-center">ca.sise.com.cn</small>
                </div>
<div class="am-u-sm-center">

        <form action="/www/index.php/acm/baoming" name="form" method="post" class="am-form am-form-horizontal" >
                        <div class="am-form-group">
                                <label  class="am-u-sm-3 am-u-lg-5  am-form-label" ">姓名</label>
                                <div class="am-u-sm-9 am-u-lg-3 am-u-end">
                                        <input type="text" name="username"id="doc-vld-name" required/>
                                </div>
                        </div>
                        <div class="am-form-group">
                                <label class="am-u-sm-3 am-u-lg-5 am-form-label">学号</label>
                                <div class="am-u-sm-9 am-u-lg-3 am-u-end">
                                        <input type="text" name="xuehao" required/ >
                                       
                                </div>
                        </div>
                        <div class="am-form-group">
                                <label class="am-u-sm-3 am-u-lg-5  am-form-label" >宿舍</label>
                                <div class="am-u-sm-9 am-u-lg-3 am-u-end">
                                        <input type="text" name="sushe" required/>
                                </div>
                        </div>
                        <div class="am-form-group">
                                <label class=" am-u-sm-3 am-u-lg-5  am-form-label"> 电话</label>
                                <div class="am-u-sm-9 am-u-lg-3 am-u-end">
                                        <input type="text" name="telephone" required/>
                                </div>
                        </div>
                        <div class="am-form-group">
                                <label class="am-u-sm-3 am-u-lg-5  am-form-label">Q Q</label>
                                <div class="am-u-sm-9 am-u-lg-3 am-u-end">
                                        <input type="text" name="QQ" required/>
                                </div>
                        </div>
                        <div class="am-form-group">
                                <label class="am-u-sm-3 am-u-lg-5   am-form-label">专业</label>
                                <div class="am-u-sm-9 am-u-lg-3 am-u-end">
                                        <input type="text" name="zhuanye" required/>
                                </div>
                        </div>
                        <div class="am-form-group">
                                <div class=" am-u-lg-11 am-u-sm-push-3 am-u-lg-push-5 am-u-sm-centered ">
                                        <button type="submit" name='sumbit' class="am-btn am-btn-primary ">提交</button>
                                        <button type="reset" class="am-btn am-btn-default">重置</button>
                                </div>
                        </div>
        </form>
        </div>
<center>
        <div class="am-form-group am-vertical-align" style="height:325px">
                <div class="am-vertical-align-bottom am-u-lg-2 am-u-lg-centered">
                 Copyright &copy; 计算机协会CA工作室
                </div>
        </div>
</center>
</body>
</html>

求大神指导,谢谢

8~~RYTL1GGTU7_LCID}~6(N.png
发表于 2015-4-15 17:55:42 | 显示全部楼层
無關 CI

你將 xuehao 設為唯一鍵
當你又想新增一樣的 xuehao 值時
自然就會跑出錯誤啦~~~
 楼主| 发表于 2015-4-15 18:30:50 | 显示全部楼层
Closer 发表于 2015-4-15 17:55
無關 CI

你將 xuehao 設為唯一鍵

我知道,那我要怎么解决,当xuehao在数据库已经有的时候,我就弹出已报名,怎么搞,我试过了form_validation,都不行,不知道是不是自己写错了,
发表于 2015-4-15 18:44:34 | 显示全部楼层
那只有提交的时候查询数据库进行判断了
 楼主| 发表于 2015-4-15 20:10:47 | 显示全部楼层
昨夜渡轮 发表于 2015-4-15 18:44
那只有提交的时候查询数据库进行判断了

怎么做
发表于 2015-4-16 09:17:33 | 显示全部楼层
ZBill 发表于 2015-4-15 18:30
我知道,那我要怎么解决,当xuehao在数据库已经有的时候,我就弹出已报名,怎么搞,我试过了form_validat ...

表單驗證類有 is_unique[User.Email] (User表內的Email) 可以使用
发表于 2015-4-16 14:07:18 | 显示全部楼层
楼上已经说的很清楚了!
 楼主| 发表于 2015-5-5 14:41:12 | 显示全部楼层
Closer 发表于 2015-4-16 09:17
表單驗證類有 is_unique (User表內的Email) 可以使用

那如果我直接绕过前台,直接在/www/index.php/acm/sign_up输入数据,那我要怎么保证他不能直接绕过前台去表明??
发表于 2015-5-5 16:26:31 | 显示全部楼层
ZBill 发表于 2015-5-5 14:41
那如果我直接绕过前台,直接在/www/index.php/acm/sign_up输入数据,那我要怎么保证他不能直接绕过前台去 ...

1. 檢查是 POST 進來的
 $fp = $this->input->post(NULL, TRUE);
 if($fp){ ... }

2. 打開 CSRF 檢查
 $config['csrf_protection'] = TRUE;

3. 使用你的表單驗證類
 if ($this->form_validation->run() == FALSE) {
  ...
 } else {
  ...
 }
 

本版积分规则