2013-03-05 3 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, а не тот, который соответствует строке поиска. Я понимаю, что, вероятно, есть какая-то базовая логика, которую я здесь отсутствует, поэтому любая помощь приветствуется!

Update (образец 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

Прямо перед строкой $ nameContainer вы можете вставить результаты: 'эхо "ID_NUM:" $ ID_NUM "SEARCH_STR:"... $ SEARCH_STR,' Кроме того, почему это $ field2 в кавычки на этой строке? – mkaatman

+0

Вы уверены, что первые данные на каждой строке являются числом и что эти числа заполняют интервал [1,5189]? –

+0

@ Lewyx Да, я сам собрал csv. Первый столбец заполняется идентификационными номерами, а затем имя, происхождение и значение, например обновленный OP. Число начинается с 1, чтобы исключить первую строку. – JTEngland

ответ

0

Я думаю, вам нужно проверить, если $nameContainer имеет содержание и разорвать цикл:

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

Но, чтобы заставить его работать, вам нужно инициализировать $nameContainer с пустой строкой:

$nameContainer = ""; 
+0

Это трюк, сэр! Огромное спасибо. – JTEngland

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

К сожалению, по крайней мере, как вы его отформатировали, это не сработает. Я все еще ничего не получаю в своем предупреждении (т. Е. Значение не присваивается '$ nameContainer'), но тогда значения никогда не назначаются переменным' $ id_num', '$ field2' и т. Д. В списке. Если я упрощу код до вашей функции 'array_rand', как указано выше, а затем просто выделите четыре переменные в списке, страница вернется в прошлое. – JTEngland

Смежные вопросы