PHP 7: Lösungen bei der Umstellung.
Weisse Seiten
Die erste Seite auf php7 umgestellt.
<?php phpinfo(); ?>
klappte. Resultat: Nur eine weisse Seite. Kein Quelltext. Keine Fehlermeldung... Hier zeige ich meine häufigsten Fehlermeldungen und deren Lösung.
⇒ Fehlermeldungen
Bei mir lief das nicht mehr automatisch. Folgende Funktion customError2 kommt jetzt für php7 zu form_func.php
<?php
function customError2($errno, $errstr, $errfile, $errline) {
echo "<b>Error:</b> [".$errno."] ".$errstr."<br />";
echo "<b>Wo?</b> [".$errline."] on ".$errfile."<br />";
}
?>
Nach der Datenbankverbindungsaufnahme in dbh_login.php folgt der Aufruf der Funktion customError2:
<?php
set_error_handler("customError2");
error_reporting(-1); // Melde alle PHP Fehler
?>
⇒ Undefinierte Variablen
PHP7 lässt keine "Schlampereien" mehr zu. Alle Variablen müssen initialisiert werden. Auch wenn das offiziell nicht steht oder vor PHP 7 noch so war.
Error: [8] Undefined variable: meldung1 Wo? [32] on /home/www/webXYZ/html/buchhaltung/voreinstellungen/index_i.phpLösung:
<?php $meldung1 = ''; ?>
Bei Variablen von Formulardaten mache ich das so:
<?php
$bh_id = isset($_REQUEST['bh_id']) ? $_REQUEST['bh_id'] : -1; // b uch h altungs id
?>
Mit PHP7 soll das auch so gehen:
<?php
$bh_id= isset($_REQUEST['bh_id']) ?? -1; // b uch h altungs id
?>
Mein alter Dreamweaver macht das allerdings nicht mit.
⇒ Fix non-numeric value warning in PHP 7.1
Diese Fehlermeldung wurde ausgelöst:
Error: [2] A non-numeric value encountered Wo? [264] on /home/www/webXYZ/html/buchhaltung/ausgabe/index_i.php
Ursache ist die Zeile $betrag_tot4 += $b1;
<?php
foreach ($e2 as $ds4) {
$b1 = !empty($ds4['betrag']) && is_numeric($ds4['betrag']) ? (int)$ds4['betrag'] : 0;
$betrag_tot4 += $b1;
} // ende foreach
?>
Als Lösung habe ich nur gefunden, dass ich die Datenbank mit der Funktion SUM() abfragen kann, um die Summe des Totalbetrags zu erhalten.
$auswahl = $dbh->prepare(SELECT SUM(betrag) AS betragssumme FROM '.DATA.' WHERE bh_data_aktiv = :bh_data_aktiv AND datum_zeit_a <= :dza AND datum_zeit_a >= :dzb ORDER BY datum_zeit_a ASC'); $auswahl->execute(array(':bh_data_aktiv' => '1', ':dza' => $endtime_db, ':dzb' => $starttime_db)); $arr1 = $auswahl->fetch(); $betrag_tot4 = $arr1['betragssumme']; echo 'Totalbetrag: '.number_format($betrag_tot4, 2, '.', '\'').'
';
Den "non-numeric value"-Fehler habe ich nur so weggebracht.
⇒ $_SERVER['PHP_SELF']
So viele Male habe ich $_SERVER['PHP_SELF'] gebraucht... - war ja echt praktisch.
<?php
<form action="<?php echo $_SERVER['PHP_SELF'];?>" id="kategorie" method="post">
?>
Geht in PHP 7 nicht mehr:
The requested URL /buchhaltung/voreinstellungen/Error: [8] Undefined index: PHP-SELF
Error: [33] on /home/www/webXYZ/html/buchhaltung/voreinstellungen/index_i2.php
was not found on this server.
Diese Definitionen habe ich unter anderem in der define.php
<?php
define("WEBSITE","https://www.beatmuhr.com/", true);
define("ORDNER","buchhaltung/", true); // nach Websitenamen bis zum Ordner mit den Menus bzw. bh
define("WEBSITE_ORDNER",WEBSITE."".ORDNER, true); // WEBSITE + ORDNER
?>
Lösung: So ersetze ich $_SERVER['PHP_SELF'] durch den WEBSITE_ORDNER und dem vollständigen Pfad:
<?php
<form action="<?php echo WEBSITE_ORDNER."voreinstellungen/index.php";?> ?>" id="kategorie" method="post">
?>
⇒ mysql_query
Geht in PHP7 gar nicht mehr. Tipp: mit der Suchfunktion danach suchen.
Lösung: Mein MySQL Code-Creator für PDO
spotlight

Etwas zu meiner Arbeitsweise
Ich "fliege" am Seitenbeginn verschiedene Seiten ein.
<?php
require_once('/home/www/webXYZ/html/buchhaltung/bh/inc/define.php');
require_once(SERVER_PFAD.'/bh/inc/form_func.php');
require_once(SERVER_PFAD.'/bh/inc/dbh_login.php'); // incl. login
?>
Die Dateien define.php, form_func.php und dbh_login.php werden links erwähnt.