2011-06-21 14 views
1

配列を消毒するのに問題があり、誰かが見て欲しいと願っています!ここ入力から配列を消毒する際に問題が発生する

は私の入力である:ここ

<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

通常、データが投稿された後、つまりサーバー内でデータが消毒されます。どのように消毒して投稿していますか? – Balanivash

答えて

1

$datastringが配列であるときsanitizeData()が値を返した場合まあ、それが役立つだろう。あなたのif (is_array($datastring))試験で

if (is_array($datastring)) { 
    foreach ($datastring as $indivdata) { 
     $indivdata = sanitizeData($indivdata); 
    } 
    // you need to actually return something here 
} 
1

、あなたが戻っ$indivDataからsanitizeData呼び出しの出力を割り当てます。したがって、入力に配列が含まれている場合、実際の値は返されません。 $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']); 
} 
+0

お返事ありがとうございます!何とかこれは私のために働いていません.. – sourpatchkiddo

+0

私はコードを更新 - 今期待どおりに動作する必要があります。 – Ryan

0

私はあなたのテキストボックスをフォームタグの外に置いたと思います。

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']); 
} 

この遅い時間に何かを逃していない限り、関数がデータ配列を返さないようです。 これを解決するにはいくつかの方法がありますが、上記のコードは正しい軌道に乗ります。

+0

ありがとうございました!私はこれを試して、このエラーを思いついた: "[]演算子は、 – sourpatchkiddo

関連する問題