2013-03-05 71 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