Variabele vanuit Javascript naar PHP pagina sturen.

Overzicht

Sponsored by: Vacatures door Monsterboard

Colin h

Colin h

23/04/2014 18:39:41
Anchor link
Hallo,

Ten eerste zal ik mijn situatie even uitleggen:

Ik gebruik facebook's single sign-on plugin om mensen te laten inloggen op mijn site. Dit gaat met javascript.

Uiteindelijk krijg ik na het inloggen voor iedere user een uniek id van de ingelogde user. Die noem ik dan "var userid".

Met dat userid wil ik in een php pagina een database doorzoeken om alle bestellingen van de ingelogde user op te vragen. Iedere bestelling heeft een column "userid". Ik weet dus niet hoe ik mijn javascript variabele in mijn php script krijg.

Mijn facebook inlog script (en dus ook de variabele) staat in een geïnclude menu.php en ik heb die variabele nodig in mijn pagina.php.

Hopelijk kan iemand mij hiermee helpen.
 
PHP hulp

PHP hulp

20/04/2024 12:42:48
 
- Ariën  -
Beheerder

- Ariën -

23/04/2014 19:41:13
Anchor link
Als je een JS waarde over wilt brengen naar PHP, dan zou je een AJAX-request moeten gebruiken.
 
Colin h

Colin h

23/04/2014 21:36:48
Anchor link
Ik heb hier al eens naar gekeken maar het werkte niet.

Toen had ik dit:

javascript in menu.php:

$.ajax({
type: "POST",
url: 'pagina.php',
data: {userID: userid}
});

en dan in mijn pagina.php
$id = $_POST['userID'];
(menu.php staat included in pagina.php)
Misschien doe ik hier iets fout?
Gewijzigd op 23/04/2014 21:37:18 door Colin h
 
- Ariën  -
Beheerder

- Ariën -

23/04/2014 21:53:00
Anchor link
Heb je ook de jQuery zelf ingevoegd?
 
Colin h

Colin h

24/04/2014 10:24:27
Anchor link
Ik heb wel jquery zelf wel included als je dat bedoeld?
 
- Pepijn  -

- Pepijn -

24/04/2014 10:57:13
Anchor link
Aar bedoeld denk ik of je <script src="jQuery URL hier"></script> ingevoegd hebt.
 
Michael -

Michael -

24/04/2014 11:02:26
Anchor link
Jep, zo dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
    $.ajax({
        type: "POST",
        url: "pagina.php",
        data: {userID: userid}
    }).done(function() {
       alert('Done');
    }).fail(function() {
    alert('Fail');
    });
});
</script>
 
Colin h

Colin h

24/04/2014 11:07:13
Anchor link
Bedankt voor de reacties! Ik ga het zo meteen proberen. Ik neem aan dat ik de functie zelf niet aan hoef te roepen? Of gewoon bij document load?
 
Michael -

Michael -

