Werkt niet meer met PHP 7

Overzicht

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

- Ariën  -
Beheerder

- Ariën -

27/02/2022 15:15:17
Anchor link
Hmmmm .....
Dan moeten we verder debuggen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
// Query absetzen
    function query($query) {
        $result = mysqli_query($this->link, $query);
var_dump($this->link);
var_dump($query);
        echo mysqli_error();
        return $result;
    }


Dan moet je toch wat gaan zien aan debug informatie.

Edit:
janus_landkaart hoort tussen quotes. Het is een string. Of geef hem net als je user en pass door via $this. Dat is een stuk netter.
Gewijzigd op 27/02/2022 15:29:22 door - Ariën -
 
PHP hulp

PHP hulp

23/06/2024 07:30:34
 
Jan Bakker

Jan Bakker

27/02/2022 18:09:55
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: Undefined property: sql::$link in /home/janus/domains/zonstraal.be/public_html/landkaart/inc/sql.class.php on line 22


Voor zover ik het snap gaat er iets fout met de verbinding met de database.
De inloggegeven kloppen wel, die heb ik met een ander script gecontroleerd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class sql {

    // Verbindung zur Datenbank  herstellen
    function sql() {
        $this->host     = DB_HOST;
        $this->db     = DB_DATABASE;
        $this->user    = DB_USER;
        $this->pass     = DB_PASSWORD;

        $this->link = mysqli_connect($this->host, $this->user, $this->pass, $this->janus_landkaart );
        if(!$this->link)
            return;
        register_shutdown_function( array( &$this, "close" ) );
    }
 
- Ariën  -
Beheerder

- Ariën -

27/02/2022 19:00:45
Anchor link
Ik neem aan dat je ook je code een beetje verkent, en niet rücksichtslos wat in je code staat te typen?
Want waar slaat dit op: $this->janus_landkaart ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
        $this->link = mysqli_connect($this->host, $this->user, $this->pass, $this->janus_landkaart );


Je hebt ook: $this->host, $this->user, $this->pass.
Dit zijn dus eigenschappen van je databaseverbinding. Met logisch nadenken, en het verkennen van je code, dan zie je ook $this->db staan. En je weet, neem ik aan, dat janus_landkaart geen eigenschap is, maar een waarde. Dus dan is dit het enige correcte. (Met andere woorden: Je hebt geen hostname die host heet, geen username die user heet en geen paswoord die pass heet, maar wel een database die janus_landkaart heet.)

Dit lijkt mij dus zinvoller.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
        $this->link = mysqli_connect($this->host, $this->user, $this->pass, $this->db );


Dus, bekijk je code aandachtig, zoek logische verbanden. Daar heb je niet eens veel programmeer-ervaring voor nodig. Feitelijk is dit al het begin van programmeren.

Ik denk dat je met deze stap je script al werkend hebt.
Gewijzigd op 27/02/2022 19:13:14 door - Ariën -
 
Jan Bakker

Jan Bakker

27/02/2022 20:41:21
Anchor link
Dat had ik ook al getest maar de error blijft hetzelfde.
 
- Ariën  -
Beheerder

- Ariën -

27/02/2022 20:48:54
Anchor link
Heb je de var_dump al toegevoegd? Ik zie daar nog niks van terug?

Als ik de code nog eens verbeter:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
class sql {

    // Verbindung zur Datenbank  herstellen
    function __construct() {
        $this->host     = DB_HOST;
        $this->db     = DB_DATABASE;
        $this->user    = DB_USER;
        $this->pass     = DB_PASSWORD;

        $this->link = mysqli_connect($this->host, $this->user, $this->pass, $this->db);
        if(!$this->link)
            throw new Exception("Database connection error: ".mysqli_connect_error());
    }

Dit is meer moderner PHP met een construct en een exception.
Als de connectie niet klopt, dan moet je een duidelijke foutmelding zien.

Werkt dit? En zo nee, wat zie je?

Ter informatie:
Ik heb die register_shutdown_function(...) eruit gehaald. Ik heb een vermoeden dat je daarmee de $this-variabelen (interne variabelen binnen je class) om zeep helpt als je connectie fout is. Ik zie geen reden waarom je dat zou willen. Die functie en het gebruik op deze manier ken ik niet zo goed, maar het lijkt mij geen beste afhandeling.

Toch ben ik benieuwd wat die hele class precies doet? Tot nu toe is dit hetzelfde wat PHP zelf al kan doen.

Edit:
mysqli_connect_error() gebruikt
Gewijzigd op 27/02/2022 22:01:04 door - Ariën -
 
Jan Bakker

Jan Bakker

27/02/2022 22:07:51
Anchor link
Ik hen er nu een extra warning bij.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Warning: Undefined array key "ort" in /home/janus/domains/zonstraal.be/public_html/landkaart/inc/map.func.php on line 34
object(mysqli)#2 (18) { ["affected_rows"]=> int(83) ["client_info"]=> string(15) "10.3.32-MariaDB" ["client_version"]=> int(100332) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(4) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(23) "10.3.29-MariaDB-cll-lve" ["server_version"]=> int(100329) ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(406522110) ["warning_count"]=> int(0) } string(100) "SELECT u.name, g.lon, g.lat, g.ort FROM lms_user u LEFT JOIN lms_geodb g ON u.geoid = g.id WHERE 1 "


Volledige meldingen kun je hier nog steeds zien:
https://www.zonstraal.be/landkaart/
 
- Ariën  -
Beheerder

- Ariën -

27/02/2022 22:16:43
Anchor link
Zo te zien is er dus (nu) een werkende connectie.
Dus dat probleem is er niet (meer).

Waar komt ort in map.func.php van lijn 34 vandaan?
mysqli_error() is nog ergens niet voorzien van je $this->link

Kan je anders de relevante scripts tonen op en rond die lijnen die in de error genoemd worden uit de genoemde bestanden?
Gewijzigd op 27/02/2022 22:18:46 door - Ariën -
 
Jan Bakker

Jan Bakker

27/02/2022 23:47:17
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
// Eintrge aus der Datenbank laden und nach Pixelkoordinaten gruppieren
function getPoints($id=0) {
    // Suche ?
    $q = "SELECT u.name, g.lon, g.lat, g.ort FROM ".TABLE_USER." u LEFT JOIN ".TABLE_GEODB."  g ON u.geoid = g.id WHERE 1 ";
    if($id) $q .="AND u.id = '".mysqli_real_escape_string($id)."' ";
    if($_GET['name']) $q .="AND u.name LIKE '%".mysqli_real_escape_string($_GET['name'])."%' ";
    if($_GET['plz']) $q .="AND g.plz LIKE '".mysqli_real_escape_string($_GET['plz'])."%' ";
    if($_GET['ort']) $q .="AND g.ort LIKE '".mysqli_real_escape_string($_GET['ort'])."%' ";
    
    global $db;
    $res = $db->query($q);
    $p=array();


De regels 27 tot 38 in map.function.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
// Karte zeichnen ( standard Aktion )
else {
    require_once('inc/map.func.php');
    echo '<div id="map"><div id="inf"></div>';
    $p=getPoints((int)$_GET['m']);
    generatePoints($p);
    echo '</div>';
}

120 tot 127 van de index.php
 
- Ariën  -
Beheerder

- Ariën -

28/02/2022 00:26:03
Anchor link
Over de errors: Warning: Undefined array key .............

Kan je $q echo'en op de lege lijn 9?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo $q;

Welke query zie je dan bij uitvoer van je script?
Ik heb een vermoeden dat je de parameters: name, plz en ort niet in je URL benoemt.

Je zult met isset() moeten controleren of ze bestaan. Bijv:
if(isset($_GET['plz'])) (en dat ook voor name en ort)

Ook moet je net als bij mysqli_query de mysqli_real_escape_string(...) functie voorzien van je link naar je connectie. In dit geval $db->link (geen this, dat gebruik je enkel in classes)
---------------------------
Over de error: mysqli_error() expects exactly 1 argument, 0 given
In je sql.class.php on line 28 mis je bij mysqli_error() een $this->link in die functie.
---------------------------
En over je index.php met de error: PHP_AUTH_USER
Waar komt dat in je index.php voor op/rond lijn 30?

Als je dat goed hebt, moet het goed werken.
Die var_dump()'s mag je dan wel weghalen en moet je een error-schone site hebben.
Gewijzigd op 28/02/2022 00:37:42 door - Ariën -
 
Ivo P

Ivo P

28/02/2022 10:22:17
Anchor link
Je bent nu bezig om een niet-eigen script aan te passen zodat het met een veel nieuwere versie van PHP gaat werken.
Naast dat de mysql-functies intussen vervangen zijn door mysqli, heb je ook te maken met nog een rijtje andere functies die in de loop van de tijd uit php gehaald zijn. Bijvoorbeeld de regexfuncties.

Maar ook zaken als dat een metho met dezelfde naam als een class de functie van __construct() heeft.

Je zult aan de lopende band tegen die fouten aan gaan lopen.
Daarnaast heb je de melding "undefined array key" (die ik als "undefined index" zou verwachten.
Dat duidt erop dat de code kennelijk eerst onder een laag level van error-reporting had gewerkt.

Het lijkt mij het verstandigst om te kijken op https://www.phpbb.com/ en daar een recentere versie te downloaden om je scripts daarmee te updaten.
Dan doe je niet al het werk opnieuw, en kun je ook bijblijven als over 3 maanden een nieuwe versie uitkomt.
Als je er nu zelf in gaat klieren, is straks niets meer compatibel.
 
- Ariën  -
Beheerder

- Ariën -

28/02/2022 10:27:09
Anchor link
@ivo Ik heb het idee dat dit geen code is van het phpBB forum.
 
Jan Bakker

Jan Bakker

28/02/2022 13:59:27
Anchor link
Inderdaad dit script heeft niets met phpbb te maken maar komt hier vandaan https://chaosquake.de/projects/landmark-system
echo $q; geeft
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT u.name, g.lon, g.lat, g.ort FROM lms_user u LEFT JOIN lms_geodb g ON u.geoid = g.id WHERE 1 object(mysqli)#2 (18) { ["affected_rows"]=> int(83) ["client_info"]=> string(15) "10.3.32-MariaDB" ["client_version"]=> int(100332) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(4) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(23) "10.3.29-MariaDB-cll-lve" ["server_version"]=> int(100329) ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(407838985) ["warning_count"]=> int(0) } string(100) "SELECT u.name, g.lon, g.lat, g.ort FROM lms_user u LEFT JOIN lms_geodb g ON u.geoid = g.id WHERE 1 "


De andere vragen zal ik later beantwoorden, eerst de waterleiding herstellen :-)
 
- Ariën  -
Beheerder

- Ariën -

28/02/2022 14:09:08
Anchor link
Die var_dumps mag je wel weghalen.
Hoe ziet je query er dan uit? En heb je de andere dingen al toegepast?

En kan je ook vertellen waar PHP_AUTH_USER vandaan komt?
Gewijzigd op 28/02/2022 14:38:27 door - Ariën -
 
Ivo P

Ivo P

28/02/2022 17:19:09
Anchor link
in index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// Admin User/Passwort überprüfen
if($_SERVER['PHP_AUTH_USER'] == ADMIN_USER && $_SERVER['PHP_AUTH_PW'] == ADMIN_PASSWORD) {
    $GLOBALS['LMSAdmin']=true;
}

?>


moet iets worden als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
// Admin User/Passwort überprüfen
if(isset($_SERVER['PHP_AUTH_USER']) &&  $_SERVER['PHP_AUTH_USER'] == ADMIN_USER
&& isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW'] == ADMIN_PASSWORD) {
    $GLOBALS['LMSAdmin']=true;
}

?>
 
- Ariën  -
Beheerder

- Ariën -

28/02/2022 17:25:47
Anchor link
net als bij de $_GET'jes in de query: Een isset() erbij.
 
Jan Bakker

Jan Bakker

02/03/2022 12:17:55
Anchor link
Ik heb de var dumps verwijdert.
En in de index.php dit aangepast
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
// Admin User/Passwort berprfen
if(isset($_SERVER['PHP_AUTH_USER']) &&  $_SERVER['PHP_AUTH_USER'] == ADMIN_USER
&& isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW'] == ADMIN_PASSWORD) {
    $GLOBALS['LMSAdmin']=true;
}


Dan die die "$db -> link" in map.function.php gezet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
// Eintrge aus der Datenbank laden und nach Pixelkoordinaten gruppieren
function getPoints($id=0) {
    // Suche ?
    $q = "SELECT u.name, g.lon, g.lat, g.ort FROM ".TABLE_USER." u LEFT JOIN ".TABLE_GEODB."  g ON u.geoid = g.id WHERE 1 ";
    if($id) $q .="AND u.id = '".mysqli_real_escape_string($id)."' ";
    if($_GET['name']) $q .="AND u.name LIKE '%".mysqli_real_escape_string($db->link, $_GET['name'])."%' ";
    if($_GET['plz']) $q .="AND g.plz LIKE '".mysqli_real_escape_string($db->link, $_GET['plz'])."%' ";
    if($_GET['ort']) $q .="AND g.ort LIKE '".mysqli_real_escape_string($db->link, $_GET['ort'])."%' ";
    echo $q;
    global $db;
    $res = $db->query($q);
    $p=array();


En in sql.class.php $this->link waarna de fatal error verdween.

Nu nog alleen de ort, name, plz en m errors.
https://www.zonstraal.be/landkaart/
 
- Ariën  -
Beheerder

- Ariën -

02/03/2022 13:48:56
Anchor link
Kijk eens naar wat ik zei over isset().
Verder zie ik nog een mysql_query()
 
Jan Bakker

Jan Bakker

02/03/2022 14:22:59
Anchor link
mysql_query opgelost

Kun je een voorbeeld geven van die isset(). want ik begrijp dat echt niet
 
- Ariën  -
Beheerder

- Ariën -

02/03/2022 14:36:36
Anchor link
Als je dat ook om je $_GET[...] variabelen zet.
 
Jan Bakker

Jan Bakker

02/03/2022 15:05:46
Anchor link
Dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (isset($_GET['name'])) $q .="AND u.name LIKE '%".mysqli_real_escape_string($db->link, $_GET['name'])."%' ";

ipv
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ($_GET['name']) $q .="AND u.name LIKE '%".mysqli_real_escape_string($db->link, $_GET['name'])."%' ";

?
 

Pagina: « vorige 1 2 3 volgende »

 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.