2013-03-05 48 views
1

我正在使用一个非常基本的随机名称生成器。生成器工作得很好,并通过HTML表单提交按钮调用。现在,在用户想要保存名称的情况下,我将有第二个按钮,它将调用PHP邮件操作向该名称发送电子邮件。在添加邮件功能之前,我只是试图将变量存储在某个地方,以便我可以提醒它并验证是否可以控制它。在以下代码中,$ field2是由$ id_num定位的名称,它等于$ search_str。然后我尝试和分配$ FIELD2全局变量$ nameContainer:为PHP全局变量赋值以提醒

<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.` 
+0

右:'回声 “ID_NUM:” $ ID_NUM “SEARCH_STR:”。$ SEARCH_STR;'另外,为什么是$ field2在该行上的引号? – mkaatman 2013-03-05 01:08:43

+0

你确定每一行的第一个数据是一个数字,并且这些数字填充了区间[1,5189]? – 2013-03-05 01:16:57

+0

@Lewyx是的,我自己编译了csv。第一列填入ID号码,后面跟着更新的OP,名称,来​​源和含义。数字从1开始排除第一行。 – JTEngland 2013-03-05 03:25:59

回答

0

我想,你需要检查是否$nameContainer有内容,并打破循环:

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

但是,要使其工作,你需要用空字符串初始化$nameContainer

$nameContainer = ""; 
+0

这样做的好处,先生!非常感谢。 – JTEngland 2013-03-05 23:27:29

0

在我看来,你正在使用$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>" : ""; 
} 
} 
的$ nameContainer线可以粘贴的结果之前
+0

不幸的是,至少在格式化后,这是行不通的。在我的警报中,我仍然没有收到任何东西(即没有赋值给'$ nameContainer'),但是值永远不会分配给列表中的变量'$ id_num','$ field2'等。如果我将代码简化到上面的'array_rand'函数,然后只是回显列表中的四个变量,页面就会空白。 – JTEngland 2013-03-05 20:20:45