24/04/2014 11:12:48
Anchor link
met functie bedoel je $(function(){ ?
Dit is een beetje verwarrend, maar het is niet een function zoals je gewend bent.
$(function(){ is een afkorting van $( document ).ready(function() {
En alles wat daar binnen staat wordt pas uitgevoerd zodra alles geladen is.
edit: Je hoeft deze dus niet zelf aan te roepen.
Gewijzigd op 24/04/2014 11:13:27 door Michael -
 
Colin h

Colin h

24/04/2014 15:55:45
Anchor link
Ik heb nu de functie in mijn menu.php gezet.
Als ik naar pagina.php ga dan krijg ik de alert "Done" na enkele seconde wel in beeld.

Vervolgens blijkt hij gewoon leeg te zijn als ik hem print.
$userid = $_POST['userId'];

Dit is mijn volledige ajax code:

$(function(){
$.ajax({
type: "POST",
url: "mijn-opstellingen.php",
data: {userId: userid}
}).done(function() {
alert('Done');
}).fail(function() {
alert('Fail');
});
});

Misschien zie ik toch iets over het hoofd?

Edit: het ligt in ieder geval niet aan de javascript var userid, die heb ik al gecontroleerd door hem bijvoorbeeld achter de "Done" alert te printen.
Gewijzigd op 24/04/2014 15:56:38 door Colin h
 
Michael -

Michael -

24/04/2014 16:09:32
Anchor link
Ik ben benieuwd wat je precies probeert. POST is niet een variabele die onthouden blijft, dus zodra ik jouw script uitvoer en ik open daarna de PHP pagina, is er natuurlijk geen POST.
Wanneer je de POST in een SESSION of database gaat opslaan zal het waarschijnlijk wel werken.

Zet deze code eens in 'mijn-opstellingen.php'
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
session_start();

$_SESSION['POST'] = $_POST;

var_dump($_SESSION['POST']);
?>

Voor de javascript nog eens uit, en open dan die pagina.

Toevoeging op 24/04/2014 16:11:48:

Je zou je script nog even kunnen uitbreiden met je geposte data, maar ik denk ook niet dat het daaraan ligt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
    $.ajax({
        type: "POST",
        url: "pagina.php",
        data: {userID: userid}
    }).done(function(data) {
       alert('Done : ' + data);
    }).fail(function(data) {
    alert('Fail : ' + data);
    });
});
</script>
Gewijzigd op 24/04/2014 16:12:26 door Michael -
 
Colin h

Colin h

24/04/2014 20:58:39
Anchor link
Ik heb:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
session_start();

$_SESSION['POST'] = $_POST;

var_dump($_SESSION['POST']);
?>


Nu helemaal boven in mijn-opstellingen.php gezet en aan mijn javascript code in menu.php niks veranderd.
Hij print een lege array lijkt het.
 
Michael -

Michael -

25/04/2014 08:09:41
Anchor link
Het probleem is dat wanneer je de pagina opent dat je de session overschrijft met een lege POST. Sorry :-)
Dit zal wel werken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
/*
 * mijn-opstellingen.php
 */

session_start();

if($_SERVER['REQUEST_METHOD'] == "POST") {
    $_SESSION['POST'] = $_POST;
}

var_dump($_SESSION['POST']);
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="mijn-opstellingen"></div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
    var userid = 355353535;

    $.ajax({
        type: "POST",
        url: "mijn-opstellingen.php",
        data: {userID: userid}
    }).done(function( data ) {
        $("#mijn-opstellingen").load("mijn-opstellingen.php");
    }).fail(function(data) {
        $("#mijn-opstellingen").text("Fout!");
    });
});
</script>


Daarnaast zou je ook nog jQuery.post kunnen gebruiken wat een shorthand is voor ajax.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div id="mijn-opstellingen"></div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
    var userid = 355353535;
    
    $.post( "mijn-opstellingen.php", { userID: userid })
        .done(function( data ) {
            $("#mijn-opstellingen").load("mijn-opstellingen.php");
        }).fail(function(data) {
            $("#mijn-opstellingen").text("Fout!");
        });
});
</script>
Gewijzigd op 25/04/2014 08:15:49 door Michael -
 
Colin h

Colin h

07/05/2014 18:27:55
Anchor link
Hey,

Beetje late reactie, heb geen tijd gehad om er eerder naar te kijken!

Ik heb je code uitgeprobeerd, ik denk dat er misschien ergens met de PHP iets fout gaat.

Het probleem zit niet bij ajax of .post, als ik vanuit daar een alert stuur met userid dan krijg ik op de pagina mijn-opstellingen.php gewoon een alert met de goede id.

Als ik met de php code die jij stuurde (met session) var_dump(...) doe dan krijg ik wél een array met userid.

Als ik daarna dit doe:

if(isset($_POST["userID"])){

....

}

Dan gebeurt er helemaal niks. Als ik een 'if' maak die kijkt of $_POST["userID"] empty is dan geeft hij aan dat deze empty is.

Of als ik een echo doe met $_POST["userID"] dan gebeurt er helemaal niks.

Ik snap er nu helemaal niks meer van, met dat session en var_dump krijg ik wél een waarde, maar als ik vervolgens verder in de pagina kijk of $_POST["userID"] het doet, gebeurt er niks.

Heb ook al gecheckt of $_GET het doet, en heb een echo gedaan met $_SESSION['POST'] maar dan krijg ik alleen "Array" geprint. (dus iets anders dan wat var_dump doet).

Ik snap het niet meer, hopelijk kan iemand me toch helpen :')

In ieder geval wel bedankt voor alle hulp tot nu toe!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/05/2014 19:37:41
Anchor link
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$(function(){
    var userid = 355353535;
    
    $.post( "mijn-opstellingen.php", { userID: userid })
        .
done(function( data ) {
            $("#mijn-opstellingen").load("mijn-opstellingen.php");
        }).
fail(function(data) {
            $("#mijn-opstellingen").text("Fout!");
        });
});

Het gaat om .load, hiermee roep je nogmaals mijn-instellingen.php op maar dan zonder post variabelen.
Maar het is natuurlijk niet nodig omdat dubbelop te doen (load is ook een AJAX request)
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$(function(){
    var userid = 355353535;
    
    $.post( "mijn-opstellingen.php", { userID: userid })
        .
done(function( data ) {
            $("#mijn-opstellingen").html(data);
        }).
fail(function(data) {
            $("#mijn-opstellingen").html("Fout!");
        });
});

