[PHP] mysqli klasse weg na include?

Pagina: 1
Acties:

Onderwerpen


  • FlippieAI
  • Registratie: April 2007
  • Laatst online: 02-12 20:10
Hallo,

Onlangs ben ik bezig gegaan met mysqli prepared statements. Nu heb ik voor de website waar ik mee bezig ben een simpele connect.php gemaakt:"
PHP:
1
2
3
4
5
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
if(mysqli_connect_errno())
{
    exit('Fout bij verbinding: '.mysqli_connect_error());
}


Deze include ik op mijn index.php en daarop zit een pagina script die afhankelijk van wat er via ?page= wordt meegegeven de juiste pagina include. Voor het gemak neem ik als voorbeeld user_create.php.

Wanneer ik met $mysqli bezig ga op index.php gaat dit prima, maar zodra ik deze probeer aan te roepen vanuit user_create.php krijg ik de volgende foutmelding:
code:
1
Notice: Undefined variable: mysqli in C:\Webserver\Apache2.2\htdocs\user_create.php on line 60 Fatal error: Call to a member function prepare() on a non-object in C:\Webserver\Apache2.2\htdocs\user_create.php on line 60


Zodra ik in user_create.php zelf connect.php include dan gaat het wel goed. Waarom werkt dit niet als ik hem alleen via index.php include?

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Edit: je zal moeten gaan debuggen, want zonder alle (relevante) code wordt dit koffiedik kijken.

Wordt de connect.php altijd geïncluded vanaf de index.php? Gaat dit altijd goed? De foutmelding laat eigenlijk al zien dat 'ie de connect.php niet laadt, anders zou de $mysqli-variabele wel bekend zijn. Staat je include niet verstopt in een if?

[ Voor 99% gewijzigd door CodeCaster op 02-10-2012 16:06 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • FlippieAI
  • Registratie: April 2007
  • Laatst online: 02-12 20:10
Sorry, dat moest ipv overzicht.php ook user_create.php zijn. (is nu aangepast)

Maar zou het niet ook gewoon moeten werken als ik in index.php eerst connect.php include en vervolgens user_create.php? Dan zou user_create.php hier toch ook gewoon gebruik van moeten kunnen maken?

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 13:34
Hoe is je code opgebouwd? Wanneer je procedureel werkt, en in user_create.php de $mysqli variabel probeert te gebruiken in een functie bijvoorbeeld, werkt dat niet omdat die variabel binnen de functie niet bekend is. Dit werkt bijvoorbeeld niet:

PHP:
1
2
3
4
// user_create.php
function bla() {
    $mysqli->functie(); // werkt niet omdat $mysqli niet bestaat binnen de functie
}


Je zult dan binnen je functie aan moeten geven dat de variabel globaal bestaat, dus zo:
PHP:
1
2
3
4
5
// user_create.php
function bla() {
    global $mysqli;
    $mysqli->functie();
}

...


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:50

Janoz

Moderator Devschuur®

!litemod

Hoe ziet je include code in de index er uit? Ben je soms al verwerkte php code aan het includen? (nog los van de onveiligheid van het zomaar includen op basis van een vanuit de client meegegeven parameter)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • FlippieAI
  • Registratie: April 2007
  • Laatst online: 02-12 20:10
Mijn index ziet er (kort gezien) zo uit:
PHP:
1
2
3
4
5
6
<?php
include('inc/connect.php');
include('inc/header.php');
include('inc/user_create.php'); //Dit gaat dan via een case switch
include('inc/footer.php');
?>


Natuurlijk zit hier een pagina systeempje achter waardoor user_create.php steeds wordt vervangen door de juiste pagina. Maar effectief gezien komt dit er dus uit.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

(kort gezien)
Maar dat is dus irrelevant, want de echte code werkt niet zoals het daar staat, want als connect.php altijd geïncluded zou worden zou je die foutmelding niet krijgen. Laat eens de (relevante) echte code zien.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...

Pagina: 1