フォーム内の配列値は、CI のフォーム検証では常に問題になります。ここで、複数の値を入力する必要があり、それらの配列値は DB に格納されます。以下のリンクに示すように、ユーザーは誤っていくつかのフィールドを空白のままにしておくことができます。
このチュートリアルを使用して、 +ボタンのクリック時に入力ボックスを追加しました。送信時に空白の値は切り捨てられ、null でない配列の値がデータベースに追加されます。ネイティブ PHP でサンプル プログラムを使用してこれを試しましたが、CI で実装できませんでした。
ネイティブ PHP で次のコードを使用して、null 値を切り捨てる 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 つの URL を入力すると、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;
}