Moaz Walid Mabrok Ответов: 1

While loop не работает в функции PHP


Цикл while отлично работает в этом примере.



                $query="SELECT * FROM `ex`";
    $result=mysqli_query($link, $query);

    $Q_X='Q1';
                $res=array(0,0,0,0,0);
            while($report=mysqli_fetch_array($result)){
                print_r($report[$Q_X].'<br>');

                if($report[$Q_X]=='X1'){
                    $res[0]=$res[0]+1;

                }elseif($report[$Q_X]=='X2'){
                    $res[1]=$res[1]+1;

                }elseif($report[$Q_X]=='X3'){
                    $res[2]=$res[2]+1;

                }elseif($report[$Q_X]=='X4'){
                    $res[3]=$res[3]+1;

                }elseif($report[$Q_X]=='X5'){
                    $res[4]=$res[4]+1;
                }
            }
list($Q1_1,$Q1_2,$Q1_3,$Q1_4,$Q1_5) = $res;

echo $Q1_1.',';
echo $Q1_2.',';
echo $Q1_3.',';
echo $Q1_4.',';
echo $Q1_5;



но когда я пытаюсь поместить его в функцию in не работает



               $query="SELECT * FROM `ex`";
    $result=mysqli_query($link, $query);

        function count_vote($Q_X) {
            $cont=0;

            $res=array(0,0,0,0,0);
            while($report=mysqli_fetch_array($result)){

                if($report[$Q_X]=='X1'){
                    $res[0]=$res[0]+1;

                }elseif($report[$Q_X]=='X2'){
                    $res[1]=$res[1]+1;

                }elseif($report[$Q_X]=='X3'){
                    $res[2]=$res[2]+1;

                }elseif($report[$Q_X]=='X4'){
                    $res[3]=$res[3]+1;

                }elseif($report[$Q_X]=='X5'){
                    $res[4]=$res[4]+1;
                }
            }
            if(mysqli_num_rows($result)==$cont){
            return $res;
            }
        }


count_vote("Q1");
list($Q1_1,$Q1_2,$Q1_3,$Q1_4,$Q1_5) = $res;

echo $Q1_1.',';
echo $Q1_2.',';
echo $Q1_3.',';
echo $Q1_4.',';
echo $Q1_5;

Я использую массив для получения нескольких возвращаемых значений

и если, чтобы предотвратить функцию от выхода, прежде чем цикл while заканчивается

Я пытаюсь превратить его в функцию, чтобы использовать его несколько раз на Q1,Q2,..

может ли кто-нибудь помочь мне найти эту проблему

----------------- таблица mysql-----------------

................... В1 . Q2 . Q3. Q4
----------------------------------------
......пользователь1 | Х1 . Х3 . X5. X4

......пользователь2 | Х2 . Х2 . X3. X2

......пользователь3 | Х1 . Х1 . X1. X1


Я хочу получить этот курорт

Q1- - - > X1 > 2
---> X2 > 1
---> X3 > 0
---> X4 > 0
---> X5 > 0

Q2- - - > X1 > 1
---> X2 > 1
---> X3 > 1
---> X4 > 0
---> X5 > 0
Q3, Q4....


