۸ Amir
مشکل create شدن دو رکورد در فایل json
جامعه پی اچ پی ایجاد شده در ۰۹ خرداد ۱۴۰۲

سلام توی چند تا کامنت قبلی بعضی از دوستان اشاره کردند که زمانی که میخواهیم رکورد جدید اضافه کنیم از هر رکورد 2 تا ساخته میشه الان برای من همین اتفاق افتاده برای حل این مشکل باید چه کاری انجام بدیم ؟

سلام امیر عزیز

از کد مربوط به ایجاد رکورد و موارد مربوطه اسکرین قرار بدید.

احمدرضا فاطمی کیا ۰۹ خرداد ۱۴۰۲، ۱۸:۳۳
# JsonBaseModel.php
namespace App\\Models\\Contracts;
class JsonBaseModel extends BaseModel
{
    private $db_folder;
    private $table_filepath;
    public function __construct()
    {
        $this->db_folder = BASE_PATH.'/storage/jsondb/';
        $this->table_filepath = $this->db_folder . $this->table . '.json';
    }
    private function read_table() : array{
        $table_data = json_decode(file_get_contents($this->table_filepath));
        return $table_data;
    }
    private function write_table(array $data){
        $data_json = json_encode($data);
        file_put_contents($this->table_filepath, $data_json);
    }
    public function create(array $new_data):int
    {
        $table_data = $this->read_table();
        $table_data[] = $new_data;
        $this->write_table($table_data);
        return $new_data[$this->primaryKey];
    }
    public function find($id) : object | null
    {
        $table_data = $this->read_table();
        foreach ($table_data as $row){
            if($row->{$this->primaryKey} == $id){
                return $row;
            }
        }
        return null;
    }
    public function getAll():array
    {
        return $this->read_table();
    }
}


# index,php
use App\\Models\\Product;
include "bootstrap/init.php";
$userData = [
    'id' => rand(5,1000),
    'name' => 'sara'
];
$productModel->create($userData);
nice_dump($productModel->getAll());


# products.json
[
   {
      "id":816,
      "name":"sara"
   },
   {
      "id":802,
      "name":"sara"
   }
]   
Amir ۰۹ خرداد ۱۴۰۲، ۱۸:۴۴

امیر عزیز

کد رو از طریق ترمینال هم اجرا کن ببین همچنان این مشکل وجود داره.

چون کد درسته و احتمال میدم مشکل از طرف تابع filegetcontents ایجاد میشه.

دستور زیر رو برای اجرا در ترمینال بزن.

php index.php
احمدرضا فاطمی کیا ۱۰ خرداد ۱۴۰۲، ۱۰:۰۵

درسته الان 1 رکورد اضافه میشه وقتی از ترمینال اجرا میکنم الان باید چیکار کرد برای حل این مشکل ؟


Amir ۱۰ خرداد ۱۴۰۲، ۱۰:۳۸

پس طبق این قضیه متوجه میشیم ریکوئست دیگه ای هم داره ارسال میشه.

ایراد به دلیل درخواست favicon از طرف مرورگر بعد از لود هست.

دوراه دارید:

۱.بررسی کنید و اگر نام تکراری بود اضافش نکنید.

۲.تگ زیر رو در تگ head کد‌های html فایل index قرار بدید:

6482-۲۰۲۳۰۵۳۱_۱۴۴۳۱۶.jpg

احمدرضا فاطمی کیا ۱۰ خرداد ۱۴۰۲، ۱۱:۱۳

انجام دادم ولی مشکل حل نشد فایل پروژه رو میفرستم بررسی کنید

https://imgurl.ir/uploads/e120579_micro.zip
Amir ۱۰ خرداد ۱۴۰۲، ۱۲:۴۰

ظاهرا باید درخواست رو از طریق وب سرور و htaccess بصورت فورس متوقف کنیم.

لطفا یک فایل با نامhtaccess. ایجاد و کد زیر رو درونش قرار بدید:

این کد ابتدا موتور بازنویسی رو فعال و سپس یک قانون برای ارور ۴۰۳ نشون دادن هرآدرسی که favicon.ico ایجاد میکنه.

RewriteEngine On
RewriteRule ^favicon.ico$ - [F,L]
احمدرضا فاطمی کیا ۱۰ خرداد ۱۴۰۲، ۱۲:۴۸

همچنان همین مشکل هست

f899-error-database-two-record-add.png

Amir ۱۰ خرداد ۱۴۰۲، ۱۳:۲۷