Wat is er mis met onderstaande code???

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mike

Mike

12/10/2004 15:13:00
Quote 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
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$DBUSER
= "username";
$DBPASS = "pass";
$DBNAME = "dbname";
$DBSERVER= "localhost";

class myDB {

   var
$myConnection;
   var
$myRecordset;
   var
$row;

   function
myDB() {
      GLOBALS $DBUSER, $DBPASS, $DBSERVER, $DBNAME;
        
      $this->myConnection = mysql_connect($DBSERVER, $DBUSER, $DBPASS) or die("DB ERROR" . mysql_error());
      mysql_select_db($DBNAME, $this->myConnection) or die("Huh?" . mysql_error());
   }

   function
getRecords(strSQL) {
      $this->myRecordset = mysql_query(strSQL, this->myConnection);
   }

   function
getRow() {
      $this->row = mysql_fetch_row($this->recordset);
   }
    
   function
dbclose() {
      mysql_free_result($this->myRecordset);
      mysql_close($this->myConnection);
   }
}




$bla = new myDB();

?>

________________________________________

result = Huh?Access denied for user: '@localhost' to database 'dbname'

Het lijkt er dus op dat de username ineens niet meer wordt meegegeven????
Gewijzigd op 12/10/2004 16:08:00 door Mike
 
PHP hulp

PHP hulp

26/11/2024 00:14:29
 
Mary

mary

12/10/2004 15:19:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?

$DBUSER
= "username";
$DBPASS = "pass";
$DBNAME = "dbname";

?>


Bij jou in je echte script staat toch niet ook "username", "pass" en "dbname" he?
 
Mike

Mike

12/10/2004 15:24:00
Quote Anchor link
Hahahahaha, nee uiteraard niet.... Is een voorbeeldje...
 
Frisbee

Frisbee

12/10/2004 15:46:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

GLOBALS $DBUSER, BPASS, DBSERVER, $BNAME;

?>


BPASS moet volgens mij $DBPASS zijn en DBSERVER mist een $?
Gewijzigd op 12/10/2004 15:47:00 door Frisbee
 
Mitch X

Mitch X

12/10/2004 15:49:00
Quote Anchor link
En tis $GLOBALS['varname'] je hoeft ze niet eerst als global te zetten ...
 
Mike

Mike

12/10/2004 16:08:00
Quote Anchor link
Ah, sorry, die missende $ e.d. is een tikfoutje...
Die $GLOBALS['varname'] is een handige tip!!!! bedankt.

Heb de tikfoutjes even aangepast...

maar ziet iemand een reden waarom het script died op mysql_select_db ????
 
Mitch X

Mitch X

12/10/2004 16:11:00
Quote Anchor link
Er zitten nogal wat 'rare' dingen in je script.
Je kan kijke offut aan de database ligt, probeer eens een ander script, en wil je perse een class, probeer dan deze eens :
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
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
    # Filename : database.php
    # Author : Mitch Vroege
    # Projectname : nvt
    # Projectversion : nvt
    # Releasedate : nvt

    
    class Database
    {
        # Database vars
        var $user = "User";
        var
$pass = "Pass";
        var
$host = "localhost";
        var
$name = "DBname";
        
        # Functie die mysql_num_rows teruggeeft
        function num_rows($sql)
        {

            $this->connect();
            $res = mysql_query($sql);
            $aantal = mysql_num_rows($res);
            mysql_close();
            
            return $aantal;
        }

        
        # Functie de mysql_fetch_array teruggeeft
        function get_array($sql)
        {

            $this->connect();
            $res = mysql_query($sql);
            while($data = mysql_fetch_array($res))
                $row[] = $data;
                
            mysql_close();
                
            return $row;
        }

        
        # Zelfde als hierboven maar dan 1 row
        function get_single($sql)
        {

            $this->connect();
            $res = mysql_query($sql);
            $data = mysql_fetch_array($res);
            mysql_close();
            
            return $data;
        }

        
        # Functie die een normale query runt
        function execute($sql)
        {

            $this->connect();
            $res = mysql_query($sql);
            mysql_close();
            
            return $res;
        }

        
        # Functie die de database connectie maakt
        function connect()
        {

            return mysql_select_db($this->name, mysql_connect($this->host, $this->user, $this->pass));
        }
    }

?>
 
Mike

Mike

