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...
Also ich habe das mysql_real_escape_string entfernt, dann funktioniert das Skript.
Das ist ein fataler Fehler!
Übersetzt aus der PHP-Doku:
mysqli_real_escape_string - Bricht Sonderzeichen in einer Zeichenkette für die Verwendung in einer SQL-Anweisung um, wobei der aktuelle Zeichensatz der Verbindung berücksichtigt wird
Ohne das Escape wirst du Probleme bekommen, wenn z.B. Zeichen wie ' vorkommen
 
Das ist ein fataler Fehler!
Übersetzt aus der PHP-Doku:

Ohne das Escape wirst du Probleme bekommen, wenn z.B. Zeichen wie ' vorkommen
<br />
<b>Warning</b>: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in <b>/www/htdocs/guestcal8/admin/pages/entries.php</b> on line <b>71</b><br />

Ich weiß nicht wie ich diesen Fehler beheben kann. :(
 
PHP:
function kill_magic_quotes()

{

    if (get_magic_quotes_gpc())

    {

        $in = array(&$_GET, &$_POST, &$_COOKIE);

        while (list($k,$v) = each($in)) {

            foreach ($v as $key => $val) {

                if (!is_array($val)) {

                    $in[$k][$key] = stripslashes($val);

                    continue;

                }

                $in[] =& $in[$k][$key];

            }

        }

        unset($in);

    }

}

Diese Funktion ist unter PHP 8 auch nicht mehr ausführbar?
Was wäre eine Alternative?
 
Zuletzt bearbeitet:
Ich würde das komplette Script fachgerecht entsorgen und neu schreiben. Wer weiß, was da noch alles für Fallen drin stecken.
 
Aus der Doku zu each
Warnung
Diese Funktion ist seit PHP 7.2.0 als DEPRECATED (veraltet) markiert und wurde in PHP 8.0.0 ENTFERNT. Von der Verwendung dieser Funktion wird dringend abgeraten.
Aus der Doku zu get_magic_quotes_gpc
Warnung
Diese Funktion ist seit PHP 7.4.0 als DEPRECATED (veraltet) markiert und wurde in PHP 8.0.0 ENTFERNT. Von der Verwendung dieser Funktion wird dringend abgeraten.
Mit anderen Worten: die komplette Funktion ist sinnlos.

Und bitte immer die Formatierungsmöglichkeiten des Forum nutzen, wenn du Quellcode postest:
1682162235157.png
 
PHP:
$nr=rand(1, 1000000);
$err_msg='<p>Der Fehler Nr. '.$nr.' ist aufgetreten. <a href="mailto:'.$admin_mail.'?subject=Fehler '.$nr.'">'.$admin_mail.'</a></p>';

switch ($type)
{
    case 'mysql':
    if (true==isset($sql))
    {
        error_log($nr." ".mysqli_error($link)." ".$sql." ".session_id());
    }
    else
    {
        error_log($nr." ".mysqli_error($link)." ".session_id());
    }
    die(head("Fehler").$err_msg.foot());
    break;

    case 'mail':
    error_log($nr." ".$mail->ErrorInfo." ".session_id());
    die(head("Fehler").$err_msg.foot()); 
    break;

    case 'input':
    $data="";
    foreach ($_POST AS $key=>$val)
    {
        $data.=$key."=".$val."|"; 
    }
    $e_msg=str_replace("&nbsp;", "", $error_msg);
    error_log($site.": ".$e_msg.PHP_EOL.$data."|".session_id());
    break;

    case 'custom':
    error_log($nr." ".$error_msg." ".session_id());
    die(head("Fehler").$err_msg.foot()); 
}
 
Zurück