Avatar billede nomisweb Nybegynder
06. maj 2007 - 17:43 Der er 14 kommentarer

Fejl ved opdatering!

Hej,
Jeg er ved at lave en butik på nettet, men jeg får en fejl når jeg opdatere stk. i min indkøbskurv. Kan du fortælle mig hvorfor?
Fejlkoden er:
Notice: Array to string conversion in /home/virtual/purecreation.dk/public_html/shop/library/config.php on line 51

Notice: Array to string conversion in /home/virtual/purecreation.dk/public_html/shop/library/config.php on line 51

Notice: Array to string conversion in /home/virtual/purecreation.dk/public_html/shop/library/config.php on line 51
Unknown column 'A' in 'where clause'

Dette er hvad der står i og omkring linie 51:
48 if (!get_magic_quotes_gpc()) {
49    if (isset($_POST)) {
50        foreach ($_POST as $key => $value) {
51            $_POST[$key] =  trim(addslashes($value));
52        }
53    }

Dette er funktionen til at updatere:
function updateCart()
{
    $cartId    = $_POST['hidCartId'];
    $productId  = $_POST['hidProductId'];
    $itemQty    = $_POST['txtQty'];
    $numItem    = count($itemQty);
    $numDeleted = 0;
    $notice    = '';
   
    for ($i = 0; $i < $numItem; $i++) {
        $newQty = (int)$itemQty[$i];
        if ($newQty < 1) {
            // remove this item from shopping cart
            deleteFromCart($cartId[$i]);   
            $numDeleted += 1;
        } else {
            // check current stock
            $sql = "SELECT pd_name, pd_qty
                    FROM tbl_product
                    WHERE pd_id = {$productId[$i]}";
            $result = dbQuery($sql);
            $row    = dbFetchAssoc($result);
           
            if ($newQty > $row['pd_qty']) {
                // we only have this much in stock
                $newQty = $row['pd_qty'];

                // if the customer put more than
                // we have in stock, give a notice
                if ($row['pd_qty'] > 0) {
                    setError('Der er desværre ikke det ønskede antal for dette produkt på lager. Vælg venligst et mindre antal');
                } else {
                    // the product is no longer in stock
                    setError('Desværre er produktet, (' . $row['pd_name'] . '), ikke længere på lager');

                    // remove this item from shopping cart
                    deleteFromCart($cartId[$i]);   
                    $numDeleted += 1;                   
                }
            }
                           
            // update product quantity
            $sql = "UPDATE tbl_cart
                    SET ct_qty = $newQty
                    WHERE ct_id = {$cartId[$i]}";
               
            dbQuery($sql);
        }
    }
   
    if ($numDeleted == $numItem) {
        // if all item deleted return to the last page that
        // the customer visited before going to shopping cart
        header("Location: $returnUrl" . $_SESSION['shop_return_url']);
    } else {
        header('Location: cart.php');   
    }
   
    exit;
}

Tak for hjælpen,
S
Avatar billede erikjacobsen Ekspert
06. maj 2007 - 19:13 #1
$_POST['txtQty'] er et array - det kan du ikke bare lige sige addslashes til
Avatar billede erikjacobsen Ekspert
06. maj 2007 - 19:14 #2
Ja, og $_POST['hidCartId'] er også et array.
Avatar billede nomisweb Nybegynder
07. maj 2007 - 00:03 #3
OK, men hvordan kommer jeg så uden om det, så den rent faktisk opdatere?

Hvad vil addslashes egentlig sige?
Avatar billede erikjacobsen Ekspert
07. maj 2007 - 00:19 #4
Nu er det jo dig, der bruger addslashes ... så det ved du vel??
Du kan sikkert klare det på samme måde, som du gør med $_POST, som jo også er et array.
Avatar billede danziger Nybegynder
07. maj 2007 - 18:31 #5
Sjovt jeg sidder netop idag med akkurat samme problem -
jeg tilpasser en shopping-cart som öjensynligt er den samme, som ham der har startet dette emne, og baade min tilpassede OG den uändrede version, som jeg har downloadet og installeret paa min egen computer har samme fejl. Udviklerens eksempel paa hans egen hjemmeside har dog ikke denne fejl. Derfor formoder jeg det kan have noget at göre med opsätning eller versionsnumrene af min apache, php, sql, whatever. Synes ihvertfald det ville väre underligt hvis den version som den oprindelige udvikler har lagt til download skulle adskille sig fra den han selv körer paa det site der präsenterer shopping-cart'en. Jeg kan desvärre ikke lave link til den lige her, da jeg ikke skriver hjemmefra (derfor de dumme tyske bogstaver), men senere idag eller imorgen poster jeg linket -

hvis jeg finder en lösning skal jeg nok ogsaa skrive den her, ligesom jeg selvfölgelig vil väre yderst taknemmelig for enhver hjälp til lösning af det her problem.

naa, jeg ville bare lige skrive at jeg sidder med akkurat det samme, og at jeg vender tilbage senere.
Avatar billede nomisweb Nybegynder
07. maj 2007 - 20:22 #6
Ja det var da pudsigt! Så er det ikke bare mig! :-)

