为PHP全局变量赋值以发出警告


Assigning a value to a PHP global variable to alert

我正在制作一个非常基本的随机名称生成器。生成器工作得很好,并由HTML表单提交按钮调用。现在,如果用户希望保存该名称,我将使用第二个按钮,该按钮将调用PHP邮件操作以通过电子邮件发送该名称。在添加邮件函数之前,我只是尝试将变量存储在某个地方,以便我可以提醒它并验证我对它的控制。在下面的代码中,$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.`

我认为,您需要检查$nameContainer是否有内容并打破循环:

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

但是,要使它工作,您需要用空字符串初始化$nameContainer:

$nameContainer = "";

在我看来,你正在使用$search_str随机选择一行($lines数组的一个元素)。你应该使用array_rand:

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>" : ""; 
}
}