12/10/2004 16:25:00
Quote Anchor link
Zou je willen uitleggen wat voor rare dingen? Het was m.i. toch heel simpel... (Het is idd nu even niet compleet, maar hij klapt er toch al uit bij de constructor.)
 
Mitch X

Mitch X

12/10/2004 16:39:00
Quote Anchor link
Er klopt een hoop niet, maar daar heb ik nu geen tijd voor.
Deze regel heb je dus niets aan, die werkt niet:
GLOBALS $DBUSER, $DBPASS, $DBSERVER, $DBNAME;
Want daardoor komt die error ...

unction getRecords(strSQL) {
Mss een $ voor strSQL?

$bla = new myDB();
Een class is GEEN functie, als je niet weet hoe je een class hoort te gebruiken doe het dan niet, je maakt het jezelf onnodig moeilijk.
 
Mike

Mike

12/10/2004 17:06:00
Quote Anchor link
Sorry, kom uit de JavaHoek... vandaar de ()
Vergeet even die globals.....

Maar even voor de duidelijkheid, zal ik het stukje script opnieuw maken, zonder extra toeters en bellen, want het hele point is hier gemist:

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
15
16
17
<?php
class DBASE {
  // var om de mysql_link in vast te houden
  var $dbConnection

 //constructor
  function DBASE() {
  
  //connecten naar de database
  $this->myConnection = mysql_connect('localhost','username','pass') or die ("DB Connect failed");

  //juiste database selecteren
   mysql_select_db('dbname', $this->myConnection) or die (mysql_error());
  }

}

?>


Als ik nu een DBASE object instantieer, klapt het eruit met de melding:

Access denied for user: '@localhost' to database 'dbname'

Terwijl ik dan zou verwachten dat ik de melding zou krijgen waarin staat:
Access denied for user: 'username@localhost' to database 'dbname'


Waar is mijn username gebleven....????
Gewijzigd op 12/10/2004 17:08:00 door Mike
 
Winston Smith

Winston Smith

12/10/2004 17:16:00
Quote Anchor link
$connection = mysql_connect($this->DBHOST, $this->DBUSER, $this->DPPWD);

Dan moet je wel je inloggegevens voor MySQL ook binnen de klasse definieren. Dus:

var $DBHOST = 'localhost';
var $DBUSER = 'user';
var $DBPWD = 'pass';
var $DBNAME = 'dbname';
Gewijzigd op 12/10/2004 17:19:00 door Winston Smith
 
Mike

Mike

12/10/2004 17:22:00
Quote Anchor link
Mitch en Kasper, wellicht misschien een overbodig commentaar, maar misschien wist je het niet:

Ik definieer een aantal variabelen buiten de class (zals Kasper idd opmerkt)...
Om deze variablen binnen de class (of binnen andere fucnties) te gebruiken, definieer je eerst de variable opnieuw door $GLOBAL $varName...

Nu heeft de $varName dus de waarde die ook buiten de functie / Class gedefinieerd is. Het heeft dus niets met de $GLOBALS['varname'] te maken....

(Variabelen zijn anders alleen bekend binnen de functie / class)...

Nog een puntje trouwens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
 class whatever {
   var
$varname = 'iets';
 }

?>


in php4 kun je variables niet op deze manier declareren, dit moet je in je constructor doen. Dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
 class whatever {
   var
$varname;
  
   function
whatever() {
   $this->varname = 'iets';
   }
 }

?>



Just ter info.....
Gewijzigd op 12/10/2004 17:26:00 door Mike
 
Mitch X

Mitch X

12/10/2004 17:25:00
Quote Anchor link
Neej.
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
15
<?php
# Voorbeeldje

$naam = 'Mitch';

class zegnaam
{
   function
zegnaam()
   {

      echo $GLOBALS['naam'];
   }
}


$zegnaam = new zegnaam;
?>

Geef dus netjes Mitch :)
Niet zeuren dus ;)

Edit: En ik weet niet waarop je doeld met
Quote:
(Variabelen zijn anders alleen bekend binnen de functie / class)...
maar ik werk enkel met classes ...
Gewijzigd op 12/10/2004 17:26:00 door Mitch X
 
Mike

Mike

12/10/2004 17:31:00
Quote Anchor link
Ahh, op die manier....
Ik wist idd niet dat het ook op die manier kon, ik gebruikte daar dus altijd de andere manier voor: "$global $varName' $varName2"

