Hendrik6073 Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Heb een tijdje terug een site voor iemand aangepast zodat er een php webwinkel mogelijkheid aanwezig is. Ben zeker niet thuis met alle ins en outs van PHP maar ik redt me aardig. Nu heeft de site prima gewerkt maar geeft nu ineens een foutmelding en wel deze: 'Warning: Cannot use a scalar value as an array' De site heeft prima gewerkt. De melding kan te maken hebben met een array die al gevuld is en nogmaals wordt gevuld begrijp ik uit wat google zoekwerk. Alleen alles heeft dus prima gewerkt en er is niets gewijzigd. Kan het zijn dat bij de provider iets is gewijzigd en dat daardoor e.e.a. niet meer functioneert. Bijvoorbeeld dat ze eerst alleen php4.x ondersteunde en nu ook 5.x ? ik lees er niets over op hun site, maar het is natuurlijk wel vreemd. Ik heb overigens in de code nergens staan welke PHP versie hij moet gebruiken, maar dat is ook niet echt noodzakelijk dacht ik. Wie zet mij op het juiste spoor ? Bij voorbaat dank !
Big fellow Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Heb je helemaal niets veranderd in de code? Deze fout wordt veroorzaakt door een volgend stukje code; $var = 123; $var[] = 456; Initieel maakt PHP van $var een integer. (Automatic typecasting), maar daarna wordt deze variabele gebruikt als array. Dat gaat dus niet goed want een integer is geen array. Simpel gezegt, ergens wordt een variabele gebruikt als array welke daarvoor gebruikt werdt als een ander type variabele. Normaal gesproken kan je wel zien om welke variabele het gaat aangezien de foutmelding je verteld welke regel van de PHP code de variabele bevat... “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill
Hendrik6073 Geplaatst: 15 augustus 2009 Auteur Geplaatst: 15 augustus 2009 Dank voor de reactie. Nee inderdaad, er is niets veranderd en dat maakt het zo vreemd. Het is ook nog eens zo dat ik om de winkelwagen te vullen steeds gebruik maak van hetzelfde stukje code, het verschil is een teller welke meeloopt en een soort van id genereert. Het gaat 2x goed en bij een 3e product ineens fout. stukje code dat ik gebruik staat hieronder. inhoud van $_SESSION['teller'] is een getal dat ik steeds met 1 ophoog ----------------------------------------------------------- $product = "$naam-$type-$aantal-$prijs"; if ($naam != ""){ $productcounter = $_SESSION['teller']; $_SESSION['winkelwagen'][$productcounter] = $product; } ------------------------------------------------------------ Ik zal nog eens goed alles nalopen met input die jij mij gaf, eens kijken of ik het probleem kan vinden thanx
Big fellow Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Php Code: if ($naam != "") { print_r($_SESSION); $productcounter = $_SESSION['teller']; $_SESSION['winkelwagen'][$productcounter] = $product; echo gettype($_SESSION['winkelwagen'])."\n<br>"; echo gettype($_SESSION['winkelwagen'][$productcounter])."\n<br>";} Als het bij de eerste twee goed gaat, maar bij nummer drie niet dan denk ik altijd aan een variabele die gecast is als BOOL. Een variabele met als type BOOL kent namelijk 0&1 als mogelijke waardes...Zet eens de uitkomsten van de extra opdrachten hier in het topic... “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill
Hendrik6073 Geplaatst: 15 augustus 2009 Auteur Geplaatst: 15 augustus 2009 welke opdrachten bedoel je ? de code waar vanuit ik naar deze if statement toe ga ? En mbt die 0&1 het nummer van het product maakt mij niet uit, is willekeurig dus ik kan eens proberen te starten met nr 5 bijvoorbeeld ?
Big fellow Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 De uitkomst van de print_r en de gettype opdrachten.... Zie het bovenstaande stukje code... “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill
Hendrik6073 Geplaatst: 15 augustus 2009 Auteur Geplaatst: 15 augustus 2009 oww overheen gekeken hierbij de output voor 1, 2 en de fout bij product 3 1 product Array ( [pagina] => index [bestaat] => 1 [teller] => 1 [order] => ) array string 2 producten Array ( [pagina] => index [bestaat] => 1 [teller] => 2 [order] => [winkelwagen] => Array ( [1] => Cor-Heren-1-5.95 ) ) array string 3 producten Array ( [pagina] => index [bestaat] => 1 [teller] => 3 [order] => [winkelwagen] => 2 ) Warning: Cannot use a scalar value as an array
Puch Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Origineel bericht van: Hendrik6073 -----------------------------------------------------------$product = "$naam-$type-$aantal-$prijs";if ($naam != ""){$productcounter = $_SESSION['teller'];$_SESSION['winkelwagen'][$productcounter] = $product;}------------------------------------------------------------ Voor zover mijn kennis gaat zie ik volgende oplossingje declareert $product$product = "$naam-$type-$aantal-$prijs";Vermits het tussen dubbele quote staat wordt het gezien een string met waarde $naam-$type-$aantal-$prijsin de controle $_SESSION['winkelwagen'][$productcounter] = $product;Dus $_SESSION['winkelwagen'][$productcounter] krijgt als waarde de string "$naam-$type-$aantal-$prijs"Probeer eens Code: $product = $naam . "-" . $type . "-" . $aantal . "-" . $prijs;if ($naam != ""){$productcounter = $_SESSION['teller'];$_SESSION['winkelwagen'][$productcounter] = $product;} Dan krijgt $product de "waarden" van $naam, $type, $aantal, en $prijs en de koppeltekens er tussen. iMac 27" macOS SierraiPhone 5s iOS 10
Big fellow Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Code: 1 productArray ( [pagina] => index [bestaat] => 1 [teller] => 1 [order] => ) -------2 productenArray ( [pagina] => index [bestaat] => 1 [teller] => 2 [order] => [winkelwagen] => Array ( [1] => Cor-Heren-1-5.95 ) ) -------3 productenArray ( [pagina] => index [bestaat] => 1 [teller] => 3 [order] => [winkelwagen] => 2 ) Warning: Cannot use a scalar value as an array Als ik naar het bovenstaande kijk valt mij iets op;1 product: winkelwagen is leeg2 producten: winkelwagen is een array (waarschijnlijk omdat $productcounter een waarde heeft van 1)3 producten: winkelwagen is opeens een integer?Ergo; je probleem zit hem niet in dit stuk code, maar waar je de sessie variabelen afhandelt. Daar gaat het verkeerd.... “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill
Hendrik6073 Geplaatst: 15 augustus 2009 Auteur Geplaatst: 15 augustus 2009 okay, dus wat je zegt is dat ik moet zoeken in de code die ervoor zorgt dat de winkelwagen in de sessie geplaatst wordt ? Ik zal er morgen naar kijken nu eerst maar eens een bakkie doen :-) Blijft mij wel een raadsel waarom dit ineens misgaat. kan het een php.ini wijzigig zijn of een versie verschil ?
Big fellow Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Origineel bericht van: Puch Voor zover mijn kennis gaat zie ik volgende oplossing je declareert $product $product = "$naam-$type-$aantal-$prijs"; Vermits het tussen dubbele quote staat wordt het gezien een string met waarde $naam-$type-$aantal-$prijs in de controle $_SESSION['winkelwagen'][$productcounter] = $product; Dus $_SESSION['winkelwagen'][$productcounter] krijgt als waarde de string "$naam-$type-$aantal-$prijs" Dit stukje code werkt wel aangezien in de $_SESSION array hetvolgende staat: [winkelwagen] => Array ( [1] => Cor-Heren-1-5.95 ) ) “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill
Big fellow Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Origineel bericht van: Hendrik6073 okay, dus wat je zegt is dat ik moet zoeken in de code die ervoor zorgt dat de winkelwagen in de sessie geplaatst wordt ? Ik zal er morgen naar kijken nu eerst maar eens een bakkie doen :-) Blijft mij wel een raadsel waarom dit ineens misgaat. kan het een php.ini wijzigig zijn of een versie verschil ? Het is een warning, dus als de standaard instelling van de error reporting is verandert, hetzij door een PHP versie update, hetzij door het anders te zetten in php.ini kan je opeens deze error krijgen. Echter het duid wel op slecht geschreven code... Zie: http://nl2.php.net/manual/en/function.error-reporting.php “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill
Big fellow Geplaatst: 15 augustus 2009 Geplaatst: 15 augustus 2009 Trouwens, ik weet niet of jezelf de hele code hebt geschreven, maar als dat het geval is kan ik je een tip geven m.b.t. het netter doorgeven van je $product... Code: $product = "$naam-$type-$aantal-$prijs"; Gebruik je nu. Ik zou het zelf schrijven als: Code: $prod['naam'] = $naam;$prod['type'] = $type;$prod['aantal'] = $aantal;$prod['prijs'] = $prijs;$product = serialize($prod); En dan om het uit elkaar te trekken: Code: $prod = unserialize($product);$naam = $prod['naam'];$type = $prod['type'];$aantal = $prod['aantal'];$prijs = $prod['prijs']; Het grote voordeel van op deze manier het verwerken is dat je in "naam"/"type"/"aantal"/"prijs" elk willekeurig teken kan gebruiken. Met je huidige code is je delimiter een "-" en kan je die dus niet gebruiken in de variabelen.... Het is maar een tip! :-) “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill
Hendrik6073 Geplaatst: 15 augustus 2009 Auteur Geplaatst: 15 augustus 2009 ja de code is zelfbouw, een echte hobby-ist zal ik maar zeggen :-) Ik ga morgen nog eens even knutselen. Tot zover hartelijk dank Big fellow & Puch, ik laat nog even van mij horen als ik eruit ben ...... als..... :-)
Puch Geplaatst: 16 augustus 2009 Geplaatst: 16 augustus 2009 Origineel bericht van: Big fellow Dit stukje code werkt wel aangezien in de $_SESSION array hetvolgende staat: [winkelwagen] => Array ( [1] => Cor-Heren-1-5.95 ) ) idd, dat bericht met wat er in die $_SESSION array staat kwam op het board het moment dat ik mijn bericht aan het typen was. Mijn opmerking is dus niet van toepassing iMac 27" macOS SierraiPhone 5s iOS 10
Aanbevolen berichten
Maak een account aan of log in om te reageren
Je moet een lid zijn om een reactie te kunnen achterlaten
Account aanmaken
Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!
Registreer een nieuwe accountInloggen
Heb je reeds een account? Log hier in.
Nu inloggen