PHP Script ändern damit mysqli / PHP 7.2 funktioniert

cliodriver

Mitglied
Hallo

das ist seit langem wieder mal eine Frage / Bitte um Hilfe zu einem PHP-Script.

Ich habe vor einem Jahr eine Homepage für eine Bekannte (Ferienwohnungen) erstellt und ein fertiges Script für einen Belegungskalender eingebaut und dabei nicht bedacht / gewusst das der Server demnächst auf PHP 7.2 umstellt. Ich konnte schon testen und den Rest der Homepage anpassen, doch leider bin ich mit meinem Latein am ende und der Kalender funktioniert natürlich nicht.

Das Problem liegt natürlich an der Datenbankverbindung .... mysqli unter PHP 7.2, welche ich nicht gefixt bekomme

Meine Frage dazu:

Kann sich jemand den Code mal ansehen und sagen er sich anpassen lässt bzw. hätte gleich Tipps für mich? Ich würde gerne verstehen wo der Hund begraben liegt und es selber ändern, doch ohne Hilfe komm ich grad nicht weiter.

Weiters umfasst das ganze ca. 19 Seiten und wenn ich die alle hier poste, wird's wahrscheinlich unübersichtlich. Ich würde das Paket per email versenden wenn ich Hilfe bekomme.

Danke
 
Lösung
So habe mir das mal angeschaut.

Es ist nur die db.class.php anzupassen.

PHP:
<?php
// Class for database connection
class DatabaseConnection {

    public    $error = false;
    public    $version = false;
    private    $link = false;
    private $config = array ();

    /**
     * Wrapper for connect ()
     * @param    $db        Array with vars from config
     * @return            result from connect ()
     */
    public function databaseConnection ($mysql) {
        $this->config = $mysql;
        return $this->connect ();
    }