det jeg bruger hedder plaincart og er fra http://www.phpwebcommerce.com

Er det mon det samme?
Der er ingen hjælp at hente på udviklerens Q&A, så er der en frisk en som lige kan udbedre fejlen!
Avatar billede danziger Nybegynder
08. maj 2007 - 15:29 #7
Jeg har fundet løsningen nu:

I din php.ini fil skal du ændre din setting til:

=================================================
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
=================================================

(den står garanteret til 'off')

problemet er at ham der har lavet plain-cart selv har sin magic_quotes til 'on' så han har ikke opdaget at der er et problem i hans if-magic-quotes-off (omkring linie 51 i library/config.php) - den tager nemlig ikke højde for de tilfælde hvor der er tale om et array. Det ved han ikke, da han på grund af sine indstillinger aldrig har set indholdet af if'en. Så du må enten ændre dine indstillinger eller omskrive hans if-magic-quotes-off så den gør noget andet hvis variablen er et array...

Giver det mening?

... måske skulle jeg skrive en email til ham der har lavet plaincart...?
Avatar billede nomisweb Nybegynder
08. maj 2007 - 18:32 #8
Fedt at du har fundet fejlen.

Nu hoster jeg ikke selv mine sider, så jeg kan vel ikke rigtig gå ind og ændre i indstillingen i php.ini?
Eller også har jeg ikke forstået hvor php.ini filen ligger henne?!
Måske kan jeg spørge min host om hvad der står?!

Men jo måske sku du skrive til ham og spørge/sige det! Jeg har spurgt om hjælp til fejlen, men han svarer ikke!
Avatar billede nomisweb Nybegynder
08. maj 2007 - 18:34 #9
Sku måske lige tilføje at jeg ved ikke lige hvordan jeg skulle skrive en "if-magic-quotes-off", så hvis du har en start/idé så kan jeg måske godt komme igang med den, men finder den sgu ikke selv! :-(
Avatar billede nomisweb Nybegynder
09. maj 2007 - 21:41 #10
Har lige tjekket mit webhotels php5 opsætning, og magic_quotes_gpc er sat til on, men magic_quotes_runtime og _sybase er sat til off, ville det ændre noget at ændre dem?
Avatar billede erikjacobsen Ekspert
10. maj 2007 - 00:50 #11
Nå, jeg troede du selv havde skrevet koden, men så var det bare sådan et program du havde hentet. Det lyder lidt mærkeligt at du har magic_quotes_gpc sat til "on" og alligevel udfører den funktion. Men det jeg tænkte på tidligere var bare dette (skitse/utestet):

if (!get_magic_quotes_gpc()) {
    if (isset($_POST)) {
        foreach ($_POST as $key => $value) {
          if (is_array($_POST[$key])) {
            foreach ($_POST[$key] as $key2 => $value2) {
              $_POST[$key][$key2] =  trim(addslashes($value2));
            }
          } else {
            $_POST[$key] =  trim(addslashes($value));
          }
        }
    }

Men det lyder nu ikke som om det oprindelige script er synderlig gennemtænkt - på dette punkt i hvert fald, jeg har ikke kigget på andet.
Avatar billede nomisweb Nybegynder
10. maj 2007 - 12:00 #12
Du kunne selvfølgelig heller ikke vide det ikke var noget jeg havde skrevet!

Tak det virker!
I config filen står der nedenunder den nævnte problem på linie 51, det samme bare med GET i stedet, men hvis jeg ikke bruger GET på noget tidspunkt er det vel ligemeget at det står der!?

Lægger du et svar?

Tak for hjælpen...S
Avatar billede erikjacobsen Ekspert
10. maj 2007 - 12:15 #13
Jah, så kan det være ligemeget, men hvorfor ikke bare tage den med også.
Jeg samler slet ikke på point, tak.
Avatar billede nomisweb Nybegynder
10. maj 2007 - 13:28 #14
ok, jamen tak for hjælpen så!
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