[PHP] pakt POST variabelen niet (voor GA eCommerce)?

Pagina: 1

Acties:
Reacties: 6
Reg. datum: 16-04-2012

Hoi allemaal,

Ik ben geen PHP-expert, dus het is mogelijk dat ik eenvoudige dingen niet weet of over het hoofd zie. Ik sta open voor alle feedback. Ik zou dit probleempje heel graag oplossen.

Wat ik probeer te doen: We hebben een website, gebruiken een shopping cart (1ShoppingCart), en we willen dat deze netjes de informatie van een verkoop naar Google Analytics stuurt nadat een klant iets koopt. Hiervoor gebruiken we een "Thank You"-pagina die we zelf hosten.

Ik heb hiervoor al het een en ander ingesteld, alles zou moeten werken. De code op de Thank You pagina is de volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<head><!-- Google Analytics and ECommerce-->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXX-1']);
_gaq.push(['_trackPageview']);
_gaq.push(['_setAllowHash', false]);
_gaq.push(['_addTrans',
'<?php echo $_POST["orderID"]; ?>', // order ID - required
'Site naam', // affiliation or store name
'<?php echo $_POST["grandTotal"]; ?>', // total - required
'<?php echo $_POST["tax"]; ?>', // tax
'<?php echo $_POST["shippingAmount"]; ?>', // shipping
'<?php echo $_POST["city"]; ?>', // city
'<?php echo $_POST["state"]; ?>', // state or province
'<?php echo $_POST["country"]; ?>' // country
]);
// this will loop through the items in the shopping
// cart and pass the item info to Google
<?php
$i = 1;
do
{
// print out necessary analytics code for each product
echo " _gaq.push(['_addItem',",
"'".$_POST['orderID']."',"// order ID - required
"'".$_POST['sku'.$i]."',"// SKU/code - required
"'".$_POST['product'.$i]."',"// product name
"'',"// category or variation
"'".$_POST['price'.$i]."',"// unit price - required
"'".$_POST['quantity'.$i]."']);\n"// quantity - required
$i++;
}
while($_POST['price'.$i] != ''); ?>
//submits transaction to the Analytics servers
_gaq.push(['_trackTrans']);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' :'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
</head>

Deze heb ik ergens anders vandaag geplukt en aangepast voor onze website. In de body stond niets meer dan "Thank you".

Wel nu, ik heb een testkoop gedaan, om te checken of het werkte. Het werkte niet.

Om te kijken wat er dan gebeurd was ging ik naar "Bron weergeven" op de Thank You pagina, en daarin werd het volgende weergegeven:
screenshot "bron weergeven"
Hier houdt mijn kennis op. Want deze bron heeft niks met het PHP-bestand te maken dat ik geschreven heb. Er stond wel heel netjes alle informatie in die ik zou willen gebruiken (alles was ingevuld, heb uitgevlakt). Misschien is dit normaal, maar dat weet ik dus niet.

Met "Element Inspecteren" in Chrome zag ik het volgende:
screenshot "Element Inspecteren"

Hier blijkt dus dat de POST variabelen niet opgepakt worden door de PHP-code. Terwijl, gezien het feit dat alle variabelen netjes onder elkaar staan in de screenshot "bron weergeven", deze variabelen wel doorgegeven waren. (Verder staat er weer allerlei javascript code waar ik verder niks van weet.) Het enige wat ik wil is dat de POST variabelen worden neergezet in de Google Analytics tracking code.
Reacties: 499
Reg. datum: 14-06-2005

print_r($POST) gebruiken zodat je kunt zien wat precies wel en niet gesubmit wordt.
Reacties: 2.088
Reg. datum: 18-10-2007

quote:
lfs schreef op donderdag 14 juni 2012 @ 10:03:
print_r($POST) gebruiken zodat je kunt zien wat precies wel en niet gesubmit wordt.
Als je xdebug gebruikt var_dump($_POST); deze geeft een veel duidelijker leesbaar overzicht.
Je bent zelf hydrofiel.
Reacties: 22.821
Reg. datum: 13-06-2003

