0

セッションのデータでトランザクション テーブルの列を更新しようとしています。次のようにセッションデータを保存しています

$session_mem_id = $_SESSION['mem_id'];
$member_data  = member_data($session_mem_id, 'mem_id', 'mem_email', 'mem_password', 'mem_address', 'mem_city', 'mem_postcode', 'mem_county', 'mem_country', 'mem_first_name', 'mem_last_name', 'password_recover', 'allow_email', 'admin', 'mem_tel');

そして、このデータを使用して、次のようにテーブルを更新します

function createTransaction($member_data){
    // Insert into the transactions table
    $query1 = mysql_query("INSERT INTO `transactions` (mem_id, OrderDate, ship_phone, ship_address, ship_city, ship_county, ship_postcode, ship_country) VALUES('{$_SESSION['mem_id']}', NOW(), '{$member_data['mem_tel']}', '{$member_data['mem_address']}', '{$member_data['mem_city']}', '{$member_data['mem_county']}', '{$member_data['mem_postcode']}', '{$member_data['mem_country']}')") or die(mysql_error());
}

エラーは発生しませんが、テーブルで更新される唯一の列はmem_idorderdate、およびOrderIdであり、auto_incrementです。$member_data 私の場合、var_dump($member_data) に保存されているデータ解析はありません。次の結果が得られます。

array(14) { ["mem_id"]=> string(2) "11" ["mem_email"]=> string(26) "j.hfbgb92@gmail.com" ["mem_password"]=> string(8) "password" ["mem_address"]=> string(16) "54 bvcbv drive" ["mem_city"]=> string(9) "Mggbone" ["mem_postcode"]=> string(8) "gb14 4gb" ["mem_county"]=> string(4) "Kent" ["mem_country"]=> string(14) "United Kingdom" ["mem_first_name"]=> string(4) "Bob" ["mem_last_name"]=> string(12) "Smith" ["password_recover"]=> string(1) "0" ["allow_email"]=> string(1) "1" ["admin"]=> string(1) "1" ["mem_tel"]=> string(11) "07900186785" }

私の member_data 関数は function member_data($mem_id) { $data = array(); です。$mem_id = (int)$mem_id;

$func_num_args = func_num_args();
$func_get_args = func_get_args();

if($func_num_args > 1) {
    unset ($func_get_args[0]);

    $fields = '`' . implode('`, `', $func_get_args) . '`';
    $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM members WHERE mem_id = '$mem_id'"));

    return $data;
}
}
4

2 に答える 2

1

問題は、セッションが開始されていない可能性があります。

その場合:

session_start();

何かが出力される前に、問題を修正します。

の内容を出力して$_SESSION['mem_id'];から、データベースに保存して設定されていることを確認してください。

さらに、変数をデータベースに保存する前に、必ず変数をエスケープしてください。

したがって、変数の割り当ては次のようになります。

$session_mem_id = mysql_real_escape_string($_SESSION['mem_id']);

これは、 SQL インジェクション攻撃に対するセキュリティ対策です。

これが役立つことを願っています。

于 2013-03-13T10:51:44.357 に答える
0

クエリを次のように書き直してみます。

  $query = sprintf("INSERT INTO `transactions` (mem_id, OrderDate, ship_phone, ship_address, ship_city, ship_county, ship_postcode, ship_country) VALUES('%s','%s','%s','%s','%s','%s','%s','%s')", $_SESSION['mem_id'], NOW(), $member_data['mem_tel'], $member_data['mem_address'], $member_data['mem_city'], $member_data['mem_county'], $member_data['mem_postcode'], $member_data['mem_country']);
  $query1 = mysql_query($query) or die(mysql_error());

echoで始まるアフター行を挿入し$queryて、クエリステートメントが正しいことを確認することもできます。

于 2013-03-13T11:03:44.897 に答える