-5

次のエラーが表示されます。

警告: mysql_real_escape_string() は、パラメーター 1 が文字列であると想定し、配列は bla bla で指定されます

これを生成するコードは次のとおりです。

if($_POST['action'] == 'Napadi') {

    $igralec_ime = $_SESSION['username'];
    $igralec = array (
                      'ime'         => $igralec_ime,
                      'napad'   => prikazi_stat('ofe',$igralec_ime),
                      'obramba' => prikazi_stat('def',$igralec_ime),
                      'curhp'       => prikazi_stat('curhp',$igralec_ime)
                     );

    $monster_ime = $_POST['monster'];
    $monster = array (
                      'ime'         => $monster_ime,
                      'napad'   => prikazi_monster_stat('ofe',$monster_ime),
                      'obramba' => prikazi_monster_stat('def',$monster_ime),
                      'curhp'       => prikazi_monster_stat('maxhp',$monster_ime)
                     );       

    $combat = array();
    $turns = 0;     
    while($igralec['curhp'] > 0 && $monster['curhp'] > 0) {

        if($turns % 2 != 0) {
            $napadalec = &$monster;
            $branilec = &$igralec; } 
        else {
            $napadalec = &$igralec;
            $branilec = &$monster; }

        $damage = 0;    
        if($napadalec['napad'] > $branilec['obramba']) {
            $damage = $napadalec['napad'] - $branilec['obramba']; }

        $branilec['curhp'] -= $damage;
        $combat[$turns] = array(
            'napadalec' =>  $napadalec['ime'],
            'branilec'  =>  $branilec['ime'],
            'damage'    =>  $damage
                               )

        $turns++; }

$_SESSION['monster'] = $monster;

上記のコードは、ご覧のとおり変数 $monster を配列に配置します。このページがビュー ページにリダイレクトされ、関数update_save($igralec_ime, 'gozd', $monster);を更新しようとすると、上記の警告が表示されます。これは、ページが次のような一連のモンスター変数を返すためです。

Matic napade Velikanski komar in mu napravi poškodbe za 2 točk zdravja

Velikanski komar napade Matic in mu napravi poškodbe za 1 točk zdravja

Matic napade Velikanski komar in mu napravi poškodbe za 2 točk zdravja

Velikanski komar napade Matic in mu napravi poškodbe za 1 točk zdravja

などですが、直し方がわかりません。この出力配列を文字列に戻す必要がありますか?

編集: 問題のある機能を持つコード

function update_save($igralec_name, $lokacija, $monster_name = null) {
ustvari_save($igralec_name, $lokacija, $monster_name);
$query = sprintf("UPDATE igralec_save SET lokacija = '%s', monster_name = '%s' WHERE igralec_name = '%s'",
    mysql_real_escape_string($lokacija),
    mysql_real_escape_string($monster_name),
    mysql_real_escape_string($igralec_name));
$result = mysql_query($query);
}
4

1 に答える 1

1

$monsterが配列で、名前が示すように文字列を受け取る場合mysql_real_escape_stringは、文字列を渡す必要があります。

関数はを受け取るので、おそらく配列$monster_nameからそれを取得する必要がありますか?$monster

次のようなもの(例として、コードのアイデアがなくても、コピーして貼り付けないでください:)):

update_save($igralec_ime, 'gozd', $monster['ime']);
于 2013-08-07T14:23:44.363 に答える