Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
1

switch case в mysql_fetch_array

20.02.2014, 13:09. Показов 818. Ответов 10
Метки нет (Все метки)

Имеется столбец в БД - extension (пример данных: .jpg+.vsd+.docx+)
Я хочу вывести расширение для каждой записи из бд со следующей проверкой, например:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
switch ($out[$i]['nameextension'][$j]) {
                    case ".docx":
                    echo "Word";
                    break;
                    
                    case ".xsn":
                    echo "InfoPath";
                    break;
                    
                    case ".txt":
                    echo "Текстовый файл";
                    break;
                }
Работает, только для самой первой записи в БД (mysql_fetch_array), последующие записи пропускает проверку switch, почему? И как сделать, чтобы проверка была для каждой записи из БД. Вырезал много кода, чтобы было наглядней читать, остальные данные выводятся нормально (несколько записей, не одна), но расширение определяет только в первой попавшийся выборке.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
$out = array();
$textQuery = mysql_query("SELECT * FROM history_scen", $db);
 
if(mysql_num_rows($textQuery) > 0) 
{
    $i = 0;
 
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        $string_extension = $textSQL["extension"];
        $name_extension = explode("+", $string_extension);
 
        $out[$i]["nameextension"] = array();
 
        for($x = 0; $x < count($names); $x++)
        {
            if(name_extension[$x] != "")
            {
                $out[$i]["nameextension"][] = $name_extension[$x];
            }
        }
        $i++;
    }
}
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        if(!empty($out[$i]["nameextension"]))
        {
            echo "<strong>Прикрепленные файлы:</strong><br>";
            for($j = 0; $j < count($out[$i]["nameextension"]); $j++)
            { 
                switch ($out[$i]['nameextension'][$j]) {
                    case ".docx":
                    echo "Word";
                    break;
                    
                    case ".xsn":
                    echo "InfoPath";
                    break;
                    
                    case ".txt":
                    echo "Текстовый файл";
                    break;
                }
            }
        }
    }
}
?>
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2014, 13:09
Ответы с готовыми решениями:

