461 / 461 / 6
Регистрация: 08.05.2013
Сообщений: 231
1

Голосование php5.6 -> php7.0

22.09.2017, 16:37. Показов 638. Ответов 10
Метки нет (Все метки)

Всем здравствуйте.
На сайте было голосование. Всё хорошо работало. Два года не было сбоев.
Была версия php 5.6
Сейчас переходим на новый хостинг и там php 7.0
Временно установил php 5.6 чтобы всё работало, пока не разберусь.
В новой версии php изменились многие функции.
Немогли бы Вы мне помочь изменить код для работы с php 7.0

Вот код голосования (php 5.6)
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
        <div id="book">
            <?php
                $q = "SELECT * FROM entries ORDER BY votes_up DESC"; //(ORDER BY votes_up DESC) сортировать в обратном порядке (от большего)";
                $r = mysql_query($q);
                
                if(mysql_num_rows($r)>0) //таблица не пустая
                    {
                        while($row = mysql_fetch_assoc($r))
                            {
                                $net_vote = $row['votes_up']
            ?>
                    <?php echo $row['content']; ?>
                <div id="results">
                    <span class='votes_count' id='votes_count<?php echo $row['id']; ?>'>
                    </span>
                    <span class='vote_buttons' id='vote_buttons<?php echo $row['id']; ?>'>
                        <a href='javascript:;' class='vote_up' id='<?php echo $row['id']; ?>'>Vote Up!</a>
                        <strong><?php echo "&nbsp;РЕЙТИНГ ОЖИДАНИЯ"; ?> (</strong><?php echo $net_vote; ?>)<br>
                            <?php echo "голосовать ЗА"; ?>
                        </span>
                </div>
            <!--</div>-->
            <?php
                            }
                    }
            ?>
        </div>
Вот код для php 7.0, он только выводит в цикл данные из таблицы. Добавив в него скрипт с кнопкой - выводит пустые результаты.
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
        <div id="book">
            <?php
                $sql = "SELECT * FROM entries";
                if (!$result = $mysqli->query($sql))
                    {
                        echo "Извините, возникла проблема в работе сайта.";
                        exit;
                    }
                if ($result->num_rows === 0)
                    {
                        echo "Книг для голосования нет.";
                        exit;
                    }
                $books = $result->fetch_assoc();
                    while ($books = $result->fetch_assoc())
                        {
                            echo $books["content"];
                        }
                
                // Скрипт автоматически закрывает соединение MySQL и освобождает память, тем не 
                //менее давайте сделаем это вручную
                $result->free();
                $mysqli->close();
            ?>
        </div>
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2017, 16:37
Ответы с готовыми решениями:

PHP5 -> PHP7
Здраствуйте. Я только начинающий в PHP. У меня есть один сервер, написан на PHP5. Для этого сервера...

Php5 -> php7
Здравствуйте. решил перевести свой сайт на php7 но проблема в том, что он на myslq и само ядро...

Ошибки в PHP5 и PHP7
Зачем в PHP7 введён класс Error, если был Exception?

Изучать PHP5 или PHP7 ?
Вопрос настоящим гуру PHP :) Я знаю только основы пхп. Сейчас хочу основательней его изучить. И...

10
Зверушь
22.09.2017, 17:25
  #2

Не по теме:

Удалил

0
461 / 461 / 6
Регистрация: 08.05.2013
Сообщений: 231
22.09.2017, 21:21  [ТС] 3
Ошибки показывает такие
PHP
1
2
3
4
5
6
7
8
9
mysql_query
// заменяем на
mysqli->query($sql)
// строка 4 в сообщении
 
while($row = mysql_fetch_assoc($r))
// заменяем на
while ($books = $result->fetch_assoc())
// строка 8 в сообщении
Выводит в цикле данные из базы из столбца (content)
В новом коде, в цикл, добавляем скрипт голосования.
PHP
1
2
3
4
5
6
7
8
9
                <div id="results">
                    <span class='votes_count' id='votes_count<?php echo $row['id']; ?>'>
                    </span>
                    <span class='vote_buttons' id='vote_buttons<?php echo $row['id']; ?>'>
                        <a href='javascript:;' class='vote_up' id='<?php echo $row['id']; ?>'>Vote Up!</a>
                        <strong><?php echo "&nbsp;РЕЙТИНГ ОЖИДАНИЯ"; ?> (</strong><?php echo $net_vote; ?>)<br>
                            <?php echo "голосовать ЗА"; ?>
                        </span>
                </div>