Daarnaast gebruik je wel een zeer onveilige methode om via Facebook in te loggen met Javascript.
Javascript is client side en valt dus door kwaadwillende personen te manipuleren.
Gewijzigd op 07/05/2014 19:39:18 door Ger van Steenderen
 
Colin h

Colin h

07/05/2014 20:08:02
Anchor link
Bedankt voor je reactie! Ik krijg nu de userid geprint in #mijn-opstellingen maar ook de volgende error: Fatal error: Call to a member function prepare() on a non-object.

En ik ga de userid gebruiken om een aantal resultaten op te halen uit mijn database, ik sla verder geen persoonlijke gegevens op, dus in principe zou iedereen elkaars "opstellingen" mogen zien als je iemand's userid hebt.

Maar ik zit nu nog steeds met m'n userId die ik niet kan opvragen met $_POST, erg vreemd.

Edit: die data die ik via .post in de #mijn-opstellingen div zet is trouwens een kopie van mijn-opstellingen.php, maar dan met userid, hij zet er dus de hele pagina in.. maar daar (in die div dus) werkt denk ik $_POST wel.

Zou het eraan kunnen liggen dat de jquery .post in de geinclude menu.php staat?
Gewijzigd op 07/05/2014 20:10:00 door Colin h
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/05/2014 20:38:33
Anchor link
Inderdaad,

Wat er nu gebeurd, met de code van Michael, is dat telkens als de pagina wordt geladen een ajax request wordt uitgevoerd (vanwege $(function)).
Maar als je dat oproept nadat via Facebook is ingelogd, zal het misschien anders gaan.

Het heeft er ook mee te maken wat jij wilt wat er gebeurt nadat men is ingelogd.
Moet dan gelijk die div met opstellingen getoond worden?
 
Colin h

Colin h

08/05/2014 09:54:59
Anchor link
Hey,

Ik denk dat ik mijn probleem gevonden heb. Ik krijg mijn userid namelijk pas wanneer facebook de userid heeft doorgegeven (dit gebeurt nadat de pagina geladen is, en dus is de $_POST dan al gedefinieerd.

Ik heb de $.post(..) nu dus buiten het inlog gedeelte gezet, maar dit wordt uitgevoerd voordat de userid bekend is, waardoor de data die hij post dus leeg is.

Ik zal gedeeltes van mijn code als voorbeeld geven:

var userid;
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {



FB.api('/me', function (user) {
if (user) {
userid = ''+user.id;
console.log(user.id);

$(function(){

//hier stond eerst $.post(..)
});


}
$.post( "mijn-opstellingen.php", { userID: userid });
alert(""+userid);

Ik krijg die alert voordat mijn userid vanuit facebook bekend is en die alert heeft de waarde "undefined". Dus $_POST is denk ik dan ook om diezelfde reden leeg. De console.log(..) geeft echter wel de goede userid, omdat die uitgevoerd wordt wanneer de userid bekend is. Als ik mijn $.post(..) op de oude plek terug zet (waar de comment staat). Dan post hij pas een paar seconde nadat de pagina geladen is, waardoor $_POST volgens mij al geset is.

Ik heb het idee dat ik heel dichtbij ben, maar ik heb nog geen idee wat de volgende stap is.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

09/05/2014 17:19:35
Anchor link
De (eerste) A van AJAX staat voor asynchroon. Ook de Facebook api gaat via AJAX (neem ik aan).
Je hebt dus de kans dat $.post wordt aangeroepen voordat de userid vanuit Facebook bekend is.

$(function) en $(document).ready zijn event listeners. Beide doen hetzelfde nl. kijken wanneer de DOM geladen is. Dit is hetzelfde als javascript net voor de afsluitende body tag uit te voeren.

Omdat het asynchroon is kan het dus voorkomen dat het event al getriggered is voordat de call naar de Facebook API een antwoord heeft.

Het beste is om de Facebook API ook in $(document).ready mee te nemen.

Of misschien nog beter om het in PHP al te bepalen.
 
Jos Hoebe

Jos Hoebe

20/10/2022 21:32:25
Anchor link
Eenvoudige oplossing: vanuit Javascript een andere pagina aanroepen en een parameter meegeven.
Hier bijvoorbeeld de breedte van het scherm in pixels.

<html>
<head>
</head>
<body>
<script>
{
window.location.assign("http://www.domein.nl/pagina.php?scherm=" + screen.width)
}
</script>
</body>
</html>

De ontvangende pagina:
<html>
<head>
</head>
<body>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo print_r($_GET);
?>

</body>
</html>
 
- Ariën  -
Beheerder

- Ariën -

20/10/2022 21:52:21
Anchor link
Let voortaan even op de datum van het laatste bericht in het topic, en of het nog zinvol is om het topic omhoog te halen.

Om deze reden sluit ik dit topic
 
 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.