Из If/else в switch/case
Необходимо добавить 3й вариант/язык (de) в этот код: if ($user_lang_settings) { ...

Switch case
Добавила на одной странице 2 конструкции switch case. Проблема в том что когда вывела значения по...

Порядок case'ов в switch'е
Добрый день такой вопрос есть цикл switch. И вот обычно идет такой порядок в switch 1.2.3.4.5 это...

Switch case break
Привет всем. У меня есть вопрос, можно ли добавить часть кода case - break в switch находящуюся...

10
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
20.02.2014, 13:51 2
SLameN а зачем обязательно switch использовать, почему бы не if? или не создать массив вида "расширение"=>"значение" или вообще кучу всяких расширений положить в базу и их оттуда вытаскивать?

но по теме, есть у меня подозрения, что "break" завершает не только исполнение switch, но и цикла заодно.
для начала надо посмотреть, работает ли с if
PHP
1
2
3
4
5
6
7
8
9
10
11
12
if($out[$i]['nameextension'][$j] == ".docx")
{
     echo "Word";
}
else if($out[$i]['nameextension'][$j] == ".txt")
{
     echo "Текстовый файл";
}
else if(...)
{
     ........
}
0
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
20.02.2014, 13:58  [ТС] 3
Привет mav Пробовал if не работает с ним тоже. Насчет базы не буду загоняться, мне нужно чтук 7 расширений
0
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
20.02.2014, 14:11 4
Цитата Сообщение от SLameN Посмотреть сообщение
Привет mav Пробовал if не работает с ним тоже. Насчет базы не буду загоняться, мне нужно чтук 7 расширений
вот тут ошибку вижу
PHP
1
2
3
4
5
6
7
8
9
10
11
$name_extension = explode("+", $string_extension);
 
$out[$i]["nameextension"] = array();
 
for($x = 0; $x < count($name_extension); $x++)
{
    if($name_extension[$x] != "")
    {
        $out[$i]["nameextension"][] = $name_extension[$x];
    }
}
0
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
20.02.2014, 14:28  [ТС] 5
Ты имеешь ввиду что в for где $x там count($names) вместо count($name_extension)? Тут ошибся именно во вставке кода на форум. Если посмотреть полностью код, то там все верно, считает кол-во count($names), потому что оно будет одинаково с $name_extension. Вот на всякий случай полностью код

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
$out = array();
$textQuery = mysql_query("SELECT * FROM history_scen WHERE filial='$filial_site' AND num_filial='$num_filial' ORDER BY id DESC", $db);
 
if(mysql_num_rows($textQuery) > 0) 
{
    $i = 0;
 
    while($textSQL = mysql_fetch_array($textQuery, MYSQL_ASSOC)) 
    {
        $out[$i]["text"] = $textSQL["text"];
        $out[$i]["fio"] = $textSQL["fio"];
        $out[$i]["id"] = $textSQL["id"];
        $date = date('d.m.y в H:i', strtotime($textSQL["date"]));
        $out[$i]["date"] = $date;
        
        $string = $textSQL["fileName"];
        $names = explode("+", $string);
  
        $string_new = $textSQL["fileLink"];
        $links = explode("+", $string_new);
        
        $string_extension = $textSQL["extension"];
        $name_extension = explode("+", $string_extension);
 
        $out[$i]["filename"] = array();
        $out[$i]["filelink"] = array();
        $out[$i]["nameextension"] = array();
 
        for($x = 0; $x < count($names); $x++)
        {
            if($names[$x] != "" && @$links[$x] != "")
            {
                $out[$i]["filename"][] = $names[$x];
                $out[$i]["filelink"][] = $links[$x];  
                $out[$i]["nameextension"][] = $name_extension[$x];
            }
        }
        $i++;
    }
}
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        echo "<div style='border-bottom: 1px dotted gray; margin-bottom: 20px; padding: 10px 5px;'>";
        echo "№".$out[$i]['id']."<br>";
        echo "<strong>Автор:</strong> ".$out[$i]['fio']."<br>";
        echo "<strong>Создан:</strong> ".$out[$i]['date']."<br>";
        echo "<strong>Описание:</strong><br>".$out[$i]['text'];
 
        if(!empty($out[$i]["filename"]))
        {
            echo "<strong>Прикрепленные файлы:</strong><br>";
            for($j = 0; $j < count($out[$i]["filename"]); $j++)
            { 
if($out[$i]['nameextension'][$j] == ".docx")
{
echo "Word";
}
else if($out[$i]['nameextension'][$j] == ".txt")
{
echo "Текстовый файл";
}
                echo "<a href='/history_scen/file/".$out[$i]["filelink"][$j]."'>".$out[$i]["filename"][$j]."</a><br>";
            }
        }
        echo "</div>";
    }
}
?>
0
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
20.02.2014, 14:57 6
SLameN а если без проверки вывести расширения файлов, то тогда список нормально отображается?
ну если
PHP
1
2
3
4
5
for($j = 0; $j < count($out[$i]["filename"]); $j++)
{ 
echo "<b>".$out[$i]['nameextension'][$j]."</b>";
echo "<a href='/history_scen/file/".$out[$i]["filelink"][$j]."'>".$out[$i]["filename"][$j]."</a><br>";
}
0
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
20.02.2014, 15:04  [ТС] 7
да, все корректно работает

Добавлено через 2 минуты
Не получается отредактировать пост. Не о том подумал. Расширение выводится только в 1 случае, в остальных выводится все, кроме расширения
0
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
20.02.2014, 16:13 8
Цитата Сообщение от SLameN Посмотреть сообщение
Расширение выводится только в 1 случае, в остальных выводится все, кроме расширения
похоже, что массив заполняется только на 1 элемент, а не ругается, что нет остальных, потому что ошибки выключены в начале скрипта надо написать error_reporting(E_ALL); и посмотреть, что он выдаст при выполнении
0
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
20.02.2014, 16:15  [ТС] 9
Написал в самое начало php, повторил запрос и никаких ошибок не вывело
0
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
20.02.2014, 17:33 10
Цитата Сообщение от SLameN Посмотреть сообщение
Написал в самое начало php, повторил запрос и никаких ошибок не вывело
похоже, что проблема с данными в базе. вот тут я выкинул работу с базой и просто вставил какое-то текстовые значения и все работает
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
error_reporting(E_ALL);
 