Wat ik bedoelde met alleen bekend binnen class / functie is dit:

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
15
<?php
# Voorbeeldje

$naam = 'Mitch';

class zegnaam
{
   function
zegnaam()
   {

      echo $naam
   }
}


$zegnaam = new zegnaam;
?>


Zal niets terug geven omdat $naam niet bekend is binnen de functie zegnaam...
Als je eerst dit doet:

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
15
16
<?php
# Voorbeeldje

$naam = 'Mitch';

class zegnaam
{
   function
zegnaam()
   {

     $GLOBALS $naam
      echo $naam;
   }
}


$zegnaam = new zegnaam;
?>


dan werkt het weer zoals jij verwachtte, en heeft $naam de waarde mitch...

Enneh: Ik zeur niet ;)
 
Mitch X

Mitch X

12/10/2004 17:32:00
Quote Anchor link
Je zeurt wel.
Iedereen die met functies leert omgaan kent lokale en globale variabelen :)
 
Winston Smith

Winston Smith

12/10/2004 17:35:00
Quote Anchor link
Mike:
Nog een puntje trouwens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
 class whatever {
   var
$varname = 'iets';
 }

?>


in php4 kun je variables niet op deze manier declareren, dit moet je in je constructor doen. Dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
 class whatever {
   var
$varname;
  
   function
whatever() {
   $this->varname = 'iets';
   }
 }

?>



Just ter info.....


Heuh? Da's nieuw... Bij mij werkt dat wel gewoon en ik draai toch echt PHP 4 :|
 
Mitch X

Mitch X

12/10/2004 18:21:00
Quote Anchor link
Jah, hij weet ook niet waar hij het over heeft.
Als je het niet weet, leer het, vraag het, maar ga geen onzin uitkramen!

Je kunt gewo0n lokale variabelen aanmaken zonder problemen.
 
Marien xD

Marien xD

12/10/2004 20:05:00
Quote Anchor link
Wat is het voordeel dan van O.O.P.? Ik snap wel dat het moeilijk is ;)
 
Mike

Mike

13/10/2004 10:46:00
Quote Anchor link
Joh, nou dan zeur ik wel.... Laat maar zitten dan...
Wat betreft die variabelen die je niet kunt declareren in php4: dit betreft alleen niet-constanten... en ik gebruik zelden constanten op die manier... (Dat was misschien niet duidelijk) voor info, kijk gerust op php.net:

Quote:
In PHP 4, only constant initializers for var variables are allowed. To initialize variables with non-constant values, you need an initialization function which is called automatically when an object is being constructed from the class. Such a function is called a constructor (see below).


http://us2.php.net/manual/nl/language.oop.php

Enneh, bedankt voor de fijne reacties... Zo wordt je echt gemotiveerd om actief mee te gaan doen aan dit forum....
Jammer.....
Gewijzigd op 13/10/2004 11:07:00 door Mike
 
Mary

mary

13/10/2004 11:23:00
Quote Anchor link
Nu mijn commentaar *wink*

Globale variabelen gebruiken is zeer dom in klasses en functies. De hele bedoeling achter klasses en functies is dat ze een op zichzelf staand stukje code worden dat je op een snelle en makkelijke manier in eender welke code kan inplakken.
Met het doorgeven van parameters kan je gewoon je functie aanroepen en de juiste waardes in de functiehoofding zetten.

Bij het gebruik van globalen ga je dus al eerst je mogelijke bestaande variabelen moeten globaal maken/renamen en ga je je vingers moeten kruisen dat je niet al ergens een variabele met die naam hebt of je hele script draait in het frut.

Moraal van het verhaal :
Hou zoveel mogelijk variabelen lokaal gedeclareerd om 'ambigious errors' of dubbelzinnigheid tegen te gaan.
Gewijzigd op 13/10/2004 11:24:00 door mary
 
Mike

Mike

13/10/2004 11:39:00
Quote Anchor link
@mary: Ik ben het geheel met je eens.
Ik wilde echter iets proberen, gewoon als PoC, en dat is gelukt...
Dat het onverstandig is, is duidelijk. Het ging alleen maar even om de theorie.

Maar deze hele discussie is ondertussen losgeslagen van de eigenlijke vraag..... :P
 



Overzicht Reageren

 
 

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.