سؤال

أحتاج إلى تعيين متغير php $ _session باستخدام jQuery. إذا انقر المستخدم على صورة ، فأنا أريد حفظ جزء من المعلومات المرتبطة بتلك الصورة كمتغير جلسة في PHP.

أعتقد أنه يمكنني القيام بذلك عن طريق استدعاء صفحة PHP أو وظيفة وإلحاق هذه المعلومات بسلسلة الاستعلام.

أيه أفكار. لقد وجدت القليل من المساعدة من خلال Google.

شكرا مايك

هل كانت مفيدة؟

المحلول

لا يمكنك فعل ذلك من خلال jQuery وحدها ؛ ستحتاج إلى مجموعة من Ajax (والتي يمكنك القيام بها مع jQuery) ونهاية PHP الخلفية. قد تبدو نسخة بسيطة للغاية مثل هذا:

لغة البرمجة:

<img class="foo" src="img.jpg" />
<img class="foo" src="img2.jpg" />
<img class="foo" src="img3.jpg" />

JavaScript:

$("img.foo").onclick(function()
{
    // Get the src of the image
    var src = $(this).attr("src");

    // Send Ajax request to backend.php, with src set as "img" in the POST data
    $.post("/backend.php", {"img": src});
});

PHP (backend.php):

<?php
    // do any authentication first, then add POST variable to session
    $_SESSION['imgsrc'] = $_POST['img'];
?>

نصائح أخرى

قد ترغب في محاولة وضع وظيفة PHP على صفحة PHP أخرى ، واستخدام مكالمة AJAX لتعيين المتغير.

ما الذي تبحث عنه jQuery Ajax. ثم فقط قم بإعداد صفحة PHP لمعالجة الطلب.

الكثير من الردود هنا تتناول كيف ولكن ليس السبب. يتم تخزين أزواج مفتاح/القيمة php $ _session على الخادم. هذا يختلف عن ملف تعريف الارتباط ، الذي يتم تخزينه على المتصفح. هذا هو السبب في أنك قادر على الوصول إلى القيم في ملف تعريف الارتباط من كل من PHP و JavaScript. ومما زاد الطين بلة ، لا تتضمن طلبات Ajax من المتصفح أيًا من ملفات تعريف الارتباط التي حددتها للموقع. لذلك ، سيتعين عليك جعل JavaScript سحب ملف تعريف الارتباط معرف الجلسة وتضمينه في كل طلب Ajax للخادم ليتمكن من صنع رؤوس أو ذيول منه. على الجانب المشرق ، تم تصميم جلسات PHP للفشل في الحصول على HTTP GET أو POST المتغير إذا لم يتم إرسال ملفات تعريف الارتباط مع رؤوس HTTP. سأبحث في بعض مبادئ تطبيقات الويب المريحة واستخدام أنماط التصميم الشائعة مع هذه الأنواع من التطبيقات بدلاً من محاولة الانتقال مع معالج الجلسة.

في (backend.php) تأكد من تضمينه

session_start () ؛

تايلورhttp://www.hawkessolutions.com

لقد صممت أيضًا حلًا "Setter PHP Session Setter" بنفسي (على غرار حل Luke Dennis. لا توجد صفقة كبيرة هنا) ، ولكن بعد تحديد قيمة جلستي ، كانت احتياجاتي "القفز على ملف .php آخر". حسنًا ، لقد فعلت ذلك ، داخل رمز jQuery الخاص بي ... لكن هناك شيئًا لم ينجح تمامًا ...

كانت مشكلتي سهلة:

-بعد أن "$ .post" القيم الخاصة بك على ملف .php الصغير ، يجب أن تنتظر بعض قيمة الإرجاع "النجاح/الفشل" ، وفقط بعد قراءة قيمة النجاح هذه ، قم بإجراء القفزة. إذا قفزت فورًا على ملف Big. php التالي ، فقد تكون قيمة الجلسة الخاصة بك قد لم يتم تعيينها على محرك وقت تشغيل Sessions PHP ، ومن المحتمل أن تقرأ "فارغة" عند القيام $ _session ["my_var"] ؛ من ملف. php.

في حالتي ، لتصحيح هذا الموقف ، غيرت رمز $ $ .post بهذه الطريقة:

$.post('set_session_value.php', { key: 'keyname', value: 'myvalue'}, function(ret){
    if(ret==0){
        window.alert("success!");
        location.replace("next_page.php");
    }
    else{
        window.alert("error!");
    }
});

بالطبع ، يجب إرجاع ملف "set_session_value.php" الخاص بك ، "صدى" 0 "؛ "أو" الصدى "1" ؛ '(أو أي قيم النجاح التي قد تحتاجها).

تحيات.

على غرار إجابة لوك ، ولكن مع الحصول.

ضع هذا الرمز PHP في صفحة PHP ، على سبيل المثال. getPage.php:

<?php
$_SESSION['size'] = $_GET['size'];
?>

ثم نسميها مع نص jQuery مثل هذا:

$.get( "/getpage.php?size=1");

أتفق مع فيديريكو. في بعض الحالات ، قد تواجه مشكلات في استخدام Post ، على الرغم من أنك غير متأكد مما إذا كان يمكن أن يكون متصفحًا.

إنه يعمل على Firefox ، إذا قمت بتغيير OnClick () للنقر () في جزء JavaScript.

$("img.foo").click(function()
{
    // Get the src of the image
    var src = $(this).attr("src");

    // Send Ajax request to backend.php, with src set as "img" in the POST data
    $.post("/backend.php", {"img": src});
});

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top