Avatar billede nemesis Nybegynder
20. januar 2006 - 20:40 Der er 6 kommentarer og
1 løsning

Only variables can be passed by reference

Jeg får pludselig ovenstående fejl på et site. Min webhoteludbyder har givet mig dette hint:

http://www.php.net/README_UPGRADE_51.php#cirh

Jeg har indsnævret det til, at det må dreje sig om et af disse to scripts. Jeg vil være en del point taknemlig hvis nogen har tid til at rette dem:)

/JD


--------
<?php
    mysql_select_db("xxx", mysql_connect("localhost", "xxx", "xxx"));

    /**
    * Samme princip som mysql_fetch_assoc() der kører bare automatisk stripslashes() på result, er andet argument true
    * køres der også htmlentities på result.
    **/
    function fetch($result, $htmlentities = 0) {
        if (mysql_num_rows($result)) {

            $row = mysql_fetch_assoc($result);

            if (is_array($row)) {
                $row = array_map("stripslashes", $row);
                if ($htmlentities) {
                    $row = array_map("htmlentities", $row);
                }
                return $row;
            }

        }
        else {
            return FALSE;
        }
    }

    /**
    * Samme som mysql_query() med den undtagelse at der checkes for fejl.
    **/
    function sql($sql) {
        $result = mysql_query($sql) or trigger_error("Fejl i SQL'en:\n$sql\n".mysql_error(), E_USER_ERROR);
        return $result;
    }

    /**
    * Returnerer første felt fra sqlsætning.
    **/
    function fetch_field($sql) {
        $result = sql($sql);
        if (mysql_num_rows($result)) {
            return array_shift(fetch($result));
        }
    }

?>

--------
<?php

    settype($id, "integer");

    require_once "mysql.inc.php";

    class Auth {

        var $email    = "";
        var $password = "";
        var $id      = 0;

        function Auth($email, $password) {

            if ($email && $password) {
                $this->email    = $email;
                $this->password = $password;
            }
            elseif ($_COOKIE['email'] && $_COOKIE['password']) {
                $this->email    = $_COOKIE['email'];
                $this->password = $_COOKIE['password'];
            }

        }

        function opdater() {
            //sql("UPDATE bruger SET senestelogin = NOW() WHERE id = ".$this->id);
            mysql_query("UPDATE bruger SET forrigelogin = senestelogin, senestelogin = NOW() WHERE id = ".$this->id);
        }

        function check() {
            $id = fetch_field("SELECT id FROM bruger WHERE email = '".$this->email."' AND password = MD5('".$this->password."')");
            $this->id = $id;
            return $id;
        }

        function senestelogin() {
            return fetch_field("SELECT forrigelogin FROM bruger WHERE id = ".$this->id);
        }

        function login_kraevet() {
            if (!$this->check()) {
                header("Location: login.php");
                die("Adgang nægtet");
            }
        }

        function logind() {
            setcookie("email", $this->email);
            setcookie("password", $this->password);
            $this->opdater();
        }

        function logud() {
            setcookie("email", 0, 0);
            setcookie("password", 0, 0);
        }

    }

    $auth = new Auth($_POST['email'], $_POST['password']);

?>

--------
Avatar billede wetdog Nybegynder
20. januar 2006 - 21:58 #1
du har en funktion kaldet sql:

function sql($sql) {
        $result = mysql_query($sql) or trigger_error("Fejl i SQL'en:\n$sql\n".mysql_error(), E_USER_ERROR);
        return $result;
    }

og her kalder du funktionen fetch_field med parameter navn sql.

    function fetch_field($sql) {
        $result = sql($sql);
        if (mysql_num_rows($result)) {
            return array_shift(fetch($result));
        }
    }

det kan muligvis være her konflikten ligger.
Avatar billede jakobdo Ekspert
21. januar 2006 - 12:21 #2
Har du nogen steder i din kode hvor du bruger referencer?

function test(&$var){...}
eller
test(&$var);
Avatar billede nemesis Nybegynder
21. januar 2006 - 12:58 #3
jakobdo: Det er et site, hvor flere forskellige over en længere periode har bidraget med kode af svingende kvalitet. Derfor har jeg ikke overblikket. Men jeg håbede, at der kunne laves et hack i ovenstående, som kunne være tilstrækkeligt. Fejlen optræder kun, når man logger ind eller når man skriver et nyt indlæg.

wetdog: Har du et bud på hvordan det så skal være?
Avatar billede wetdog Nybegynder
21. januar 2006 - 14:21 #4
prøv at omdøbe functionen sql til xsql - husk også alle funktionskald
Avatar billede nemesis Nybegynder
21. januar 2006 - 14:27 #5
Det gjorde desværre ingen forskel.
Avatar billede nemesis Nybegynder
21. januar 2006 - 14:50 #6
YES! Videre søgning og yderligere en venlig sjæl endte med denne løsning:

    function fetch_field($sql) {
        $result = sql($sql);
        if (mysql_num_rows($result)) {
            $bar = fetch($result);
            $foo = array_shift($bar);
            return $foo;
        }
    }
Avatar billede nemesis Nybegynder
21. januar 2006 - 14:51 #7
Tak for interessen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester