Ga naar inhoud


PHP: pagina geeft inees 'scalar value' foutmelding


Hendrik6073

Aanbevolen berichten

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 !

Link naar reactie
Delen op andere sites


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

Link naar reactie
Delen op andere sites

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

 

Link naar reactie
Delen op andere sites

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

Link naar reactie
Delen op andere sites

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

Link naar reactie
Delen op andere sites

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 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"

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 Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

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 leeg
2 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

Link naar reactie
Delen op andere sites

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 ?

Link naar reactie
Delen op andere sites

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

Link naar reactie
Delen op andere sites

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

Link naar reactie
Delen op andere sites

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

Link naar reactie
Delen op andere sites

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 Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

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 account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
  • Wie is er online   0 leden

    • Er zijn geen geregistreerde gebruikers deze pagina aan het bekijken
×
×
  • Nieuwe aanmaken...