Выводит кнопку (Голосовать ЗА), а рейтинг нет.
Нажимаем на кнопку, показывает ошибку в строке 30 в файле обработчике
PHP
1
2
строка 29 - $votes = getAllVotes($id);
строка 30 - $effectiveVote = $votes[0]; //- $votes[1];
В мануале по php ничего про это не говорится.
Вот сам обработчик для php5.6
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
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php include ("../connect/connect.php");?>
<?php
                if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
                $day = date("Y-m-d H:i:s");
                // mysql_query ("DELETE FROM vote_ip WHERE date_resp < '$day'");
                
                function getAllVotes($id)
                    {
                    /**
                    Returns an array whose first element is votes_up and the second one is votes_down
                    **/
                    $votes = array();
                    $q = "SELECT * FROM entries WHERE id = $id";
                    $r = mysql_query($q);
                    if(mysql_num_rows($r)==1) //id наден в таблице
                        {
                        $row = mysql_fetch_assoc($r);
                        $votes[0] = $row['votes_up'];
                        //$votes[1] = $row['votes_down'];
                        }
                    return $votes;
                    }
                
                function getEffectiveVotes($id)
                    {
                    /**
                    Returns an integer
                    **/
                    $votes = getAllVotes($id);
                    $effectiveVote = $votes[0]; //- $votes[1];
                    return $effectiveVote;
                    }
                
                $id = $_POST['id'];
                $action = $_POST['action'];
                
                //get the current votes
                $cur_votes = getAllVotes($id);
                
                
                
                // провер§ем юзера на ip
                $ip = $_SERVER['REMOTE_ADDR']; 
                $r = mysql_query("SELECT * FROM vote_ip WHERE id_resp = '$id' AND ip = '$ip'");
                if(mysql_num_rows($r)==1)
                {
                echo " –≈…“»Ќ√ ќ∆»ƒјЌ»я ";
                
                echo getEffectiveVotes($id).
                '<br><span style="color:red">¬аш голос не учтен. Ч с вашего ip - '.$ip.' голосование проходило. ѕовторно голосовать за эту книгу вы не можете</span>';
                exit;
                }
                
                //ok, now update the votes
                
                if($action=='vote_up') //voting up
                {
                    $votes_up = $cur_votes[0]+1;
                    $q = "UPDATE entries SET votes_up = $votes_up WHERE id = $id";
                }
                elseif($action=='vote_down') //voting down
                {
                    $votes_down = $cur_votes[1]+1;
                    $q = "UPDATE entries SET votes_down = $votes_down WHERE id = $id";
                }
                $r = mysql_query($q);
                if($r) 
                    {
                    $effectiveVote = getEffectiveVotes($id);
                    echo $effectiveVote." - ¬аш голос учтЄн";
                    
                    $date_resp = date("Y-m-d",time()+ 1*24*60*60); // запоминаем завтрашнююю дату
                    mysql_query("INSERT INTO vote_ip (id_resp, ip, date_resp) VALUES ('$id','$ip','$date_resp')");
                    // в таблицу vote_ip заносим id статьи, ip посетител¤ и завтрашнюю дату-врем§
                    
                    }
                elseif(!$r) //voting failed
                    {
                    echo "Эшибка!";
                    }
                
                }
                
                
                 else
                 {
                    header("Location: index.php"); exit;
                  }
                  
                ?>
