0

すでにデータベースにあるが、配列を使用している情報を更新したい。データベース内のデータが更新されないという「正常に更新されました」というメッセージが表示されます。

以下は、挿入を行うために使用する関数です。

function update_knowledge_modules($update_data,$value)
{   
    $update = array();
    array_walk($update_data,'array_clean');

    foreach($update_data as $field=>$data)
    {
        $update[] = '.$field. = \''.$data.'\'';
    }



    $query = "UPDATE knowledge_modules SET".implode(', ',$update)."WHERE curr_code =$value";

    mysql_query($query)
    or die(mysql_error);

}

<?php

                    if(isset($_GET['success']) == true && empty($_GET['success'])==true)
                        {
                            echo 'Changed successfully';    
                        }
                    else
                        {
                            if(empty($_POST)== false && empty($errors)== true ) 
                                {
                                    $update_module = array(
                                    'KM_Number'=>$_POST['KM_Number'],
                                    'KM_Title'=>$_POST['KM_Title'],
                                    'NQF_Level'=>$_POST['NQF_Level'],
                                    'Credits'=>$_POST['Credits']


                                    );

                                    update_knowledge_modules($update_module,$_SESSION['Curr_Code']); 
                                    header('Location:edit_km_details.php?success');
                                    exit();
                                }
                        else if(empty($errors)== false)
                            {
                                echo output($errors);
                            }

              ?>

            <form action="edit_km_details.php" method="POST">
4

2 に答える 2

1

さて、まず第一に、あなたは真実であるということだけに基づいて「正常に変更されました」というメッセージを出力し$_GET['success']ています。update_knowledge_modules関数呼び出しが成功したか失敗したかはまったく関係ありませんが、これは奇妙に思えます。

第二に、あなたが実際にデータベース接続を行っている場所はどこにも見当たりません。

第三に、あなたのクエリは間違いなく不適切に形成されています。これを見てください:

$update[] = '.$field. = \''.$data.'\'';

$fieldクエリ文字列にリテラルとバックスラッシュを取得します。これを試して:

$update[] = $field . " = '" . $data . "'";

また、展開された配列を最後のクエリに配置する場合SET、前後にスペースはありませんWHERE

クエリで問題が発生した場合は、クエリをvar_dumpデータベースで直接実行して、クエリが機能しない理由を確認し、mysqlエラーを含むエラーを確認してください。

mysql_*最後に、関数ファミリーを使用するべきではありません。それらは非推奨です。

于 2012-12-13T17:55:31.530 に答える
0

試す:$update[] = $field . " = '" . $data . "'";

出力:

Array
(
    [0] => KM_Number = 'blah'
)
于 2012-12-13T17:53:40.897 に答える