Member 13605567 Ответов: 1

Я никак не могу понять, почему у меня такая бесконечная петля


Я знаю, что эвал опасен и зол, но мне нужно использовать это для этой ситуации. В принципе у меня есть две разные базы данных которые имеют одну и ту же структуру таблиц но с разными данными поэтому я использовал a для каждой из них

цикл для доступа к обеим базам данных и цикл while для отображения всех результатов баз данных, и я использовал eval, чтобы сделать переменные уникальными друг от друга. Кажется, все работает хорошо,

пока я не загружаю страницу, и нет никаких ошибок, но страница переходит в бесконечный цикл, и она просто продолжает генерировать значение первых строк, которое никогда не прогрессирует, показывая значение следующих строк, так как же я могу структурировать это лучше, чтобы я не оказался в бесконечном цикле?

Это мой код.

<?php
    
    $search_user_input='a';
    
    $array_of_user_xs_database_name = array('agency_clients','agency_models');
    $array_of_user_xs = array('client','model');
    
    $iterator = new MultipleIterator();
    $iterator->attachIterator(new ArrayIterator($array_of_user_xs_database_name));
    $iterator->attachIterator(new ArrayIterator($array_of_user_xs));
    
    foreach($iterator as $index => $value){ 
    
    $user_xs_database_name= $value[0];
    $user_x= $value[1];
    $User_x= ucfirst($user_x);
    
    eval('
    $db_servername_getSearched'.$User_x.'="localhost";
    $db_username_getSearched'.$User_x.'="jd";
    $db_password_getSearched'.$User_x.'="1234";
    $db_name_getSearched'.$User_x.'= $user_xs_database_name;
    
    $db_connect_getSearched'.$User_x.'= new mysqli ($db_servername_getSearched'.$User_x.',$db_username_getSearched'.$User_x.',$db_password_getSearched'.$User_x.',
    $db_name_getSearched'.$User_x.');
    
    $db_query_getSearched'.$User_x.'= "SELECT uid, photo, CONCAT(first_name, \' \', last_name) AS name, signature_name, phone_number, email 
    FROM '.$user_x.'s WHERE CONCAT_WS(\' \','.$user_x.'s.first_name,'.$user_x.'s.last_name) LIKE \'%".$search_user_input."%\' 
    OR signature_name LIKE \'%".$search_user_input."%\' OR phone_number LIKE \'%".$search_user_input."%\' OR email LIKE \'%".$search_user_input."%\'";
    
    $db_result_getSearched'.$User_x.'= $db_connect_getSearched'.$User_x.'->query($db_query_getSearched'.$User_x.');
    ');
    
    $mysqli_result= eval('return $db_result_getSearched'.$User_x.';');
    
    if($mysqli_result-> num_rows >= 1){
    	
    $mysqli_row= eval('return $db_row_getSearched'.$User_x.'= $db_result_getSearched'.$User_x.'->fetch_assoc();');
    
    while($mysqli_row){
    
    ?>
    
    <h1>
    <?php 
    
    $photos= eval('return $db_row_getSearched'.$User_x.'["photo"];');
    echo $photos;
    ?>
    
    </h1>
    
    <?php
    }
    }
    }
    
    ?>


Что я уже пробовал:

Ходил на другие форумы задавать вопросы без хороших ответов и даже сделал поиск в Google.

Mohibur Rashid

Это абсолютный кошмар. Мой кошмар лучше, чем заявление об оценке, которое вы написали. Просто попробуйте представить себе 10 000 строк среднего веб-приложения.

И ваш цикл while не имеет стратегии выхода.

Member 13605567

Спасибо за ваш ответ Мохибур Рашид. Я не думаю, что вы понимаете, почему я хочу использовать eval для этого. Я использование eval, так что я могу иметь уникальные переменные, потому что позже вниз по дороге я хочу, чтобы вызвать определенную группу переменную например $db_row_getSearched'$.User_x.' на самом деле означает это $db_row_getSearchedClient или этот $db_row_getSearchedModel потому что если позже вниз по дороге я хочу позвонить $db_row_getSearchedClient['имя'];

CHill60

Mohibur не увидит вашего ответа - используйте ссылку "ответить" рядом с комментарием, чтобы уведомить участника, которому вы отвечаете.
Однако его точка зрения справедлива - у вас нет стратегии выхода из петли

Mohibur Rashid

https://stackoverflow.com/questions/4631246/risks-of-using-php-eval
прочтите эту тему о том, почему бы не использовать eval. Ваша проблема может быть решена с помощью альтернативной идеи. обдумайте свои идеи.

ZurdoDev

Или вы можете им это объяснить.

1 Ответов

Рейтинг:
1

DerekT-P

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

while($mysqli_row){
    ?>    
    <h1>
    <?php 
    
    $photos= eval('return $db_row_getSearched'.$User_x.'["photo"];');
    echo $photos;
    ?>
        </h1>
        <?php
    }
Ваш цикл продолжается на основе значения $mysqli_row, но нигде в цикле это значение не изменяется; поэтому, однажды введенное, вы никогда не покидаете его. Не тратя много времени (и задавая вам гораздо больше вопросов о ваших базах данных и о том, что вы пытаетесь сделать), у меня есть подозрение, что если вы измените while к if вы получите желаемый результат - хотя, как уже говорили другие респонденты, я бы настоятельно рекомендовал найти альтернативный подход!


Member 13605567

Спасибо за ответ @DerekTP123 я не уверен, что вы это видели, так что это то, что я сказал ранее, я не думаю, что вы, ребята, понимаете, почему я хочу использовать eval для этого. Я использование eval, так что я могу иметь уникальные переменные, потому что позже вниз по дороге я хочу, чтобы вызвать определенную группу переменную например $db_row_getSearched'$.User_x.' на самом деле означает это $db_row_getSearchedClient или этот $db_row_getSearchedModel потому что если позже вниз по дороге я хочу позвонить $db_row_getSearchedClient['имя'];

DerekT-P

Ну, надеюсь, ваша проблема все равно будет решена - пожалуйста, отметьте ее как таковую, если бесконечный цикл будет разрешен. Да, я читал то, что вы написали об Эвале, но есть больше способов, чем один, чтобы чего-то достичь. Eval может быть полезен, но вы еще не убедили нас, что это лучший вариант в данном конкретном случае!