0

次のコードを使用して、すべての言語変数と値を MySQL データベースから取得し、編集用のフォームに入力しています。

function language() {

    $settings = array();
    $sql = "SELECT * FROM `languages`";
    $result = mysql_query($sql);
    // Mysql_num_row is counting table row
    while ($row = mysql_fetch_assoc($result)) {

        ?>

            <div style="float:left;width:250px;padding-left:15px"><label><?php echo $row['id'];?></label></div><div style="float:left;margin-left:0px;"><input type="text" name="<?php echo $row['id'];?>" value="<?php echo $row['value'];?>" /></div>

        <? php

    }
}

上記のフォームで行われた変更をデータベースに保存して、変更を加えて更新する基本的な機能があります。

function save_language() {

    $post = $_POST;
    $out = array_shift($post);

    // Mysql_num_row is counting table row
    foreach($post as $key => $value) {
        $sql = "UPDATE `languages` SET `value`='$value' WHERE `id`='$key'";
        $result = mysql_query($sql);
    }

    if ($result) {
        echo "Language Settings Updated";
    }

}

この方法は機能しますが、非常に遅いです。私はコーディングが初めてで、保存プロセスを高速化する単純なものを見落としていると確信しています。

4

1 に答える 1

0

接続が関数の範囲外であるため、クエリは実際には機能しないはずです。接続を渡す正しい方法は、関数を使用することです。

function language( $conn ) {
    ...
}

インジェクションの脆弱性と機能の廃止により、コードの使用を直ちに停止する必要がありmysql_ます。代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。

更新しているレコードの数と作成している接続の数によっては、スクリプトの速度が低下する場合があります。

記録したい場合INSERTは、準備済みステートメントを使用する必要があります。

また、結果の行数をどこにも使用していないため、関数// Mysql_num_row is counting table rowのコメントがわかりません。save_language

于 2013-02-21T02:49:29.153 に答える