Wordt er wel ge-POST naar die Thank You-pagina?

And another thing you / Should've known from the start / The problems in hand / Are lighter than at heart

Reacties: 6
Reg. datum: 16-04-2012

Veel dank voor jullie reacties.

Als ik print_r($_POST); doe dan krijg ik dit terug: "Array ( )".


Als ik op de Thank You pagina in Chrome op "Pagina bron weergeven" klik, dan staat er het volgende in de zogenaamde bron:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<body onload="SubmitForm()">

  <form id="form1" method="POST">

    <input type="hidden" name="orderID" value="XX" />

    <input type="hidden" name="name" value="X" />

    <input type="hidden" name="company" value="" />

    <input type="hidden" name="email1" value="X" />

    <input type="hidden" name="address1" value="X" />

    <input type="hidden" name="address2" value="" />

    <input type="hidden" name="city" value="X" />

    <input type="hidden" name="state" value="" />

    <input type="hidden" name="zip" value="X" />

    <input type="hidden" name="country" value="X" />

    <input type="hidden" name="fax" value="" />

    <input type="hidden" name="phone" value="+X" />

    <input type="hidden" name="secondaryphone" value="" />

    <input type="hidden" name="cardtype" value="X" />

    <input type="hidden" name="shipname" value="X" />

    <input type="hidden" name="shipCompany" value="" />

    <input type="hidden" name="shipAddress1" value="X" />

    <input type="hidden" name="shipAddress2" value="" />

    <input type="hidden" name="shipCity" value="X" />

    <input type="hidden" name="shipState" value="" />

    <input type="hidden" name="shipZip" value="X" />

    <input type="hidden" name="shipCountry" value="X" />

    <input type="hidden" name="status" value="X" />

    <input type="hidden" name="sku1" value="X" />

    <input type="hidden" name="product1" value="X" />

    <input type="hidden" name="quantity1" value="X" />

    <input type="hidden" name="price1" value="X" />

    <input type="hidden" name="plist" value="X" />

    <input type="hidden" name="Total" value="X" />

    <input type="hidden" name="grandTotal" value="X" />

    <input type="hidden" name="adtrack" value="X" />

  </form>

</body>

Ik heb de waardes veranderd naar X'en, maar alle waarden kloppen. Betekent dit niet dat de POST-waarden wel zijn doorgegeven naar de Thank You pagina?

(En kan iemand mij vertellen waarom ik de code hierboven zie als ik "Paginabron weergeven" kies in Chrome, terwijl dit nergens terug te vinden is in de ThankYou.php? Is dit een normale manier waarop POST variabelen worden doorgegeven?)
Stampede - DejaMoo
Reacties: 10.814
Reg. datum: 10-04-2000

Wat geeft $_REQUEST ?

Doe mee met de DPC stampede en join DejaMoo !

Reacties: 6
Reg. datum: 16-04-2012

$_REQUEST gedaan. Dat geeft wat Wordpress login/settings informatie en utmx, utmxx, utm, enz. met getallen erachter. De POST waarden die ik wil staan er niet tussen.
Reacties: 2.403
Reg. datum: 28-03-2008

quote:
naam schreef op donderdag 14 juni 2012 @ 10:25:
[...]

Als je xdebug gebruikt var_dump($_POST); deze geeft een veel duidelijker leesbaar overzicht.
Zelfs zonder xdebug geeft var_dump meer informatie weer dan print_r. Print_r is alleen bedoelt voor array's, var_dump voor elke type.
quote:
helemaalblij schreef op donderdag 14 juni 2012 @ 18:19:
Veel dank voor jullie reacties.

Als ik print_r($_POST); doe dan krijg ik dit terug: "Array ( )".
In andere woorden: er wordt geen POST richting de "Thank You"-pagina gedaan, daarom is _POST ook leeg. (Aangenomen dat je ook echt debugged op de "Thank You"-pagina).
Reacties: 6
Reg. datum: 16-04-2012

Ik had dit allemaal op de Thank You pagina gedaan na een test aankoop ja.

