Php 多文本输入Codeigniter的表单验证
表单中的数组值始终是CI中表单验证的问题。现在我必须输入多个值,这些数组值将存储在DB中。现在用户可以错误地将某些字段保留为空白,如下链接所示: 我使用教程在+按钮单击上添加输入框。在提交时,空白值将被截断,然后空数组值将添加到数据库中。我在本机PHP中使用了一个示例程序,但无法在CI中实现它 我使用本机PHP中的以下代码在DB中插入值,截断空值:Php 多文本输入Codeigniter的表单验证,php,codeigniter,validation,Php,Codeigniter,Validation,表单中的数组值始终是CI中表单验证的问题。现在我必须输入多个值,这些数组值将存储在DB中。现在用户可以错误地将某些字段保留为空白,如下链接所示: 我使用教程在+按钮单击上添加输入框。在提交时,空白值将被截断,然后空数组值将添加到数据库中。我在本机PHP中使用了一个示例程序,但无法在CI中实现它 我使用本机PHP中的以下代码在DB中插入值,截断空值: <?php include 'sql_connect.php'; $str = array(); for($i=0
<?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);
?>
预URL函数:
public function prepurl($item, $key)
{
$item = "http://".$item;
}
我不清楚您的问题,但因为您提到要验证多个文本框。如果你的文本框是这样的
<input type="text" name="txtSiteName[]" />
<input type="text" name="txtSiteName[]" />
$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'required|xss_clean|callback_check_array');
验证所有文本框是否为null或空
更新(将参数传入回调)
默认情况下,CodeIgniter
使用第一个参数,因此第二个参数是您的参数。还可以查看如何插入多个记录
你也可以这样做
$this->form_validation->set_rules('txtSiteName[]', 'Site Name', 'callback_sitename_check');
function sitename_check() {
$sitenames = $this->input->post('txtSiteName');
}
更新:(用于阵列漫游)
下面是一个简单的过程 这样设置消息
<input type="text" name="txtSiteName[]" />
<input type="text" name="txtSiteName[]" />
$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);
}
你是不是在盲目地添加文本框?你能展示一下你尝试过的
CodeIgniter
代码吗?@sheikheera没有什么新东西。我刚刚创建了一个回调函数公共函数null\u check($str)
,并将$str作为它的参数。添加了多个值,但它只在$str中获取一个字符串,而不是完整的数组。在回调函数中,我将添加上述代码,如本机PHP中的问题所示,不包括DB查询。但我只能在数组可用的情况下才能这样做。您是静态生成这些文本字段还是静态生成这些文本字段dynamically@Venkat动态点击按钮事件。我已经知道了。这不是我的问题。某些文本框可以为空。假设用户想要添加3个值,但他错误地生成了4个文本框,那么他无法删除额外的文本框。因此,如果她输入3个值并保持第四个文本框为空,则数组中的空白值将被截断并存储在DB中,这将是回调函数的工作。在这种情况下,您可以删除“<代码>要求的规则”,或者使用客户端检查来删除在提交之前的空文本框。但是如果您不这样做,人们仍然可以破解。执行服务器端验证-我删除了必需的,但我也不能接受空值-是的,我也会这么做。我正在考虑创建一个-按钮来删除文本框。@SilentAssassin,更新了我的答案。你确定$this->input->post('txtSiteName')代码>将获取完整的数组?如果您使用了复选框数组,则这是相同的事情。如果您不确定,请直接在回调方法中访问$\u POST['txtSiteName']。
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);
}