    /**
     * Tries to connect to db and checks installation.
     * @return            true if no error, else false
     */
    public function connect () {
        // Reset $error
        $this->error...
so ... nach Durchsicht deiner Änderungen bin ich zum Schluss gekommen das ich diese auch schon mal versucht habe.

Doch durch deinen Denkanstoss hab ich nochmal drübergelesen und diesen teil mit dem Port entfernt

PHP:
 . ':' . $this->config['port']

nun funktioniert die Verbindung.

einzig im admin/pages müssen noch Änderungen gemacht werden. dies funktioniert noch nicht
 
Hallo, ich habe das gleiche Problem mit GuestCal 2.1.4 (Hosteurope stellt auf PHP7 um - installiertes Skript geht nicht mehr) und bin schon mal mit der o.g. Lösung etwas weiter gekommen.

Im weiteren habe ich jedoch im Admin-Bereich das Problem, dass die Einträge (Belegungen / Belegungsarten) beim ändern verschwinden (werden in DB garnicht gespeichtert oder gelöscht!?) - dagegen kann ich Objekte neu anlegen und bearabeiten ohne Probleme.

Irgendwie muss es mit der Eingabe der Beschreibungen in DB Tabellen classes_per_language und entries_per_language zu tun haben. Die Farben in classes werden auch nicht gespeichert. Ich komme aber nicht darauf was.

Hat jemand einen Tipp für mich wie ich hier weiterkomme?

LG
 
Zuletzt bearbeitet:
vieleicht solltest du mal den Code posten der dafür in frage kommt. Meistens ist das ja der mysql kram der mit php7 nicht mehr kompatibel ist.

Also kuck doch mal in Code nach wo gespeichert wird und suche den Datenbank kram da mal raus
 
Hi Basti, klar,

Datei objects.php (funktioniert)
PHP:
<?php
/**
* This file is part of GuestCal: http://guestcal.sourceforge.net/
*
* ©2012 dotplex e.K. / www.dotplex.de / info@dotplex.de
* Licenced under GPLv3 Open Source Licence: http://www.gnu.org/licenses/gpl-3.0.html
*/

$pageTitle .= ' - ' . __('adminObjects');

// Save or delete
if (isset ($_POST['object'])) {
    $post = $db -> mysql_real_escape_mixed ($_POST);
    if ($db -> idExists ('objects', $post['object'])) {
        $id = $post['object'];
        $db -> query ("DELETE FROM `objects_per_language` WHERE `object_id`=" . $id);
    }
    else
        $id = $db -> query ("INSERT INTO `objects` SET `id`=NULL", 'insert_id');
    foreach ($GLOBALS['langsActive'] as $lang)
        $db -> query ("INSERT INTO `objects_per_language` SET `name`='" . $post['name_' . $lang['abbr']] . "', `desc`='" . $post['desc_' . $lang['abbr']] . "', `language_id`=" . $lang['id'] . ", `object_id`=" . $id);
}
elseif (isset ($_GET['action']) && $_GET['action'] == 'del2' && $db -> idExists ('objects', $_GET['object'])) {
    $id = $_GET['object'];
    $db -> query ("DELETE `entries_per_language` FROM `entries_per_language` LEFT JOIN `entries` ON `entries`.`id`=`entries_per_language`.`entry_id` WHERE `entries`.`object_id`=" . $id);
    $db -> query ("DELETE `entries_static` FROM `entries_static` LEFT JOIN `entries` ON `entries`.`id`=`entries_static`.`entry_id` WHERE `entries`.`object_id`=" . $id);
    $db -> query ("DELETE `entry_returning` FROM `entry_returning` LEFT JOIN `entries` ON `entries`.`id`=`entry_returning`.`entry_id` WHERE `entries`.`object_id`=" . $id);
    $db -> query ("DELETE FROM `entries` WHERE `object_id`=" . $id);
    $db -> query ("DELETE FROM `objects_per_language` WHERE `object_id`=" . $id);
    $db -> query ("DELETE FROM `objects` WHERE `id`=" . $id);
}

// Read objects
$array = $db -> select ("SELECT `id` FROM `objects` ORDER BY `id`");
if ($array) {
    foreach ($array as $row)
        $objects[$row['id']] = array ();
    $langs = array ();
    foreach ($GLOBALS['langsActive'] as $lang)
        $langs[] = $lang['id'];
    $array = $db -> select ("SELECT `object_id`, `language_id`, `name`, `desc` FROM `objects_per_language` WHERE `language_id`=" . implode (' OR `language_id`=', $langs));
    foreach ($array as $row)
        $objects[$row['object_id']][$row['language_id']] = array (
            'name' => $row['name'],
            'desc' => $row['desc']
        );
}
else
    $objects = array ();

// Create, edit or delete object
if (isset ($_GET['object']) && array_key_exists ($_GET['object'], $objects)) {
    $id = $_GET['object'];
}
else {
    $id = 0;
}
if (isset ($_GET['action']) && $_GET['action'] == 'del' && $id > 0) {
    $r .= '<h3>' . __('adminDeleteObject') . ' (' . $id . '):</h3>';
    $r .= '<p>' . __('adminDeleteObjectReally') . '</p>';
    $r .= '<p><input type="button" onclick="document.location=\'?page=objects&amp;action=del2&amp;object=' . $id . '\'" value="' . __('adminContinue') . '" /> <input type="button" onclick="document.location=\'?page=objects\'" value="' . __('adminCancel') . '" /></p>';
}
else {
    if ($id == 0) {
        $r .= '<h3>' . __('adminNewObject') . ':</h3>';
    }
    else {
        $r .= '<h3>' . __('adminEditObject') . ' (' . $id . '):</h3>';
    }
    // Form
    $r .= '<form action="?page=objects" method="post">';
    $r .= '<table>';
    foreach ($GLOBALS['langsActive'] as $lang) {
        $r .= '<tr><th>' . __('adminName') . ' (' . $lang['name'] . '):</th>';
        $r .= '<td><input type="text" name="name_' . $lang['abbr'] . '" size="30" maxlength="50"';
        if (isset ($objects[$id][$lang['id']]))
            $r .= ' value="' . $objects[$id][$lang['id']]['name'] . '"';
        $r .= ' /></td></tr>';
    }
    foreach ($GLOBALS['langsActive'] as $lang) {
        $r .= '<tr><th>' . __('adminDesc') . ' (' . $lang['name'] . '):</th>';
        $r .= '<td><textarea name="desc_' . $lang['abbr'] . '" rows="5" cols="50">';
        if (isset ($objects[$id][$lang['id']]))
            $r .= $objects[$id][$lang['id']]['desc'];
        $r .= '</textarea></td></tr>';
    }
    $r .= '</table>';
    $r .= '<p><input type="submit" value="' . __('adminSubmit') . '" /> <input type="button" onclick="document.location=\'?page=objects\'" value="' . __('adminCancel') . '" /><input type="hidden" name="object" value="' . $id . '" /></p>';
    $r .= '</form>';
}

// List objects
$r .= '<h3>' . __('adminObjects') . ':</h3>';
$r .= '<table>';
$r .= '<tr><th>' . __('adminNo') . '</th>';
foreach ($GLOBALS['langsActive'] as $lang) {
    $r .= '<th>' . __('adminName') . ' (' . $lang['name'] . ')</th>';
    $r .= '<th>' . __('adminDesc') . ' (' . $lang['name'] . ')</th>';
}
$r .= '</tr>';
foreach ($objects as $id => $content) {
    $r .= '<tr><td>' . $id . '</td>';
    foreach ($GLOBALS['langsActive'] as $lang) {
        $r .= '<td>';
        if (isset ($content[$lang['id']]))
            $r .= $content[$lang['id']]['name'];
        $r .= '</td><td>';
        if (isset ($content[$lang['id']]))
            $r .= shortenString ($content[$lang['id']]['desc']);
        $r .= '</td>';
    }
    $r .= '<td><a href="?page=objects&amp;object=' . $id . '">' . __('adminEdit') . '</a> | <a href="?page=objects&amp;object=' . $id . '&amp;action=del">' . __('adminDelete') . '</a></td>';
    $r .= '</tr>';
}
$r .= '</table>';

und Datei classes.php (funktioniert nicht)

PHP:
<?php
/**
* This file is part of GuestCal: http://guestcal.sourceforge.net/
*
* ©2012 dotplex e.K. / www.dotplex.de / info@dotplex.de
* Licenced under GPLv3 Open Source Licence: http://www.gnu.org/licenses/gpl-3.0.html
*/

$pageTitle .= ' - ' . __('adminClasses');

// Save or delete
if (isset ($_POST['class'])) {
    if ($db -> idExists ('classes', $_POST['class'])) {
        $id = $_POST['class'];
        $db -> query ("UPDATE `classes` SET `color`='" . mysqli_real_escape_string ($_POST['color']) . "' WHERE `id`=" . $id);
        $db -> query ("DELETE FROM `classes_per_language` WHERE `class_id`=" . $id);
    }
    else
        $id = $db -> query ("INSERT INTO `classes` SET `color`='" . mysqli_real_escape_string ($_POST['color']) . "'", 'insert_id');
    foreach ($GLOBALS['langsActive'] as $lang)
        $db -> query ("INSERT INTO `classes_per_language` SET `name`='" . mysqli_real_escape_string ($_POST['name_' . $lang['abbr']]) . "', `content`='" . mysqli_real_escape_string ($_POST['content_' . $lang['abbr']]) . "', `language_id`=" . $lang['id'] . ", `class_id`=" . $id);
}
elseif (isset ($_GET['action']) && $_GET['action'] == 'del2' && $db -> idExists ('classes', $_GET['class'])) {
    $id = $_GET['class'];
    $db -> query ("DELETE `entries_per_language` FROM `entries_per_language` LEFT JOIN `entries` ON `entries`.`id`=`entries_per_language`.`entry_id` WHERE `entries`.`class_id`=" . $id);
    $db -> query ("DELETE `entries_static` FROM `entries_static` LEFT JOIN `entries` ON `entries`.`id`=`entries_static`.`entry_id` WHERE `entries`.`class_id`=" . $id);
    $db -> query ("DELETE `entry_returning` FROM `entry_returning` LEFT JOIN `entries` ON `entries`.`id`=`entry_returning`.`entry_id` WHERE `entries`.`class_id`=" . $id);
    $db -> query ("DELETE FROM `entries` WHERE `class_id`=" . $id);
    $db -> query ("DELETE FROM `classes_per_language` WHERE `class_id`=" . $id);
    $db -> query ("DELETE FROM `classes` WHERE `id`=" . $id);
}

// Read classes
$array = $db -> select ("SELECT `id`, `color` FROM `classes` ORDER BY `id`");
if ($array) {
    foreach ($array as $row)
        $classes[$row['id']] = array ('color' => $row['color']);
    $langs = array ();
    foreach ($GLOBALS['langsActive'] as $lang)
        $langs[] = $lang['id'];
    $array = $db -> select ("SELECT `class_id`, `language_id`, `name`, `content` FROM `classes_per_language` WHERE `language_id`=" . implode (' OR `language_id`=', $langs));
    foreach ($array as $row)
        $classes[$row['class_id']][$row['language_id']] = array (
            'name' => $row['name'],
            'content' => $row['content']
        );
}
else
    $classes = array ();

// Create, edit or delete class
if (isset ($_GET['class']) && array_key_exists ($_GET['class'], $classes)) {
    $id = $_GET['class'];
}
else {
    $id = 0;
}
if (isset ($_GET['action']) && $_GET['action'] == 'del' && $id > 0) {
    $r .= '<h3>' . __('adminDeleteClass') . ' (' . $id . '):</h3>';
    $r .= '<p>' . __('adminDeleteClassReally') . '</p>';
    $r .= '<p><input type="button" onclick="document.location=\'?page=classes&amp;action=del2&amp;class=' . $id . '\'" value="' . __('adminContinue') . '" /> <input type="button" onclick="document.location=\'?page=classes\'" value="' . __('adminCancel') . '" /></p>';
}
else {
    if ($id == 0) {
        $r .= '<h3>' . __('adminNewClass') . ':</h3>';
    }
    else {
        $r .= '<h3>' . __('adminEditClass') . ' (' . $id . '):</h3>';
    }
    // Form
    $r .= '<form action="?page=classes" method="post">';
    $r .= '<table>';
    foreach ($GLOBALS['langsActive'] as $lang) {
        $r .= '<tr><th>' . __('adminName') . ' (' . $lang['name'] . '):</th><td><input type="text" name="name_' . $lang['abbr'] . '" size="30" maxlength="30"';
        if (isset ($classes[$id][$lang['id']]['name']))
            $r .= ' value="' . $classes[$id][$lang['id']]['name'] . '"';
        $r .= ' /></td></tr>';
    }
    foreach ($GLOBALS['langsActive'] as $lang) {
        $r .= '<tr><th>' . __('adminCellContent') . ' (' . $lang['name'] . '):</th><td><input type="text" name="content_' . $lang['abbr'] . '" size="2" maxlength="2"';
        if (isset ($classes[$id][$lang['id']]['content']))
            $r .= ' value="' . $classes[$id][$lang['id']]['content'] . '"';
        $r .= ' /></td></tr>';
    }
    $r .= '<tr><th>' . __('adminColor') . '</th><td><input type="text" name="color" size="6" maxlength="6"';
    if (isset ($classes[$id]['color']))
        $r .= ' value="' . $classes[$id]['color'] . '"';
    $r .= ' /></td></tr>';
    $r .= '</table>';
    $r .= '<p><input type="submit" value="' . __('adminSubmit') . '" /> <input type="button" onclick="document.location=\'?page=classes\'" value="' . __('adminCancel') . '" /><input type="hidden" name="class" value="' . $id . '" /></p>';
    $r .= '</form>';
}

// List classes
$r .= '<h3>' . __('adminClasses') . ':</h3>';
$r .= '<table>';
$r .= '<tr><th>' . __('adminNo') . '</th>';
foreach ($GLOBALS['langsActive'] as $lang) {
    $r .= '<th>' . __('adminName') . ' (' . $lang['name'] . ')</th>';
}
foreach ($GLOBALS['langsActive'] as $lang) {
    $r .= '<th>' . __('adminCellContent') . ' (' . $lang['name'] . ')</th>';
}
$r .= '<th>' . __('adminColor') . '</th>';
$r .= '</tr>';
foreach ($classes as $id => $values) {
    $r .= '<tr><td>' . $id . '</td>';
    foreach ($GLOBALS['langsActive'] as $lang) {
        $r .= '<td>';
        if (isset ($values[$lang['id']]['name']))
            $r .= $values[$lang['id']]['name'];
        $r .= '</td>';
    }
    foreach ($GLOBALS['langsActive'] as $lang) {
        $r .= '<td>';
        if (isset ($values[$lang['id']]['content']))
            $r .= $values[$lang['id']]['content'];
        $r .= '</td>';
    }
    $r .= '<td style="background-color: #' . $values['color'] . '">' . $values['color'] . '</td>';
    $r .= '<td><a href="?page=classes&amp;class=' . $id . '">' . __('adminEdit') . '</a> | <a href="?page=classes&amp;class=' . $id . '&amp;action=del">' . __('adminDelete') . '</a></td>';
    $r .= '</tr>';
}
$r .= '</table>';
 
Kann es sein dass PHP7 die mysqli_real_escape_string ($_POST['color']) in der SQL Query nicht mag?

PHP:
 $db -> query ("UPDATE `classes` SET `color`='" . mysqli_real_escape_string ($_POST['color']) . "' WHERE `id`=" . $id);
 
Genau, mysqli_real_escape_string mit den () entfernen



edit: mein Kalender ( GuestCal 2.1.4) läuft ebenfalls auf hosteurope
 
Zuletzt bearbeitet:
in der ersten datei die du gepostet hast in Zeile 13 ist noch mysql ohne I drinne.

was sagt den deine Fehlerkonsole noch so ?
 
Zurück