Avatar billede riefart Seniormester
04. august 2016 - 23:08 Der er 13 kommentarer og
3 løsninger

Udgået syntakt?

Denne syntaks har jeg hidtil brugt i min shop:
function get_pris($pid){
        $result=mysql_query("select pris from produkter where id=$pid") or die("select pris from produkter where id=$pid"."<br/><br/>".mysql_error());
        $row=mysql_fetch_array($result);
        return $row['pris'];
    }
    function remove_product($pid){
        $pid=intval($pid);
        $max=count($_SESSION['cart']);
        for($i=0;$i<$max;$i++){
            if($pid==$_SESSION['cart'][$i]['productid']){
                unset($_SESSION['cart'][$i]);
                break;
            }
        }
        $_SESSION['cart']=array_values($_SESSION['cart']);
    }
    function get_vare_antal(){
        $max=count($_SESSION['cart']);
        $antal=0;
        for($i=0;$i<$max;$i++){
        $q=$_SESSION['cart'][$i]['qty'];
        $antal+=$q;
        }
        return $antal;
    }


    function get_order_total(){
        $max=count($_SESSION['cart']);
        $sum=0;
        for($i=0;$i<$max;$i++){
            $pid=$_SESSION['cart'][$i]['productid'];
            $q=$_SESSION['cart'][$i]['qty'];
            $pris=get_pris($pid);
            $sum+=$pris*$q;
        }
        return $sum;
    }
    function addtocart($pid,$q){
        if($pid<1 or $q<1) return;
       
        if(is_array($_SESSION['cart'])){
            if(product_exists($pid)) return;
            $max=count($_SESSION['cart']);
            $_SESSION['cart'][$max]['productid']=$pid;
            $_SESSION['cart'][$max]['qty']=$q;
        }
        else{
            $_SESSION['cart']=array();
            $_SESSION['cart'][0]['productid']=$pid;
            $_SESSION['cart'][0]['qty']=$q;
        }
    }
    function product_exists($pid){
        $pid=intval($pid);
        $max=count($_SESSION['cart']);
        $flag=0;
        for($i=0;$i<$max;$i++){
            if($pid==$_SESSION['cart'][$i]['productid']){
                $flag=1;
                break;
            }
        }
        return $flag;
    }
men den virker tilsyneladne ikke med php 5.6 og opefter.
Kan nogen hjælpe med en korrekt syntaks på samme søgestrenge?
Avatar billede olsensweb.dk Ekspert
04. august 2016 - 23:24 #1
hvilke fejl får du ?? og hvor ??
slå error_reporting til hvis du ikke allerede har gjort det


>mysql_query
alle mysql_xx functionerne er fjernet i PHP 7, så du skal under alle omstændigheder opdaterer din code til mysqli eller PDO.

selv om du anvender PHP mindre end vertion 7 kan du godt gå igang ASAP
Avatar billede arne_v Ekspert
05. august 2016 - 01:29 #2
Baade 5.6 og 7.0 synes at acceptere syntax.

mysql extension er deprecated i 5.6 og gone i 7.0.
Avatar billede riefart Seniormester
05. august 2016 - 08:26 #3
Men har jeg ret i, at det kun er i denne:
$result=mysql_query("select pris from produkter where id=$pid") or die("select pris from produkter where id=$pid"."<br/><br/>".mysql_error());
        $row=mysql_fetch_array($result);
        return $row['pris'];
    }
der er problemet, at at alt andet fint kan køre i php 7.0?
Avatar billede olsensweb.dk Ekspert
05. august 2016 - 08:43 #4
>der er problemet, at at alt andet fint kan køre i php 7.0?
ref http://php.net/mysql_connect eller enhver anden mysql_ function du slår op i manualen på php.net
Warning
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information.

