🔥 با کمک هوش مصنوعی در کمتر از 6 ماه فول‌استک شوید ...
۰ ثانیه
۰ دقیقه
۰ ساعت
۸ اورنگ فرج
مشکل 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"
   }
]   
اورنگ فرج ۰۹ خرداد ۱۴۰۲، ۱۸:۴۴

امیر عزیز

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

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

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

php index.php
آقای افرنگ بخاری ۱۰ خرداد ۱۴۰۲، ۱۰:۰۵

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


اورنگ فرج ۱۰ خرداد ۱۴۰۲، ۱۰:۳۸

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

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

دوراه دارید:

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

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

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

آقای افرنگ بخاری ۱۰ خرداد ۱۴۰۲، ۱۱:۱۳

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

https://imgurl.ir/uploads/e120579_micro.zip
اورنگ فرج ۱۰ خرداد ۱۴۰۲، ۱۲:۴۰

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

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

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

RewriteEngine On
RewriteRule ^favicon.ico$ - [F,L]
آقای افرنگ بخاری ۱۰ خرداد ۱۴۰۲، ۱۲:۴۸

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

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

اورنگ فرج ۱۰ خرداد ۱۴۰۲، ۱۳:۲۷