1
Эксперт PHP
4841 / 3853 / 1599
Регистрация: 24.04.2014
Сообщений: 11,308
22.09.2017, 21:33 4
Цитата Сообщение от Alexander519151 Посмотреть сообщение
показывает ошибку в строке 30 в файле обработчике
Какую?
0
461 / 461 / 6
Регистрация: 08.05.2013
Сообщений: 231
22.09.2017, 21:36  [ТС] 5
Смогу сказать только в Пн. компьютер на работе, а флешку с кодом не взял.
1
461 / 461 / 6
Регистрация: 08.05.2013
Сообщений: 231
25.09.2017, 06:15  [ТС] 6
Просмотрел файл-обработчик
PHP
1
2
3
4
исправил
mysql_query
на
$mysqli->query
вот на него, теперь и ругается.
Fatal error: Uncaught Error: Call to a member function query() on null in W:\domains\MechtaBukinista.local\voting\votes.php: 14 Stack trace: #0 W:\domains\MechtaBukinista.local\voting\votes.php( 38): getAllVotes('') #1 {main} thrown in W:\domains\MechtaBukinista.local\voting\votes.php on line 14
Вот код.
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
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php include ("../connect/connect.php");?>
<?php
                if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
                $day = date("Y-m-d H:i:s");
                // mysql_query ("DELETE FROM vote_ip WHERE date_resp < '$day'");
                
                function getAllVotes($id)
                    {
                    /**
                    Returns an array whose first element is votes_up and the second one is votes_down
                    **/
                    $votes = array();
                    $sql = "SELECT * FROM entries WHERE id = $id";
                    $books = $mysqli->query($sql);
                    if(mysql_num_rows($books)==1) //id наден в таблице
                        {
                        $row = mysql_fetch_assoc($books);
                        $votes[0] = $row['votes_up'];
                        //$votes[1] = $row['votes_down'];
                        }
                    return $votes;
                    }
                
                function getEffectiveVotes($id)
                    {
                    /**
                    Returns an integer
                    **/
                    $votes = getAllVotes($id);
                    $effectiveVote = $votes[0]; //- $votes[1];
                    return $effectiveVote;
                    }
                
                $id = $_POST['id'];
                $action = $_POST['action'];
                
                //get the current votes
                $cur_votes = getAllVotes($id);
                
                
                
                // провер§ем юзера на ip
                $ip = $_SERVER['REMOTE_ADDR']; 
                $books = $mysqli->query("SELECT * FROM vote_ip WHERE id_resp = '$id' AND ip = '$ip'");
                if(mysql_num_rows($books)==1)
                {
                echo " – Ваш голос учтён 1";
                
                echo getEffectiveVotes($id).
                '<br><span style="color:red">Ваш голос не учтен. С Вашего ip - '.$ip.' голосование проходило. повторно голосовать за эту книгу вы не можете</span>';
                exit;
                }
                
                //ok, now update the votes
                
                if($action=='vote_up') //voting up
                {
                    $votes_up = $cur_votes[0]+1;
                    $sql = "UPDATE entries SET votes_up = $votes_up WHERE id = $id";
                }
                elseif($action=='vote_down') //voting down
                {
                    $votes_down = $cur_votes[1]+1;
                    $sql = "UPDATE entries SET votes_down = $votes_down WHERE id = $id";
                }
                $books = mysql_query($sql);
                if($books) 
                    {
                    $effectiveVote = getEffectiveVotes($id);
                    echo $effectiveVote." - Ваш голос учтён 2";
                    
                    $date_resp = date("Y-m-d",time()+ 1*24*60*60); // запоминаем завтрашнююю дату
                    mysql_query("INSERT INTO vote_ip (id_resp, ip, date_resp) VALUES ('$id','$ip','$date_resp')");
                    // в таблицу vote_ip заносим id статьи, ip посетителя и завтрашнюю дату-время
                    
                    }
                elseif(!$books) //voting failed
                    {
                    echo "Ошибка!";
                    }
                
                }
                
                
                 else
                 {
                    header("Location: index.php"); exit;
                  }
                  
                ?>
Добавлено через 24 секунды
1
Эксперт PHP
4841 / 3853 / 1599
Регистрация: 24.04.2014
Сообщений: 11,308
25.09.2017, 09:13 7
Alexander519151, локальная переменная $mysqli в функции не определена.
1
461 / 461 / 6
Регистрация: 08.05.2013
Сообщений: 231
25.09.2017, 10:28  [ТС] 8
Подскажите, как правильно.
1
Эксперт PHP
4841 / 3853 / 1599
Регистрация: 24.04.2014
Сообщений: 11,308
25.09.2017, 13:03 9
Alexander519151, правильно какам либо способом передавать переменную mysqli в функцию
1
461 / 461 / 6
Регистрация: 08.05.2013
Сообщений: 231
25.09.2017, 13:13  [ТС] 10
Это я понял. Хотелось бы код увидеть.
Сможете помочь? Куда, что и как указать?
Буду благодарен за помощь
1
Эксперт PHP
4841 / 3853 / 1599
Регистрация: 24.04.2014
Сообщений: 11,308
25.09.2017, 14:51 11
Alexander519151, все очень зависит от текущей реализации. Как плохое, но рабочее решения можно использовать глобальные переменные
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2017, 14:51
Помогаю со студенческими работами здесь

PHP7 CGI или PHP5 как модуль Apache
Здравствуйте. Вот только такие есть варианты у меня настроить сервер. Не подскажите, что лучше?...

Considering conflict php5 for php7.0 ubuntu 16.04
Суть такая, php5 в принципе не установлен , но при a2enmod php7.0 получаю Considering conflict...

Ускорение переезда с PHP5 на PHP7 связанный с MySQL
Здравствуйте. На днях решил перевести свой сайт с PHP5 на PHP7. Создал виртуальный Ubuntu Server...

Что сделать, чтобы при вводе команды php в терминале включался php5.6, вместо php5.5?
Добрый день! На маке стоит php5.6 и php5.5.29, при вводе команды php в терминале врубается...


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

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

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