PHP در JSON

از موتو کد، دانشنامهٔ برنامه‌نویسی
(تغییرمسیر از JavaScript:JS JSON/Php در json)

یکی از استفاده‌های رایج JSON خواندن اطلاعات از یک وب سرور و نمایش اطلاعات در یک صفحه وب است. [۱]

این فصل به شما نحوه تبادل داده بین یک کاربر و یک سرور PHP را می‌آموزد.

فایل PHP[ویرایش | ویرایش]

PHP دارای تعدادی تابع تعبیه شده یا پیشفرض برای مدیریت JSON است.

اشیاء در PHP می‌توانند با استفاده از تابع json_encode() به JSON تبدیل شوند:

PHP file[ویرایش | ویرایش]

<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$myJSON = json_encode($myObj);

echo $myJSON;
?>


مشاهدهٔ نتیجه


کاربر جاوا اسکریپت[ویرایش | ویرایش]

در اینجا کد جاوا اسکریپتی که کاربر به وسیله آن با استفاده از یک درخواست AJAX، فایل PHP را از مثال بالا درخواست می‌کند وجود دارد:

مثال[ویرایش | ویرایش]

از متد JSON.parse() برای تبدیل نتیجه به یک شیء جاوا اسکریپت استفاده کنید:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var myObj = JSON.parse(this.responseText);
    document.getElementById("demo").innerHTML = myObj.name;
  }
};
xmlhttp.open("GET", "demo_file.php", true);
xmlhttp.send();


مشاهدهٔ نتیجه


آرایه در PHP[ویرایش | ویرایش]

آرایه‌ها در زبان PHP به هنگام استفاده از تابع json_encode() به JSON تبدیل می‌شوند:

PHP file[ویرایش | ویرایش]

<?php
$myArr = array("John", "Mary", "Peter", "Sally");

$myJSON = json_encode($myArr);

echo $myJSON;
?>


مشاهدهٔ نتیجه


جاوا اسکریپت کاربر[ویرایش | ویرایش]

در اینجا کد جاوا اسکریپتی که کاربر به وسیلهٔ آن و به وسیله یک درخواست AJAX یک فایل PHP را از مثال آرایه بالا درخواست می‌کند را مشاهده می‌کنید:

مثال[ویرایش | ویرایش]

از متد JSON.parse() برای تبدیل نتیجه به یک آرایه در جاوا اسکریپت استفاده کنید:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var myObj = JSON.parse(this.responseText);
    document.getElementById("demo").innerHTML = myObj[2];
  }
};
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();


مشاهدهٔ نتیجه


پایگاه داده در PHP[ویرایش | ویرایش]

PHP یک زبان برنامه‌نویسی سمت سرور است و می‌بایست تنها برای اعمالی که می‌بایست توسط سرور صورت بگیرند، مانند دسترسی به پایگاه داده، استفاده شود.

تصور کنید که شما پایگاه داده‌ای روی سرور دارید که شامل مشتری‌ها، محصولات و تولیدکنندگان می‌شود.

شما می‌خواهید درخواستی ایجاد کنید که از سرور شما ۱۰ رکورد اول جدول «مشتریان» را دریافت کند:

مثال[ویرایش | ویرایش]

از متد JSON.stringify() برای تبدیل شیء جاوا اسکریپت به JSON استفاده کنید:

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML = this.responseText;
  }
};
xmlhttp.open("GET", "json_demo_db.php?x=" + dbParam, true);
xmlhttp.send();


مشاهدهٔ نتیجه


توضیح مثال:[ویرایش | ویرایش]

  • یک شیء تعریف می‌کند که شامل یک ویژگی جدول (table) و یک ویژگی محدودیت (limit) است
  • شیء را به یک رشته متنی JSON تبدیل می‌کند
  • درخواست را به همراه رشته متنی JSON به عنوان پارامتر، به فایل PHP روی سرور ارسال می‌کند
  • تا زمانی که درخواست نتیجه را (به صورت JSON) برگرداند، صبر می‌کند
  • نتیجه دریافت شده از فایل PHP را دریافت می‌کند.

بزارید نگاهی به فایل PHP بیندازیم:

PHP file[ویرایش | ویرایش]

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$stmt = $conn->prepare("SELECT name FROM ? LIMIT ?");
$stmt->bind_param("ss", $obj->table, $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);
?>

توضیح مثال PHP:[ویرایش | ویرایش]

درخواست را با استفاده از متد json_decode() به یک شیء تبدیل می‌کند.

به پایگاه داده دسترسی پیدا کرده و یک آرایه را با اطلاعات درخواستی پر می‌کند.

آرایه را به شیء اضافه کرده و شیء را به صورت یک JSON با استفاده از متد json_encode() برمی‌گرداند.

ایجاد حلقه درون نتیجه[ویرایش | ویرایش]

نتیجه دریافت شده از فایل PHP را به یک شیء جاوا اسکریپت، یا در این مثال، به یک آرایه جاوا اسکریپت تبدیل می‌کند:

مثال[ویرایش | ویرایش]

از متد JSON.parse() برای تبدیل JSON به یک شیء JavaScript استفاده کنید:

...
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    myObj = JSON.parse(this.responseText);
    for (x in myObj) {
      txt += myObj[x].name + "<br>";
    }
    document.getElementById("demo").innerHTML = txt;
  }
};
...


مشاهدهٔ نتیجه


متد PHP برابر با POST است[ویرایش | ویرایش]

هنگام ارسال داده به سرور، اغلب بهترین روش استفاده از روش اچ‌تی‌تی‌پی POST است.

برای ارسال یک درخواست AJAX به سرور با استفاده از روش POST می‌بایست متد را مشخص کرده و سپس Header را نیز مشخص کنید.

داده‌ای که می‌بایست به سمت سرور ارسال شود، باید به عنوان یک آرگومان به متد send() پاس داده شود:

مثال[ویرایش | ویرایش]

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    myObj = JSON.parse(this.responseText);
    for (x in myObj) {
      txt += myObj[x].name + "<br>";
    }
    document.getElementById("demo").innerHTML = txt;
  }
};
xmlhttp.open("POST", "json_demo_db_post.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);


مشاهدهٔ نتیجه


تنها تفاوت در فایل PHP روش دریافت داده‌های منتقل شده، است.

PHP file[ویرایش | ویرایش]

از $_POST به جای $_GET استفاده کنید:

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_POST["x"], false);

$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$stmt = $conn->prepare("SELECT name FROM ? LIMIT ?");
$stmt->bind_param("ss", $obj->table, $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);
?>

منابع آموزشی[ویرایش]