我无法清理我的阵列,希望有人可以看看!
这是我的意见:
<input type="text" name="courseno[]" id="courseno" size="12" />
这是我清理数据的功能:
function sanitizeData ($datastring) {
if (is_array($datastring)) {
foreach ($datastring as $indivdata) {
$indivdata = sanitizeData($indivdata);
}
}
else {
$datastring=trim($datastring);
$datastring=htmlspecialchars($datastring);
$datastring = mysql_real_escape_string($datastring);
return $datastring;
}
}
if (isset($_POST['courseno'])) {
$courseno = sanitizeData($_POST['courseno']);
}
当我尝试清理数组时,$courseno
数据不会发布,而我的所有其他数据都会被发布。当我不清理$courseno
时,数据就会很好地发布到数据库中。
答案 0 :(得分:1)
嗯,如果sanitizeData()
是一个数组,$datastring
返回一个值会有所帮助。
if (is_array($datastring)) {
foreach ($datastring as $indivdata) {
$indivdata = sanitizeData($indivdata);
}
// you need to actually return something here
}
答案 1 :(得分:1)
在if (is_array($datastring))
测试中,您将sanitizeData
电话的输出分配回$indivData
。因此,如果输入包含数组,则永远不会返回实际值。 $courseno
将被赋予NULL值。您可能希望将其更改为以下内容:
function sanitizeData ($datastring) {
if (is_array($datastring)) {
$result = '';
foreach ($datastring as $indivdata) {
$result .= sanitizeData($indivdata);
}
return $result;
}
else {
$datastring=trim($datastring);
$datastring=htmlspecialchars($datastring);
$datastring = mysql_real_escape_string($datastring);
return $datastring;
}
}
if (isset($_POST['courseno'])){
$courseno = sanitizeData($_POST['courseno']);
}
答案 2 :(得分:0)
我认为您已将文本框放在表单标记之外。
答案 3 :(得分:0)
这只是一个可变范围问题。
function sanitizeData ($datastring) {
// This is needed to hold the value between function calls ...
static $indivdata = array();
if (is_array($datastring)) {
foreach ($datastring as $indivdata) {
$indivdata[] = sanitizeData($indivdata);
}
return $indivdata;
}
else {
$datastring=trim($datastring);
$datastring=htmlspecialchars($datastring);
$datastring = mysql_real_escape_string($datastring);
return $datastring;
}
}
// $courseno will be an array now.
if (isset($_POST['courseno'])){
$courseno= sanitizeData($_POST['courseno']);
}
除非我在这么晚的时候遗漏了什么,否则你的函数似乎不会返回数据数组。 有几种方法可以解决这个问题,但上面的代码可以帮助您找到正确的方法。