Posts by Darsstar

    $this is voor binnen een method waar die op een instantie van die class is aangeroepen:
    $boe->schrik();
    $boe is dan de instantie.


    Maar methods (en variabelen) kunnen ok statisch (static) zijn en los van elke instantie aangeroepen worden.
    Binnen die method kun je "self" gebruiken (self::method())
    Die methodes kunnen geen $this gebruiken omdat $this de instantie voorstelt, maar dat is voor statische dingen niet het geval.


    Cookie::$domain = '.example.com';
    self::$domain (kan je binnen alle methods aanroepen) zal voor elke instantie het zelfde zijn.

    NEE!


    Ik had een hele lijst met fouten gemaakt voor de Database class...
    Maar ik was vergeten het bericht te kopieren voor ik op "Plaats reactie" klikte, en wanneer je te lang wacht gaat er iets fout...


    Ik kan je wel vertellen dat het een hele hoop fouten waren...


    Ik ga het lijstje weer eens opstellen:


    Database::__construct()

    PHP
    # Create standard variables for class
            private $this->identifier;
            private $this->SqlLine;
            private $this->Value;


    Dat hoort binnen een class, niet binnen een method (zo noemen we een functie binnen een class).
    Ook is het "this->" niet nodig (geeft fouten)


    PHP
    $this->identifier = mysql_connect($this->hostname, $this->username, $this->password);


    Waar komen $this->hostname, $this->username en $this->password ooit vandaan?
    Geef vier verplichte parameters mee aan de constructor ($db = new Database('localhost', 'username', 'password', 'database'))


    PHP
    # Error handler, when sql error
                $RespondsHandler->sql('CONNECT_ERROR');


    Een mooie fout, maar niet wat je verwacht.
    $RespondsHandler bestaat niet binnen deze scope (de method) en geeft dus fouten.


    Database::SqlQuery()

    PHP
    function SqlQuery ( $this->SqlLine = 'Unknown' )
        {
            # when a empty line has been returned
            if ( $this->SqlLine  == 'Unknown' )
            {
            
                $RespondsHandler->sql('NO_SQL_LINE');
                
            }


    $this->SqlLine = 'Unkown' geeft een leuke fout: Cannot re-assign $this.
    Gebruik func_num_args() om te kijken hoeveel parameters er zijn meegegeven als je zo graag wilt dat $RespondsHandler de fout registreert (en NULL is een betere standaard waarde, het staat voor missende data namelijk, precies wat jij wilt)
    Ok lijkt het me beter om FALSE te returnen als er een error opduikt en niet niets (void). (in de constructor, de destructor en vast nog wel een paar andere magic methods heeft returnen geen zin)
    Beter:

    PHP
    public function SqlQuery ( $SqlLine = NULL )
        {
            # when a empty line has been returned
            if ( ! func_num_args() OR ! is_string($SqlLine))
            {
                $RespondsHandler->sql('NO_SQL_LINE');
                return FALSE;
            }



    PHP
    {
                    
                    # Sql succeed
                    return true;
                    
                }


    Database::Value gaat er toch echt vanuit dat deze method de mysql_query() returned...


    Database::Value()

    PHP
    if ($this->SqlLine == 'Unknown') || ($this->Value == 'None')


    Waar slaat ") || (" op? En dan vooral de haakjes...


    PHP
    protected $this->Result = self::SqlQuery( $this->SqlLine );
                    protected $this->array_return = array ( );


    Kom jij uit de Java(script) hoek vandaan ofzo?
    Binnen PHP geef je met "global" aan dat je een variabele van het aller laagste scope wilt gebruiken, en voor de rest zijn er superglobals die je in elke scope kan gebruiken en (de normale) variabelen die alleen binnen de huidige scope bestaan.
    $Result = $this->SqlQuery($this->SqlLine); is dus wat je wilt.
    $this->SqlQuery() inderdaad, Database::SqlQuery is niet static en kan dus niet aan worden geroepen alsof het wel static is...



    Je vergeet een = teken voor mysql_fetch_assoc()
    De foreach moet binnen de else, en de mysql_fetch_assoc moet buiten de foreach (de mysql_error() dus ook)
    De .= operator is voor een string, voor een array gebruik je $array[] =
    Nog beter is helemaal geen foreach maar een $array_return = array_interset_key($assoc, array_flip($Value)) is stukken beter



    Leef je nog?
    Ik heb elke soort fout maar een keer opgenoemd, het lijkt me dat je zelf wel kunt bedenken dat het voor andere plaatsen ook geldt.
    Wil je dat ik doorga met Login, of wil je eerst de kans krijgen Database en Login te verbeteren? (aub je oorspronkelijke bericht aanpassen en melden dat je dat gedaan hebt en niet hele nieuwe plakken code plaatsen)


    Toch vind ik het heel fijn dat je dit topic hebt aangemaakt!
    Weer eens een interessant topic!

    Citaat van scarface

    Test edit [kan niet op opslaan ?]


    Dat is een bug, iets in het script zorgt er voor dat CP moeilijk doet.
    Gebruik plaatscode.be of iets degelijks.

    Connection.php:


    Dat was de oplossing voor KyleM (ik heb naar hartenlust dingen kunnen testen op zijn server)
    De PHPSESSID cookie moet voor het '.example.com' zijn en niet 'www.example.com' of 'example.com' wat PHP wel automatisch kiest.
    Dat is zodat die cookie voor zowel http://www.example.com en example.com werkt (en alle andere subdomeinen die je kunt bedenken)
    Ik hoop dat dit ook voor jou de oplossing is.

    Je kunt zoiets gebruiken:

    PHP
    function abort($text = '')
    {
        echo $text;
        require 'footer.php'; // vul zelf even het juiste bestand in
        exit;
    }


    Ik heb Pharox eens geholpen met het zelfde probleem, zijn versie van deze functie sluit ook meteen alle tabellen die open zijn.
    Dat kan je er dus ook nog eens bij maken...

    PHP kent verschillende data types, een resource is een speciaal soort variabele.
    http://www.php.net/manual/en/language.types.resource.php
    Alle soorten:
    http://www.php.net/manual/en/resource.php


    Het echoën van een resource zal je niets vertellen


    Verder zal de PHP nooit bij de tweede debug echo aankomen, de return komt eerst en geeft daarmee het einde van de functie aan.


    Wat er fout gaat: $titel, $story en $image bestaan niet binnen de functie, geef deze net als $newsID mee aan de functie.


    PS. binnen die functie zul je mysql_real_escape_string() nog vier keer moeten gebruiken...

    *vraagt zich af welk genie deze onnodige redirect ooit heeft verzonnen*
    Stap 1: verijder inlogger.php *merkt de typo in zijn vorige post*
    Stap 2: Gebruik de volgende opgeschoonde (en hopelijk werkende) login.php

    Als je je error_reporting hoger zou zetten zou je notices krijgen...
    Ik pas de drie ifs die iets met $_GET['actie'] wel even aan...


    Verder is sql-injection mogelijk...


    Edit: bewerkt...

    Een javascript laten werken wanneer de pagina gesloten wordt?
    Ik dacht ooit van zo iets gehoord te hebben...


    Maar waarom zou je dat willen?
    Het aantal gasten over de laatste drie minuten weergeven lijkt me goed genoeg.

    Citaat van RiiCk

    Highlighten ga ik niet zelf doen. Ga niet me eigen topic highlighten laat ik over aan een ander crewlid.


    Ik wil het best doen, maar eerst zal Koen de database gegevens in een bepaalde bestand moeten updaten... (als hij toch bezig is ook nog mijn persoonlijke config aub...)


    Verder mag w3schools.com er van mij ook wel ergens tussen komen te staan...
    Maar dat is aan jou...

    PHP
    <?php
    if(isset($_POST['finish_x'])){
    mysql_query("UPDATE `users` SET `tijdmuscle`='0' WHERE `login`='$data->login'"); 
    }                                       
    ?>
                                    
        <form method="POST">
    	<input type="hidden" name="sel" id="sel" value="">
    	<input name="finish" type="image" onclick="document.getElementById('sel').value = 'true'" src="../images/training/backfire.jpg" />
    	</form>


    Dat zou alles moeten zijn...


    Die dump was vooral voor jou om van te leren...

    Die $_POST dump niet binnen die if (of welke if dan ook) zeten...
    En als je de naam van de input veranderd naar finish_x zal je op $_POST['finish_x_x'] of iets dergelijks...

    Zet leuk het volgende in je script:

    PHP
    echo '<pre>$_POST = ', var_dump($_POST), '</pre>';


    Twee waardes uit die array zouden de x- en y-coordinaten moeten zijn van de plaats waar jij geklikt hebt.
    Als ik het me goed kan herinneren zijn de keys van die waardes 'finish_x' en 'finish_y' respectievelijk.
    Er zal geen key 'finish' zijn en isset($_POST['finish']) zal dus FALSE returnen...

    1) Verkeerde categorie
    2) Al eens een dump van $_POST bekeken? (var_dump($_POST))
    Zelf zou in controleren op $_POST['finish_x'] (of zo iets, de x- en y-coordinaten worden verzonden)

    Doe wat aan je topic titel!
    Een pm leek me wel voldoende, maar blijkbaar niet...


    Tel het aantal gasten bij het aantal leden op voor het totaal aantal bezoekers...