$out = array();
$i = 0;
 
while($i < 2)
{ 
    $out[$i]["text"] = "text";
    $out[$i]["fio"] = "fio";
    $out[$i]["id"] = "id".$i;
    $date = date('d.m.y в H:i', 1234567890);
    $out[$i]["date"] = $date;
        
    $string = "1.docx+2.txt+3.xls+";
    $names = explode("+", $string);
  
    $string_new = "1.docx+2.txt+3.xls+";
    $links = explode("+", $string_new);
        
    $string_extension = ".docx+.txt+.xls+";
    $name_extension = explode("+", $string_extension);
 
    $out[$i]["filename"] = array();
    $out[$i]["filelink"] = array();
    $out[$i]["nameextension"] = array();
 
    for($x = 0; $x < count($names); $x++)
    {
        if($names[$x] != "" && @$links[$x] != "")
        {
            $out[$i]["filename"][] = $names[$x];
            $out[$i]["filelink"][] = $links[$x];  
            $out[$i]["nameextension"][] = $name_extension[$x];
        }
    }
 
    $i++;
}
 
if(!empty($out)) 
{
    for($i = 0; $i < count($out); $i++) 
    {
        echo "<div style='border-bottom: 1px dotted gray; margin-bottom: 20px; padding: 10px 5px;'>";
        echo "№".$out[$i]['id']."<br>";
        echo "<strong>Автор:</strong> ".$out[$i]['fio']."<br>";
        echo "<strong>Создан:</strong> ".$out[$i]['date']."<br>";
        echo "<strong>Описание:</strong> ".$out[$i]['text']."<br>";
 
        if(!empty($out[$i]["filename"]))
        {
            echo "<strong>Прикрепленные файлы:</strong><br>";
 
            for($j = 0; $j < count($out[$i]["filename"]); $j++)
            { 
                if($out[$i]['nameextension'][$j] == ".docx")
                {
                    echo "Word";
                }
                else if($out[$i]['nameextension'][$j] == ".txt")
                {
                    echo "Текстовый файл";
                }
                else if($out[$i]['nameextension'][$j] == ".xls")
                {
                    echo "Excel";
                }
 
                echo "<a href='/history_scen/file/".$out[$i]["filelink"][$j]."'>".$out[$i]["filename"][$j]."</a><br>";
            }
        }
 
        echo "</div>";
    }
}
?>
в общем, считаю, что что-то не так именно с данными, когда они приходят из базы
0
1 / 1 / 7
Регистрация: 29.10.2012
Сообщений: 247
20.02.2014, 19:14  [ТС] 11
Вот я тормоз... я забыл что расширение делаю отдельным полем, а я чего-та все это время думал, что получаю с помощью функций с именем файла Заработался совсем, извините, что забрал ваше время.

mav
Спасибо тебе большое за помощь.

P.S. Мое предложение еще действует насчет денег на мобильный))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2014, 19:14

Switch-case в printf
Здравствуйте, как вставить switch-case в printf. Например у меня цикл $result =...

о конструкции switch case
если в данной конструкции в операторный список для case не поставить break, управление передается в...

switch case с range не работает
сделал как тут в ответах...

Как определить стринг переменную перед switch case чтобы происходило
Как определить стринг переменную перед switch case чтобы происходила ее обработка в одном из case...

Как определить стринг переменную перед switch case чтобы происходило
Как определить стринг переменную перед switch case чтобы происходила ее обработка в одном из case ,...

Switch Case
Как сделать тоже самое что в етом коде только на switch, case ? if((isset($_GET) &amp;&amp; $_GET ==...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru