Avatar billede wetdog Nybegynder
16. oktober 2000 - 14:49 Der er 13 kommentarer og
1 løsning

UPDATE mysql-table via PHP

Hejsa

Er der nogen som kan se hvad der er galt med følgende funktion :

function Godkend_linie($linienr,$ordrenr)
        {
          global $sess_mysql;
          $dato = date(Ymd);

          mysql_pconnect($sess_mysql[\"host\"],$sess_mysql[\"admin\"],$sess_mysql[\"pass\"]);

          $sql = \"update ordrelinier set linie_bekraeft = 1, bekraeft_dato = \'$dato\'\";
          $sql = $sql . \"\\nwhere linienr = \'$linienr\' and ordrenum = \'$ordrenr\'\";

          mysql_db_query($sess_mysql[\"dbase\"],$sql) or die(\'skod\');
        }

Den kører fin nok og vil også returnere 1 for \"1 række opdateret\", men der skal intet med databasen.

WetDog
Avatar billede erikjacobsen Ekspert
16. oktober 2000 - 14:58 #1
Din $ordrenr og $linienr skal der vel også sige global til.
Avatar billede erikjacobsen Ekspert
16. oktober 2000 - 14:59 #2
Sorry - de er jo med som parametre. Nej, det ser lidt underligt ud, at det ikke virker
Avatar billede wetdog Nybegynder
16. oktober 2000 - 15:04 #3
Jeg gjorde som du sagde og nu virker det.....

Har en anden funktion næsten magen til hvor det ikke har været nødvendigt. Hvad sker der ???

function Godkend_kunde($kundenr)
        {
          global $sess_mysql;

          mysql_pconnect($sess_mysql[\"host\"],$sess_mysql[\"client\"]);

          $sql = \"update kunder set status = 1 where kundenr = \'$kundenr\'\";
          mysql_db_query($sess_mysql[\"dbase\"],$sql);

        }

WetDog

Avatar billede erikjacobsen Ekspert
16. oktober 2000 - 15:06 #4
What ??? Hvordan kaldte du Godkend_linie før ???
Avatar billede wetdog Nybegynder
16. oktober 2000 - 15:09 #5
Yep - det eneste jeg ændrede var :

global $sess_mysql,$linienr,$ordrenr;

og det kører. Har lige prøvet med :

global $sess_mysql;    //,$linienr,$ordrenr;

og igen virker det ikke - meget mystiskt !!!!

Du får dine points - men kan du komme med en forklaring ?


         

Avatar billede erikjacobsen Ekspert
16. oktober 2000 - 15:20 #6
Nej, jeg kan ikke ;-)  Jeg kunne dog rigtig meget godt tænke mig at se
et kald af Godkend_linie, for jeg tror nok det kunne være der, der er et
lille problem.
Avatar billede wetdog Nybegynder
16. oktober 2000 - 15:43 #7
Kunne det være fordi Godkend_linie er en metode i en klasse ???

Den bliver kaldt sådan :

$linie = new Ordrelinie;

$linie -> Godkend_linie($linienr,$ordrenr)

Men kan ikke forstå hvis det er det for ovenstående Godkend_kunde funktion er også en metode bare i en anden klasse
Avatar billede wetdog Nybegynder
16. oktober 2000 - 16:01 #8
Har her en 3. funktion som heller ikke virker

function login($kundenr, $password) {
        global $nova, $sess_mysql;

        if (!isset($nova[\"kundenr\"]) && !isset($nova[\"password\"]))
        {
            $password = md5($password);
            $dato = date(Ymd);

            mysql_pconnect($sess_mysql[\"host\"],$sess_mysql[\"client\"]);

            $sql = \"SELECT kundenr,password FROM kunder WHERE kundenr=\'$kundenr\'\";
            $sql = $sql . \"AND password=\'$password\' AND status=1\";

            $res = mysql_db_query($sess_mysql[\"dbase\"],$sql);
            if (mysql_numrows($res) == 1)
            {
                $row = mysql_fetch_array($res);
                $nova[\"kundenr\"]  = $row[\"kundenr\"];
                $nova[\"status\"]  = 1;

                $sql2 = \"update kunder set sidst_log_dato=\'$dato\', antal_login=antal_login+1\";
                $sql2 = $sql2 . \"where kundenr=\'$kundenr\'\";
                mysql_db_query($sess_mysql[\"dbase\"],$sql2);

                return 1;
            }
            else
            {
                  return 0;
            }
        }
        else
        {
          return 1;
        }

  }

problemet her mht $sql2 - det kører men der sker intet i databasen. Hvis jeg fjerner \"where clausen\", bliver alle poster opdateret.

Kundenr og password kommer fra en side som så eksekverer flg. php-fil :

if(Login($kundenr,$password)==1) {
    header( \'Location: http://\'.$sess_mysql[\"host\"].\'/butik/client/index.php\' );
    exit;
  } else {
    header( \'Location: http://\'.$sess_mysql[\"host\"].\'/butik/afvist.php\' );
    exit;
  }
Avatar billede erikjacobsen Ekspert
16. oktober 2000 - 20:53 #9
Øh, bøh, er det fordi de to variabler er en del af klassen, så du burde have skrevet:

$linie -> Godkend_linie($linie->linienr,$linie->ordrenr)

(lad os endelig finde ud af det)
Avatar billede wetdog Nybegynder
16. oktober 2000 - 21:28 #10
De er IKKE en del af klassen.

Kan det have noget at gøre med hvor variablerne kommer fra ?

Jeg har en side : adm.php hvor man de bliver genereret. Derefter bliver de sendt som
<form action=Godkend_linie.php>
<input type=hidden name=kundenr>

Fra Godkend_linie.php kaldes funktionen Godkend_linie() fra klassen Ordrelinier i filen
Ordrelinie.inc. Det er lidt af en omvej - ved det - men det er pga at man ikke skal kunne se koden i klasserne - et krav fra arbejdsgiveren.
Kan man gøre det på anden måde vil det lette mit projekt en hel del.

WetDog
Avatar billede erikjacobsen Ekspert
16. oktober 2000 - 21:38 #11
Tør du sende mig noget kode, så jeg kan afprøve. Prøv evt. at klippe så meget/lidt
ud af din kode, som lige netop illustrerer dit problem. Selvfølgelig skal du da kunne
bruge parametre. Der er et eller andet lumsk ved det her ;-) Bare klik på mit navn
herude til venstre for min email.
Avatar billede erikjacobsen Ekspert
17. oktober 2000 - 23:47 #12
Din email hos jubiipost.dk ville ikke her til aften. I det tilsendte, men ikke
det du har skrevet ovenfor, har du i Godkend_linie.php:

  $linie->Godkend_linie($linie,$ordrenr);

men du mener garanteret:

  $linie->Godkend_linie($linienr,$ordrenr);

men det har du jo skrevet ovenfor... Jeg er forvirret.
Avatar billede wetdog Nybegynder
18. oktober 2000 - 08:18 #13
Jamen det var der fejlen var o<|:-)

variablen hedder jo $linienr og ikke $linie.

Men nu opstår jo det nye spørgsmål - hvorfor virkede det så at sætte variablerne globale inde i funktionen ?????

Men mon ikke bare det er mig der har rodet godt og grundigt rundt i det hele :-)

Men tak for hjælpen Erik.
Avatar billede erikjacobsen Ekspert
18. oktober 2000 - 21:29 #14
Jah, fordi så henter du de globale variabler. En
  global a,b
overskygger eventuelle parametre, der måtte hedde det samme.
Du glad, mig glad!
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
Computerworld tilbyder specialiserede kurser i database-management

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