1

私は非常に基本的なランダムな名前ジェネレーターに取り組んでいます。ジェネレーターはうまく機能し、HTMLフォームの送信ボタンによって呼び出されます。これで、ユーザーが名前を保存したい場合に備えて、PHPメールアクションを呼び出して名前を電子メールで送信する2番目のボタンがあります。メール関数を追加する前に、変数をどこかに格納して、アラートを出し、制御できることを検証できるようにしようとしています。次のコードでは、$field2は$id_numによって配置される名前であり、$search_strと同じです。次に、$field2をグローバル変数$nameContainerに割り当ててみます。

<body>
<?
$nameContainer = "Mary";
?>

<? 
function loadName() {
global $nameContainer;
if(!empty($_POST['act'])) {
    $lineNum = rand(1, 5189);
    $search_str = $lineNum; 
    $lines = file('names_girls_5189_origin.csv'); 
    foreach($lines as $line){ 
        list($id_num, $field2, $field3, $field4)=explode(",",$line); 
        $nameContainer = ($id_num == $search_str) ? "$field2" : "";
        echo ($id_num == $search_str) ? 
            "<table style= 'height: 100%;'>
            <tr style='width: 100%; height= '200px';'>
            </tr>
            <center><span class='myText' style='color: white; font-size: 48px;'>$field2</span>
            <span style='color: #E8C8D5; font-size: 36px'>Smith</span><br/>
            <span class='myText' style='color: #2E7B4D; font-size: 24px;'>Origin: $field3</span><br/>
            <span class='myText' style='color: #2E7B4D; font-size: 24px;'>Meaning: $field4</span></center>
            </table>" : ""; 
    }
}
}
loadName();

?>

<script type="text/javascript">
function alertName() {
    alert("<? getName(); ?>");
}
</script>

<?
function getName() {
global $nameContainer;
echo $nameContainer;
}
?>

<center><form action="index.php" method="post">
<input type="hidden" name="act" value="run" />
<p><input type="submit" value="New" /></p>
</form>
</center>

<center><button onclick="alertName()">Alert</button></center>

</body>

私の問題は$nameContainer=($ id_num == $ search_str)に起因しているようです。"$ field2": ""; $ nameContainer =$field2であるため; 動作しますが、検索文字列に一致する名前ではなく、csv内の最後の名前を割り当てます。ここにはおそらくいくつかの基本的なロジックが欠けていることに気付いたので、助けていただければ幸いです。

更新(サンプルcsv):

ID,Name,Origin,Meaning
1,Aaliyah,"Arabic, Hebrew","high exalted, to ascend"
2,Akala,Aboriginal,A parrot.
3,Alba,Aboriginal,A sand hill. Also see Albina.
5188,Zelma,,A divine helmet. From the name Anselma. Also see Salima.
5189,Zola,,Life.`
4

2 に答える 2

0

$nameContainerコンテンツがあるかどうかを確認し、ループを解除する必要があると思います。

$nameContainer = ($id_num == $search_str) ? "$field2" : "";
if(!empty($nameContainer)){
    break;
}

$nameContainerただし、これを機能させるには、空の文字列で初期化する必要があります。

$nameContainer = "";
于 2013-03-05T01:23:08.980 に答える
0

ランダム$search_strに線(配列の要素)を選択するために使用しているように思われます。これにはarray_rand$linesを使用する必要があります。

function loadName() {
global $nameContainer;
if(!empty($_POST['act'])) {
    list($id_num, $field2, $field3, $field4)=explode(",",array_rand(file('names_girls_5189_origin.csv'))); 
    $nameContainer = $field2;
    echo "<table style= 'height: 100%;'>...</table>" : ""; 
}
}
于 2013-03-05T01:26:08.103 に答える