som skrevet tidligere, ALLE functioner der starter med mysql_ er fjernet. i PHP 7
opdater din code til mysqli eller PDO
Avatar billede riefart Seniormester
05. august 2016 - 08:52 #5
Tak for hjælpen. Går straks i gang.
Avatar billede michael_stim Ekspert
05. august 2016 - 09:19 #6
arne_v har skrevet en aldeles udemærket artikel/guide om MySQLi, Men kan ikke finde dem her på det "nye" eksperten.
Avatar billede olsensweb.dk Ekspert
05. august 2016 - 10:11 #7
det nemmeste for dig vil være at skifte til mysqli, og anvende procedural style (ligner det gamle API 99%) som du kender fra det mysql API'et, mysqli er OOP baseret, og du bør selvføgelig anvende OOP style, men du kan anvende både procedural og OOP style eller blande.

det fornuftige valg vil være at anvende Prepare Statement som er noget af det nye i mysqli og forbedret i PDO


gammel code

function get_pris($pid){
    $result=mysql_query("select pris from produkter where id=$pid") or die("select pris from produkter where id=$pid"."<br/><br/>".mysql_error());
    $row=mysql_fetch_array($result);
    return $row['pris'];
}



mysqli procedural (utested)

function get_pris($mysqli, $pid){
    $sql = "select pris from produkter where id=$pid";
    $result=mysqli_query($mysqli, $sql) or die($sql."<br/><br/>".mysqli_error($mysqli));
    $row=mysqli_fetch_array($result);
    return $row['pris'];
}


mysqli OOP style (utested)

function get_pris($mysqli, $pid){
    $sql = "select pris from produkter where id=$pid";
    $result=mysqli->query($sql) or die($sql."<br/><br/>".mysqli->error);
    $row=$result->fetch_array(MYSQLI_ASSOC);
    return $row['pris'];
}


Prepare Statement (utested)

/* forklaring til $stmt->bind_param('i', $pid);
*)  s: string
*)  i: integer
*)  d: double
*)  b: blob (binære data, sendt som pakker)
*/
function get_pris($mysqli, $pid){
    $sql = "select pris from produkter where id=?";
   
    if ($stmt = $mysqli->prepare($sql)){
        /* Bind parametre */
        $stmt->bind_param('i', $pid);
       
        /* Eksekver forespørgslen */
        $stmt->execute();       
       
        /* Bind resultatet */
        $stmt->bind_result($pris_);       
       
        /* Hent rækker og udskriv data */
        //while ($stmt->fetch()) {
            $stmt->fetch(); // henter én række
            $pris = $pris_;
        //}
        $stmt->close();       
    }
    else {
        /* Der er opstået en fejl */
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
    return $pris;
}



#6
en lille rettelse, det var OleBole der lavede den guide, men ja en ganske udemærket start guide
den hed Prepared Statements under MySQLI - kom igang
og her www.eksperten.dk/guide/1480

ref http://www.computerworld.dk/eksperten/spm/1010963?k=8221475
Guider har vi besluttet at nedlægge efter at have kigget nærmere på hvad der er kommet ind det sidste år.


ref http://www.computerworld.dk/eksperten/spm/1010963?k=8221503
Vi ser på det. Vi overvejer at gøre det tilgængelige som PDF. På den nåde kan man have dem lige ved hånden derhjemme.
Avatar billede michael_stim Ekspert
05. august 2016 - 10:50 #8
#7

Ja, selvfølgelig var det OleBole. Synes nu godt eksperten kunne have bevaret guiderne, de var perfekte at linke til i sådanne spørgsmål her.
Avatar billede riefart Seniormester
05. august 2016 - 14:36 #9
Det er rigtigt fint. Tak for hjælpen ronols. Jeg ved præcis hvor jeg skal hen.
Avatar billede arne_v Ekspert
05. august 2016 - 15:09 #10
Jep.

Der var 5 artikler om prepared statement/parameters.

Jeg havde skrevet om:

Java & JDBC
C# & ADO.NET
VB.NET & ADO.NET

olebole havde skrevet om:

PHP & mysqli

Og saa mener jeg at softspot havde skrevet om:

ASP & ADO
Avatar billede olsensweb.dk Ekspert
05. august 2016 - 18:23 #11
@riefart
hvis du vil læse guiden kan den findes via http://web.archive.org/web/
indtast http://www.eksperten.dk/guide/1480 i søge feltet
og vælg dato (typisk den sidst gemte)
Avatar billede riefart Seniormester
05. august 2016 - 18:27 #12
Jeg synes, jeg roder lidt rundt i det, og ikke rigtigt kan få det til at spille. Hvilken syntaks i #7 skal jeg bruge, når jeg har denne con-file:
$mysqli = new mysqli($server, $brugernavn, $kode, $db);
Avatar billede olsensweb.dk Ekspert
05. august 2016 - 19:08 #13
>Hvilken syntaks i #7 skal jeg bruge, når jeg har denne con-file:
det er ligegyldigt hvilke af functionerne du anvender:
men du kan selvføgelig kun anvende en af dem, da du ikke kan have flere functioner der hedder det sammen.


*) mysqli procedural style:  for at vise hvor tæt det gamle og nye API er hvis man anvender procedural style