while loop не работает в функции php

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

 <?php include '../mysqCode/masterlink.php';mysqli_set_charset($link,'utf8');
	if (mysqli_connect_error()){
		die("Coud not connect to Database,server error");

	}else{
		
$query="SELECT * FROM `ex`";
$result=mysqli_query($link, $query);
			        
function count_vote($result ,$Q_X)
{
    $res = array(0, 0, 0, 0, 0);
    while ($report = mysqli_fetch_array($result)) {
        if ($report[$Q_X] == 'X1') {
            $res[0] = $res[0] + 1;

        } elseif ($report[$Q_X] == 'X2') {
            $res[1] = $res[1] + 1;

        } elseif ($report[$Q_X] == 'X3') {
            $res[2] = $res[2] + 1;

        } elseif ($report[$Q_X] == 'X4') {
            $res[3] = $res[3] + 1;

        } elseif ($report[$Q_X] == 'X5') {
            $res[4] = $res[4] + 1;
        }
    }
    if (mysqli_num_rows($result) > 1) {
        return $res;
    }
}



list($Q1_1, $Q1_2, $Q1_3, $Q1_4, $Q1_5) = count_vote($result ,"Q1");

echo $Q1_1 . ',';
echo $Q1_2 . ',';
echo $Q1_3 . ',';
echo $Q1_4 . ',';
echo $Q1_5;

list($Q2_1, $Q2_2, $Q2_3, $Q2_4, $Q2_5) = count_vote($result ,"Q2");

echo $Q2_1 . ',';
echo $Q2_2 . ',';
echo $Q2_3 . ',';
echo $Q2_4 . ',';
echo $Q2_5 . '<br>';
		
		
		    
		    
		    
		    
	}
	
	
		    
?>


кулак один работает а остальные нет

1 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

Мы не знаем состояния объектов $report и $result в момент вызова функции.

Если вы хотите увидеть, что именно не так или что делает эти два случая разными, используйте отладчик. Сама идея передачи данных через внешний контекст ошибочна, даже если она может сработать. Вам действительно нужно передать ссылку на эти объекты в качестве параметров функции. Допустимым альтернативным способом является передача данных/ссылок через члены класса, либо явно, через наличие параметра функции некоторого типа класса, либо неявно, делая вашу функцию членом того же класса, что и объекты, используемые в реализации функции, доступ к которым затем будет осуществляться через "это".

—СА


Moaz Walid Mabrok

Я улучшил вопрос `Что я пробовал"

Sergey Alexandrovich Kryukov

Вы сделали $result параметром, но этого недостаточно.
Как правило, ваш код слишком жестко закодирован, чтобы его можно было поддерживать.
—СА

Moaz Walid Mabrok

можете ли вы исправить код в качестве решения спасибо

Sergey Alexandrovich Kryukov

Нет, потому что у меня нет всего вашего контекста. Я дал вам точные инструкции, пожалуйста, следуйте им. Именно это и означает" ответить на вопрос".
—СА

Moaz Walid Mabrok

- да. http://phpcodechecker.com` я не нашел ничего плохого в коде, и мне очень жаль, но я не понимаю ту часть о "членах класса` и" создании вашей функции членом того же класса, что и объекты " - если бы я знал, как это сделать, я бы не спрашивал -

Sergey Alexandrovich Kryukov

Какую часть вы не понимаете? Знаете ли вы, как писать и использовать классы? $это, $Это - >..?
Вы понимаете первый вариант: просто передать все, что вам нужно, через параметры?
—СА

Moaz Walid Mabrok

нет, я не умею писать классы ,это мой десятый день с тех пор, как начал полагаться на PHP

Sergey Alexandrovich Kryukov

Хорошо, вы узнаете это позже. И чем, пожалуйста, вернитесь к моему ответу.

Десять дней - очень короткий срок. Тогда я бы посоветовал изменить способ обучения. Пока вы не прочитаете какую-нибудь книгу или учебник по PHP, не пропуская ни слова, выполняйте как можно более простые упражнения, в основном по темам каждой изучаемой вами главы. Он должен сопровождаться изучением основ веб-программирования и общего программирования. Только после этого этапа вы сможете более эффективно выполнять более сложные задачи и более продуктивно задавать вопросы. Не торопитесь, изучите основы более тщательно, сосредоточьтесь на них. Скоро это окупится. И если вы упустите некоторые основы сейчас, ваша будущая работа может превратиться в пустую трату времени; не делайте этой ошибки.

—СА

Moaz Walid Mabrok

Спасибо, можете ли вы порекомендовать место для углубленного изучения PHP и python, я использую udemy и lynda

Sergey Alexandrovich Kryukov

К сожалению, нет. Я непосредственно использовал http://php.net и https://www.python.org, но то, что нужно, зависит от предыдущего образования/опыта.
—СА