表单中的数组值始终是CI中表单验证的问题。现在我要输入多个值,这些数组值将存储在DB中。现在用户可以错误地保留一些字段空白,如下面的链接所示:
Values in the array on submission.
我使用this教程在 + 按钮点击上添加输入框。提交时,空白值将被截断,然后不会将空数组值添加到数据库中。我尝试使用本机PHP中的示例程序,但无法在CI中实现它。
我在本机PHP中使用以下代码在DB截断空值中插入值:
<?php
include 'sql_connect.php';
$str = array();
for($i=0;$i<count($_POST["txtSiteName"]);$i++)
{
$str[] = $_POST["txtSiteName"][$i];
}
$str = array_filter($str, function($item) {if(!is_null($item)) return $item;});
foreach($str as $loop_str)
{
$arr_str[] = $loop_str;
}
for($k = 0; $k<count($arr_str);$k++)
{
mysql_query("INSERT INTO sitename (name) VALUES ('".$arr_str[$k]."')") or die(mysql_error());
}
print_r($arr_str);
?>
我如何在CI中实现这一目标? 我试图使用回调函数,但数组值没有传递给回调函数。
修改
以下代码显示了我的回调函数:
在输入3个网址时,它被称为3次。这是正常的吗? 我的array_walk的回调函数也无效。在另一个回调函数中调用回调函数是不可能的?
public function null_check()
{
$urls = $this->input->post('link_name');
array_walk($urls, 'prepurl');
var_dump($urls);
}
预包功能:
public function prepurl($item, $key)
{
$item = "http://".$item;
}
答案 0 :(得分:1)
您的问题对我来说并不清楚,但是您提到要验证多个文本框。所以如果你的文本框是这样的
<input type="text" name="txtSiteName[]" />
<input type="text" name="txtSiteName[]" />
然后只需使用
$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'required|xss_clean');
将所有文本框验证为空或空。
更新(将参数传递给回调)
$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'callback_sitename_check[' . $this->input->post('txtSiteName') . ']');
function sitename_check($str, $sitenames) {
// $sitenames will be your textboxe's array
}
第一个参数默认由CodeIgniter
使用,因此第二个参数是您的参数。另请查看insert_batch()以插入多个记录。
你也可以这样做
$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'callback_sitename_check');
function sitename_check() {
$sitenames = $this->input->post('txtSiteName');
}
更新:(对于array_walk)
array_walk($urls, array($this, 'prepurl'));
答案 1 :(得分:0)
这是一个简单的过程
像这样设置消息
$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'required|xss_clean|callback_check_array');
这是回调
function check_array()
{
$txtSiteName = $this->input->post('txtSiteName');
$error = 0;
foreach($txtSiteName as $key => $value)
{
if(!empty($value)){
$error = $error + 1;
}
}
if($error == 0){
return TRUE;
}else{
$this->form_validation->set_message('check_array', 'All fields are empty. Please provide at leaset 1');
return FALSE;
}
}
验证成功后,运行此代码或根据您的要求进行修改
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$txtSiteName = $this->input->post('txtSiteName');
foreach($txtSiteName as $key => $value)
{
if(!empty($value)){
$data['name'] = $value;
$this->mymodel->insert($data);
}
}
}
模型方法
function insert($data)
{
$this-db->insert('table_name',$data);
}