Довольно просто: ваш PHP-код выполняется ОДИН РАЗ при входе на сайт.
Так, например, результат этого блока
while($row = mysql_fetch_assoc($result)){
echo "<li onclick=\"toggle('hidden','hidden2','hidden3');\">".$row['name'].'<li>';
$query2 = "SELECT * FROM site WHERE eid = '".$row['id']."'";
//$query2 = "SELECT * FROM site WHERE eid = ".$row['id'];
//$result2 = mysql_query($query2) or die("query2 result error".mysql_error());
$result2 = mysql_query($query2) or die("query2 result error".mysql_error());
}
означает, что $result2
содержит все сайты последней компании в вашем списке. Затем он используется в следующем цикле для создания соответствующего списка сайтов. Посмотрите на источник сгенерированного файла HTML.
PHP - это язык на стороне сервера, код выполняется на сервере, и он не выполняется повторно вашими функциями Javascript (т.е. не выполняется в браузере).
После чего вы динамически загружаете данные с вашего сервера с помощью AJAX и переходите в сгенерированный HTML.
Edit:
Вы также можете сделать это без Ajax: переписать свой PHP следующим образом:
$sitequeries = array()
while($row = mysql_fetch_assoc($result)){
echo "<li onclick=\"showSites('sites_$row['id']');\">".$row['name'].'<li>';
$query = "SELECT * FROM site WHERE eid = '".$row['id']."'";
$sitequeries[$row['id']] = mysql_query($query2 or die("query2 result error".mysql_error());
}
и
<?php
foreach($sitequeries as $id => $query) {
echo "<ul class='sites' id='sites_$id'>";
while($row2 = mysql_fetch_assoc($query)){
//...
}
echo "</ul>";
}
?>
Это не рабочий пример, но он должен дать вам правильную идею. Вы должны настроить свой JS соответственно, чтобы показывать только соответствующие списки, например ::
function showSites(id) {
// Hide all lists with class 'site' here and only display the list with id 'id' e.g. 'sites_5'
}
Но учтите, что это не очень хорошее решение, если у вас много компаний, сайтов, сотрудников и т. Д., Поскольку генерация HTML может занять некоторое время. Тогда Ajax - лучший выбор.