2016-05-29 10 views
1

特定の列のすべての行(レコード)を検索する関数を作成した場合、 は乱数を生成し、生成された乱数関数が存在しない場合は再帰関数 を再起動し、新しいものとして挿入します。データベースにINSERTが存在しない場合

$verifs = mysqli_query($conlink, 'SELECT verif FROM memebers'); 
$records = array(); 
while($record = mysqli_fetch_array($verifs,MYSQLI_NUM)) { 
    $records[] = $record[0]; 
} 
function randomize(){ 
    $rand= rand(1,5); 
    if(in_array($rand, $GLOBALS['records'])){ 
     randomize(); 
    }else{ 
     return $rand; 
    } 
} 
mysqli_query($conlink, "INSERT INTO `memebers`(`verif`) VALUES (".randomize().")"); 

iは番号iが私のPHPページ
更新するたびに加えなければなりませんし、それがそうであったことが予想さ、私は3つのまたは4の記録に達したときに、ページを更新しても、追加されません!したがって、returnステートメントは、関数が再帰的になるのを防ぐ必要があります。 私のロジックに何か間違っている ありがとう

+0

$レコードは$ GLOBALSに存在しますか? 'print_r($ GLOBALS ['records'])'を実行して、どのような出力が得られるか教えてください。 – Webeng

+0

私はうまくいくかもしれない答えを掲載しました。 – Webeng

+0

レコードは実際には存在しますが、最初は空白で、値を持つようになります。ページを更新し、 'in_array($ rand、global $ records)'を試しましたが、予期しないグローバルな構文エラーが発生しました。$ GLOBALSはexpected –

答えて

1

あなたはコールバック関数を正しく使用していないようです。あなたが知らなかった場合、関数内で関数を使うときは、実際にはその関数をパラメータの中に渡す必要があります。パラメータで機能を持っている機能コールバック関数と呼ばれ、次の記事でそれらについての詳細を読むことができます:What is a callback function and how do I use it with OOP

私は、次のコードをあなたのrandomize機能を変更します

function randomize($callbackRandomize){ 
    $rand= rand(1,5); 
    if(in_array($rand, $GLOBALS['records'])){ 
     return $callbackRandomize($callbackRandomize); 
    }else{ 
     return $rand; 
    } 
} 

最後のコード行を次のように変更してください:

mysqli_query($conlink, "INSERT INTO `memebers`(`verif`) VALUES (".randomize('randomize').")"); 

それがうまくいけば教えてください。

+0

きれいで完璧 –

+1

私は助けることができる喜んで:) – Webeng

関連する問題