-1

こんにちは私はユーザーデータをデータベースに挿入する関数の使用に問題があります。クエリは2回実行されますが、なぜこれが発生しているのかわかりません。

私はこのコードを使用します:

if(empty($ _ POST ['submit'])=== false && empty($ errors)=== true){

$random = substr(str_shuffle('./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 22);;

$timezone = 'Europe/Berlin';
date_default_timezone_set($timezone);
$timestamp = time();
$time = date("d.m.Y - H:i:s", $timestamp);

$register_data = array(
    'a'     => $_POST['a'],
    'b'     => $_POST['b'],
    'c'     => $_POST['c'],
    'd'     => $_POST['d'],
    'e'     => $_POST['e'],
    'f'     => md5($_POST['password']),
    'g'     => md5($random),
    'h' => $time,
);
register_user($register_data);

if (register_user($register_data) === true) {
    echo "done";
}   
exit();

}

関数は次のとおりです。

function array_sanitize(&$item){
    global $db;
    return mysqli_real_escape_string($db, $item);
}

function register_user($register_data){
    global $db;
    array_walk($register_data, 'array_sanitize');

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    $insert = $db->query("INSERT INTO `table1` ($fields) VALUES ($data) "); 
    return (true);
}

ただし、この関数を置き換える場合:

function register_user($register_data){
    global $db;
    array_walk($register_data, 'array_sanitize');

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    $sql = "INSERT INTO `table1` ($fields) VALUES(?,?,?,?,?,?,?,NOW())";
        if($query = $db->prepare($sql)){
            $query->bind_param('sssssss', $data);
            $query->execute();

            if ($query->affected_rows == 1) {
                echo 'success';
            } else {
                echo 'nope';
            }
        }

    return (true);
}

配列$register_dataから最後のキーを削除してもまったく機能しません。

誰かが私を助けてくれるといいですね。

どうもありがとう。

4

2 に答える 2

4

これを2回呼び出しましregister_user($register_data);た。直接1回、ifステートメントの一部1回。

于 2013-03-01T19:23:15.880 に答える
0

i dont know php but try sth like this:

$result=register_user($register_data);

if ($result == true) {    
 echo "done";
}
于 2013-03-01T19:31:50.950 に答える