4

こんにちは

、フォームのこの部分では、mysql テーブルの列名 (コンピューターにインストールされているアプリケーションの名前) を表示し、YES/NO オプションまたは入力タイプ = "テキスト" ボックスを使用してフォームを作成し、アプリケーションに追加の権限を与えています

。 POST および mysql_query INSERT INTO????? を使用して、それを mysql テーブルに挿入します。
権限の有無にかかわらずアプリケーションを追加するための別のフォームがあるため、列の数が変更されています。

<tr bgcolor=#ddddff>';

//mysql_query for getting columns names
$result = mysql_query("SHOW COLUMNS FROM employees") or   die(mysql_error());   
while ($row = mysql_fetch_array($result))
{
    //exclude these columns bcs these are in other part of form
    if($row[0] == 'id' || $row[0] == 'nameandsurname' || $row[0] == 'department' 
            || $row[0] == 'phone' || $row[0] == 'computer'  || $row[0] == 'data') 
        continue;
    echo '<td bgcolor=#ddddff>'.$row[0].'<br />';

    if (stripos($row[0], "privileges") !== false) {
        echo '<td bgcolor=#ddddff><p><a class=hint href=#>
            <input type="text" name="'.$row[0].'">
            <span>Privileges like "occupation" or "like  someone"</span></a></p></td></tr>';
    }
    else
    {
        echo '<td bgcolor=#ddddff align=center><select name="'.$row[0].'">
            <option value = "No">No
            <option value = "Yes">Yes
            </td>
            </tr>';
    }
}

trim($_POST); // ????

$query = "INSERT INTO 'employees' VALUES (??)";  // ????
4

2 に答える 2

6

すべての列を挿入するわけではないため、挿入先の列を指定する挿入ステートメントを動的に作成する必要があります。

まず、使用する列の配列を作成します。これを使用して、フォームを生成し、値を取得します

$exclude = array("id", "nameandsurname", "departument", "phone", "computer", "date");
$result = mysql_query("SHOW COLUMNS FROM employees") or   die(mysql_error());
$columns = array();
while ($row = mysql_fetch_array($result)) {
    if (!in_array($row[0], $exclude) {
        $columns[] = $row[0];
    }
}

$columns配列からフォームをレンダリングします。

foreach ($columns as $column) {
    echo '<tr><td bgcolor="#ddddff">'.$column.'<br />';
    if (stripos($column, "privileges") !== false) {
        echo '<p><a class="hint" href="#">
                <input type="text" name="'.$column.'">
                <span>Privileges like "occupation" or "like  someone"</span></a>';
    } else {
        echo '<select name="'.$column.'">
                <option value = "No">No
                <option value = "Yes">Yes
              </select>';
    }
    echo '</td></tr>';
}

次に、それらの列に投稿された値から INSERT 文字列を動的に作成します。SQL インジェクションから保護してください。

$keys = array();
$values = array();
foreach ($columns as $column) {
    $value = trim($_POST[$column]);
    $value = mysql_real_escape_string($value);
    $keys[] = "`{$column}`";
    $values[] = "'{$value}'";
}
$query = "INSERT INTO 'employees' (" . implode(",", $keys) . ") 
          VALUES (" . implode(",", $values) . ");";

注: から選択するとINFORMATION_SCHEMA.COLUMNS、挿入先の列のタイプを知ることができます。そうすれば、すべてを引用する必要はありません。

于 2013-07-31T11:28:48.697 に答える