Het enige wat ik dan nog niet weet is waarom die html-code hierboven in de broncode kan staan, als ik Paginabron Weergeven in Chrome doe. Die code waarin alle variabelen die ik nodig heb netjes vermeld wordt. Waar komt dat vandaan?
Rotorhead
Reacties: 855
Reg. datum: 12-09-2003

Doe dit eens
PHP:
1
2
3
4
5
6
7
8
9
10
_gaq.push(['_addTrans',
'<?php echo $_POST["orderID"]; ?>', 
'Site naam',
'<?php echo $_POST["grandTotal"]; ?>',
'<?php echo $_POST["tax"]; ?>',
'<?php echo $_POST["shippingAmount"]; ?>',
'<?php echo $_POST["city"]; ?>',
'<?php echo $_POST["state"]; ?>', 
'<?php echo $_POST["country"]; ?>'
]);

en dit:
PHP:

1
2
3
4
5
6
7
<?php
echo " _gaq.push(['_addItem',",
"'".$_POST['orderID']."',",
"'".$_POST['sku'.$i]."',",
"'".$_POST['product'.$i]."',",
"'',",
"'".$_POST['price'.$i]."',",
"'".$_POST['quantity'.$i]."']);\n";
?>

In je 2de stuk zit trouwens een fout, de php previewer doet het niet.

Ik kan vanalles en nog wat maar niets te goei, klinkt bekent ??

Reacties: 14.637
Reg. datum: 24-04-2000

@TS Pak er een debugproxy bij als Charles (kun je gratis proberen) en kijk waar die waarden blijven. Ik vermoed dat die gegevens worden verwerkt en simpelweg een redirect doet naar de bedanktpagina. Door die redirect gaan logischerwijs dan je POST-variabelen verloren.

Cartman! wijzigde deze reactie 14-06-2012 21:17 (19%)

Reacties: 857
Reg. datum: 07-03-2009

Dus je zegt dat er op die thank-you pagina een form staat met al die waardes in velden ingevuld? Hoe worden deze server-side ingevuld? Je zou, als je javascript met je google tracking code op diezelfde pagina staat, natuurlijk ook met javascript die form velden kunnen uitlezen, lijkt me al even gemakkelijk.

Disclaimer: Aan bovenstaande tekst kan geen enkel recht ontleend worden in gelijk welke vorm dan ook.

Reacties: 50.937
Reg. datum: 25-02-2004

Even iets heel anders dat je probleem niet gaat oplossen maar wat wel heel belangrijk is: doe eens netjes escapen voor Javascript als je die $_POST-variabelen afdrukt. Mensen kunnen nu heel makkelijk javascript inserten in je pagina met alle risico's van dien. Zoek eens op cross site scripting en code injection.

Omines - Snel en gratis juridisch advies
Standeman: Ik wil mijn ballen ook wel doneren hoor, ik doe er toch ook niets meer mee.

Reacties: 215
Reg. datum: 04-08-2005

Ik ken 1ShoppingCart niet, maar bij de meeste webshops zal je geen formulier posten naar de bedank pagina.
Dat jij een formulier ziet als je bron-weergeven doet, zal ermee te maken hebben, dat je een bedank pagina meestal niet los kan oproepen. De webshop verwijst je na een betaling naar die pagina, maar als je die ververst (wat je in feite ook doet als je bron-weergeven doet), zal je de webshop je waarschijnlijk doorsturen naar het bestelformulier.

Wat jij wilt, zal iets lastiger zijn dan een paar POST variabelen uitlezen. Je zal de gegevens van de bestelling ergens vandaan moeten halen. Hoe je dat moet doen, zal je uit de documentatie van 1ShoppingCart moeten halen.
Ik vermoed dat 1ShoppingCart wel het order-object beschikbaar stelt op de bedank pagina waarmee je veel van de informatie mogelijk kan achterhalen.

Canon EOS350D Digital, Canon EOS60D | Canon 18-55mm | Canon 55-250mm f/4-5.6 IS | Canon 100mm f/2.8 USM | Canon 100-400mm f/4.5-5-6L | Canon 430EX II

Pagina: 1