Внешний цикл переменной

#php #javascript

#php #javascript

Вопрос:

Как я мог бы наилучшим образом передавать данные через переменную, которая вложена в цикл ‘while’, но вызывается вне его? Как в этом примере:

PHP:

  $fr_q2 = mysqli_query($connect,"SELECT * FROM friends WHERE username ='".$_SESSION['user']."'   
 ORDER BY id DESC");
 while ($rowsPicFr2 = mysqli_fetch_array($fr_q2)) {

 $friends_q2[] = $rowsPicFr2['added_friend'];
 $frn[] = $rowsPicFr2['added_friend'];
 $frn2 = $rowsPicFr2['added_friend'];
 }

 $rowscheck = mysqli_num_rows($fr_q2);
 for ($i=0; $i<$rowscheck; $i  )
 

HTML:

  <a href="#" onclick="remdata(<?php echo $frn[$i]; ?>)">YES</a>
 

Итак, мне нужно передать $frn[$i] в функцию remdata() — но $frn[$ i] должен выполняться цикл….Все, что я получаю, это строка всех идентификаторов из ‘friend_added’ в $ frn [$ i] ….Спасибо.

Комментарии:

1. PHP не будет выполнен после отправки HTML-кода в браузер. PHP будет выполняться на стороне сервера, а JavaScript — на стороне клиента!

Ответ №1:

Как только этот HTML-код будет отправлен в браузер, он больше не будет зацикливаться. Это будет просто HTML. Итак, что вам нужно сделать, это либо выполнить цикл в JavaScript, либо просто повторить каждый remdata():

 <a href="#" onclick="<?php foreach($frn as $f) echo "remdata({$f});"; ?>">YES</a>
 

Это решение действительно возможно только в том случае, если у вас очень мало элементов в $frn.

Комментарии:

1. Привет … я понимаю вашу точку зрения здесь — отличное решение, но оно повторяет все идентификаторы сразу (один за другим) Я забыл упомянуть, что мне нужен определенный идентификатор после каждого клика <a href>. Ссылки — это фотографии пользователей, и мне нужно, чтобы remdata() отображала правильный идентификатор onclick … но теперь мне удалось обойти это, поместив в PHP другую функцию javascript, которая передает идентификаторы по значению в HTML link…

2. Ах, теперь я понимаю, чего вы хотите: вы хотите, чтобы ссылка на remdata() каждый раз при нажатии на нее меняла значение?

Ответ №2:

Ваш вопрос сбивает с толку; Я думаю, вам нужен цикл для вывода HTML

 <?php foreach ($frn as $i => $friend_id){ ?>
    <a href="#" onclick="remdata(<?php echo $friend_id; ?>)">YES</a>
<?php } ?>
 

Судя по вашему комментарию в ответе toon81, похоже, что у вас возникла проблема с несколькими циклами в вашем выводе, которые имеют дело с одним и тем же набором результатов в вашем запросе к базе данных. Я не уверен. Я бы посоветовал в будущем, чтобы вы попытались упростить свой вопрос. Например, нужно ли нам знать, что это приложение для социальных сетей? Ваши имена переменных по своей сути нелегко понять; в чем разница между $frn и $ frn2? Предположительно, это «друг», но я продолжаю читать его как «папоротник». Вы также предоставили только одну строку своего вывода, но ваша проблема, похоже, связана с ее взаимодействием с другим выводом. Ваш код отключен — цикл проверки строк не имеет определения.

Тем не менее, это высокоуровневое предложение о том, как я бы справился с вашей работой по-другому. Подготовка данных:

 $connection = ...;
$user = $_SESSION['user'];
$sql = "
    SELECT added_friend
    FROM friends
    WHERE username = '$user'
    ORDER BY id DESC
";
$response = mysql_query($sql, $connection);

$added_friends = array();
while ($row = mysql_fetch_object($response)){
    $added_friends[] = $row->added_friend;
}
 

Обработка вывода:

 // With one loop if the markup can be ouput all at once.
foreach ($added_friends as $friend){
    // Your 'friends_q2', whatever that is.
    echo "Friends_q2: $friend";

    // Your 'frn2' output, whatever that is.
    echo "Frn2: $friend";

    // Your 'frn' output.
    echo "<a href="#" onclick="remdata($friend)">YES</a>";
}


// ...or multiple loops if it can't.
foreach ($added_friends as $friend){
    // Your 'friends_q2', whatever that is.
    echo "Friends_q2: $friend";
}

foreach ($added_friends as $friend){
    // Your 'frn2' output, whatever that is.
    echo "Frn2: $friend";
}

foreach ($added_friends as $friend){
    // Your 'frn' output.
    echo "<a href="#" onclick="remdata($friend)">YES</a>";
}
 

В любом случае вы обрабатываете один и тот же идентификатор три раза в разных списках и по-разному. Я совсем не уверен, почему. Это то, с чем вы просите о помощи?

Комментарии:

1. Я изменил свой ответ, чтобы дать вам совет.