Werkt niet meer met PHP 7
Pagina: « vorige 1 2 3 volgende »
Dan moeten we verder debuggen:
Code (php)
1
2
3
4
5
6
7
8
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;
}
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 -
Code (php)
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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" ) );
}
// 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" ) );
}
Want waar slaat dit op: $this->janus_landkaart ?
Code (php)
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.
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 -
Dat had ik ook al getest maar de error blijft hetzelfde.
Als ik de code nog eens verbeter:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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());
}
// 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 -
Code (php)
1
2
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 "
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/
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 -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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();
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)
1
2
3
4
5
6
7
8
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>';
}
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
Kan je $q echo'en op de lege lijn 9?
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 -
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.
@ivo Ik heb het idee dat dit geen code is van het phpBB forum.
https://chaosquake.de/projects/landmark-system
echo $q; geeft
De andere vragen zal ik later beantwoorden, eerst de waterleiding herstellen :-)
Inderdaad dit script heeft niets met phpbb te maken maar komt hier vandaan echo $q; geeft
Code (php)
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 :-)
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 -
Code (php)
1
2
3
4
5
6
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;
}
?>
// 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
net als bij de $_GET'jes in de query: Een isset() erbij.
En in de index.php dit aangepast
Code (php)
1
2
3
4
5
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;
}
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)
1
2
3
4
5
6
7
8
9
10
11
12
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();
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/
Verder zie ik nog een mysql_query()
Kun je een voorbeeld geven van die isset(). want ik begrijp dat echt niet
Als je dat ook om je $_GET[...] variabelen zet.
Code (php)
1
if (isset($_GET['name'])) $q .="AND u.name LIKE '%".mysqli_real_escape_string($db->link, $_GET['name'])."%' ";
ipv
Code (php)
1
if ($_GET['name']) $q .="AND u.name LIKE '%".mysqli_real_escape_string($db->link, $_GET['name'])."%' ";
?
Pagina: « vorige 1 2 3 volgende »