*) mysqli OOP style: det mest anvendte.

*) Prepare Statement: det anbefalede, da der er størrer sikkerhed.


eks på kaldet er i alle tilfælde (utested)
// connection ligger normalt i en extern con-file
$mysqli = new mysqli($server, $brugernavn, $kode, $db);

$pris_id = 42;
$pris = get_pris($mysqli, $pris_id);
echo $pris;



ja man kunne overfører $mysqli som en global, istedet for som parameter, men så har du ikke styr på hvor dine variabler ændres, og variablerne skal hedde det sammen udenfor og inde i functionen.
mange (herunder mig) fraråder brug af global, men jeg ser det ofte brugt ifm opdatering fra mysql til mysqli, hvor man i det gamel API ikke havde overført connection

eks der smerter mig (utested)

function get_pris($pid){
    global $mysqli;
    $sql = "select pris from produkter where id=$pid";
    $result=mysqli_query($mysqli, $sql) or die($sql."<br/><br/>".mysqli_error($mysqli));
    $row=mysqli_fetch_array($result);
    return $row['pris'];
}

$mysqli = new mysqli($server, $brugernavn, $kode, $db);
$pris_id = 42;
$pris = get_pris($pris_id);
echo $pris;


hvis det stadig ikke virker må du lige lave en sql dump af produkter tabellen, med dummy data.
samt hvilke fejl du får
Avatar billede riefart Seniormester
05. august 2016 - 22:10 #14
Det var vist bare en fæl fejl: jeg var ikke klar over at jeg skulle inkludere con-filen i alle funktionen. Da jeg gjorde det, virkede det som det skulle. Stor ståhej for en lille tind.
Men tak for din store tålmodighed, Ronny. :-)
Avatar billede arne_v Ekspert
06. august 2016 - 16:31 #15
Re artikler)

Jeg valgte at kombinere mine Java, C# og VB.NET artikler og tilfoeje PHP (baade mysqli og PDO) og ASP.

Resultatet lan ses her:

http://www.vajhoej.dk/arne/articles/prepparam.html

Men bemaerk at den ikke er en erstatning for olebole's mysqli artikel.

Det er nemlig ikke en introduktion til mysqli men en en beskrivelse af hvorfor man skal bruge prepared statement med nogle kode eksempler bl.a. i PHP med mysqli.
Avatar billede arne_v Ekspert
06. august 2016 - 22:20 #16
Naa jeg var lige i skrive humoer idag.

Saa det blev ogsaa lige til en artikel om PHP og database access, som gaar lidt mere ind i mysql, mysqli og PDO.

Se:

http://www.vajhoej.dk/arne/articles/phpdb.html

Nok stadig ikke saa begynder venlig, men .....
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

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