Проблемы перехода на PHP 7

Dark Wizard

Гуру форума
Регистрация
23 Сен 2007
Сообщения
194
Реакции
80
Перенёс свой кривой скрипт на новый хостинг, и столкнулся с кучей ошибок, вроде как из-за версии PHP (на старом была версия 5 и всё работало).

Хочется понять, что их вызывает и переписать код.

Чаще всего ошибка
PHP:
Notice: Undefined offset: 0

Мой код:
PHP:
<?
include('../check.php');
//include('functions.php'); дублируется
$errmess = "";
$playerid = $_SESSION['myid'];

$power = 0;
$totalpower = 0;

$slotgems = array();

for ($w = 0; $w < 21; $w++){
//чанты

    if (!empty($_POST['slot'.$w.'chant'])){$aslotchant[$w] = $_POST['slot'.$w.'chant'];
    for ($i = 0;$i < count($_POST['slot'.$w.'chant']); $i++){if (intval($aslotchant[$w][$i]) <> '0'){$slotchant[$w] .= " ".$aslotchant[$w][$i];}}}
//камни
    if (!empty($_POST['slot'.$w.'gems'])){
    $aslotgems[$w] = $_POST['slot'.$w.'gems'];
    for ($i = 0;$i < count($_POST['slot'.$w.'gems']); $i++){
     if (intval($aslotgems[$w][$i]) != 0){
       $slotgems[$w] .= " ".$aslotgems[$w][$i]; // ТУТ ОШИБКА
      }
    }
  }
$slotchant[$w] .= " ";
$slotgems[$w] .= " ";

Непонятно, как объявлять массивы чтобы корректно работало...

Ещё, например, в таком коде:
PHP:
<!DOCTYPE html>
<html>
<body>
<?
if ($_GET['site']){
$site = $_GET['site'];
echo $site;}
?>
<form action="test.php" method=get>
<input type="text" name="site" /> <input type="SUBMIT" />
</form>
</body>
</html>

ошибка
PHP:
Notice: Undefined index: site in /var/www/vhosts/мой сайт/test.php on line 5

такое решение
PHP:
if (!empty($_GET['site'])){$site = checksite($_GET['site']);}else{$site = '';}
помогает, но я не уверен что оно верное (также пробовал isset, но в ряде случаев не работает).

В общем вопрос, как правильно объявлять/проверять переменные и массивы, чтобы не возникало Undefined offset и Undefined variable.
 
javx, а как это применимо к моему коду?
 
Советуют же восстанавливать прежний порядок - обрамив фигурными скобками.
 
javx, извиняюсь, можно пример?

такие варианты не работают или вызывают ошибки:

PHP:
$site->$_GET['site'];
{$site} = $_GET['site'];
$site = {$_GET['site']};
{$site = $_GET['site']};
$site = $_GET[{'site'}];
$site = $_GET{['site']};
 
А может у хостера просто отключены Notice'ы?!
 
upload_2016-4-13_16-58-1.png
ты же сам говоришь что ошибка здесь. Оберни выделенное скобками.
 
javx, код

PHP:
$slotgems[$w] .= " ".{$aslotgems[$w][$i]};

выдаёт на этой строке ошибку
PHP:
Parse error: syntax error, unexpected '{' in/var/www/vhosts...
 
В общем, так и не разобрался, как правильно написать, чтобы код test.php:
PHP:
<!DOCTYPE html>
<html>
<body>
<?
$id = $_POST['id'];
if ($id){
echo $id;
}
?>
<form action="test.php" method=post>
<input type="text" name="id" /> <input type="SUBMIT" />
</form>
</body>
</html>

Не выдавал никаких уведомлений/ошибок на php 7. Может кто-то учебник по 7 версии посоветует хороший?

UPDATE:

Правильно ли я понимаю, что теперь везде нужно писать так:
PHP:
<?
if (isset($_POST['id'])){$id = $_POST['id'];}
if (!empty($id)){
echo $id;
}
?>
?
 
Последнее редактирование:
if (!empty($_GET['site']))
я бы сделал так:
PHP:
if (isset($_GET['site']) && !empty($_GET['site']))
это исключит notice

а еще лучше сначала объявить все переменные а потом работать с ними:
PHP:
$site = isset($_GET['site']) && !empty($_GET['site']) ? $_GET['site'] : null;
if ($site) {
     echo $site;
}
примерно так. аналогично остальные параметры $_GET и $_POST
 
Назад
Сверху