آموزش ذخیره اطلاعات در فایل متنی با کدهای PHP

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-05-17 10:42:49

ذخیره اطلاعات توی سایت های کاربرمحور از حیاتی ترین نیازهای یک سایت می تونه باشه! به غیر از سایت هایی که با قالب HTML ساخته شدن، مابقی سایت ها معمولا به دیتابیس نیاز دارند تا اطلاعاتی مثل نام کاربر، اطلاعات وارد شده توسط کاربر و یا بخش های متغیر سایت رو بتونیم داخلش ذخیره کنیم.

ولی بعضی از سایت ها هستند که نیازی به دیتابیس ندارند و یا اطلاعات دم دستی رو میخوان خارج از دیتابیس و در یک فایل متنی داخل فایل منیجر ذخیره کنند. در توابع PHP یک تابع به نام fopen وجود داره که می تونه همین کارو برامون انجام بده! یعنی می تونیم یه سری اطلاعات رو بهش معرفی کنیم و این تابع می تونه داخل یک فایل متنی با فرمت .txt ذخیره کنه و توسط کدهای دیگه ای می تونیم این اطلاعات رو در جای مخصوصی از سایت نمایش بدیم.

برای اینکار ما یک کد HTML فرم نیاز داریم که اطلاعات رو دریافت کنه و توسط متد GET بتونه اطلاعات رو به تابع fopen ما معرفی کنه تا این تابع بتونه کارشو انجام بده.

برای این کار شما باید یک فایل با فرمت php ایجاد کنید و این کد رو داخلش قرار بدید:

<!DOCTYPE html>
<html>
<head>
  <title>ذخیره اطلاعات در فایل متنی</title>
</head>
<body>
  <form method="post">
    اطلاعات را وارد کنید:<br>
    <input type="text" name="textdata"><br>
    <input type="submit" name="submit">
    
  </form>
</body>
</html>
<?php
    if(isset($_POST['textdata']))
    {
    $data=$_POST['textdata'];
    $fp = fopen('data.txt', 'a');
    fwrite($fp, $data);
    fclose($fp);
    }
?>

کد بالا دارای دو قسمت هست. بخش اول کدهای HTML سایت هست که کاربر قراره ببینه و اطلاعاتش رو داخلش وارد کنه. یک فرم ساده با یک فیلد و یک کلید تعریف کردم بالا. فیلد اصلی ما textdata هست و یک کلید که وقتی روش کلیک بشه، تابع fopen اجرا بشه.

بخش بعدی کد قسمت PHP هست که همون تابع اصلی fopen ماست. بر اساس این کد، شما باید در کنار فایلی که برای این صفحه در نظر گرفتید، یک فایل به نام data.txt ایجاد کنید تا این فایل بتونه اطلاعات رو داخلش ذخیره کنه. و در این قسمت بجای textdata باید آی دی فیلدهای داخل فرم رو بهش معرفی کنید. می تونید هرتعداد فیلدکه دارید بهش معرفی کنید.

یاسین سرلک
عضو
عضو شده: 2021-06-24 12:28:25
2021-07-02 07:28:16

سلام

اگه بخوایم دو input ایجاد کنیم باید چه کار کنیم؟

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-07-02 07:30:13

به این صورت:

<!DOCTYPE html>
<html>
<head>
  <title>ذخیره اطلاعات در فایل متنی</title>
</head>
<body>
  <form method="post">
    اطلاعات را وارد کنید:<br>
    <input type="text" name="textdata"><br>
    <input type="text" name="textdata2"><br>
    <input type="submit" name="submit">
    
  </form>
</body>
</html>
<?php
    if(isset($_POST['textdata']))
    {
    $data=$_POST['textdata'];
    $data=$_POST['textdata2'];
    $fp = fopen('data.txt', 'a');
    fwrite($fp, $data);
    fclose($fp);
    }
?>
یاسین سرلک
عضو
عضو شده: 2021-06-24 12:28:25
2021-07-02 08:30:32

این آموزش شما به درد من خورد ممنون 

من این کد شمارو یکم تغییر دادم و تونستم یک فرم تماس با ما بدون دیتابیس درست کنم

اگه بخواین لینکشو میدم

 

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-07-02 08:58:56

تشکر از شما،

در صورت تمایل می تونید یک تاپیک جدید بسازید و لینک دانلود رو داخلش قرار بدید ❤️

یاسین سرلک
عضو
عضو شده: 2021-06-24 12:28:25
2021-07-02 11:09:50

لینک که نه ولی آموززشو گذاشتم

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-07-02 16:48:30

پاسخ به: یاسین سرلک

ممنون از شما ❤️

Minecraftbaz123 Minecraftbaz123
عضو
عضو شده: 2021-08-22 06:44:17
2021-08-22 06:48:33

سلام خروجی نا مرتب چطور کاری کنم خروجی با ارایه یا  json  باشه

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-08-22 07:53:12

پاسخ به: Minecraftbaz123 Minecraftbaz123

سلام؛

شما می تونید با همین دستور فایل json تولید کنید. یه مقدار تغییرات نیاز داره. یه همچین کدی باید استفاده کنید:

<!DOCTYPE html>
<html>
<head>
  <title>ذخیره اطلاعات در فایل متنی</title>
</head>
<body>
  <form method="post">
    اطلاعات را وارد کنید:<br>
    <input type="text" name="textdata"><br>
    <input type="text" name="textdata2"><br>
    <input type="submit" name="submit">
    
  </form>
</body>
</html>
<?php
    if(isset($_POST['textdata']))
    {
    $dataa=$_POST['textdata'];
    $datab=$_POST['textdata2'];
	$posts[] = array('title'=> $dataa, 'url'=> $datab);
    $response['posts'] = $posts;

	$fp = fopen('results.json', 'w');
	fwrite($fp, json_encode($response));
	fclose($fp);
    }
?>
Minecraftbaz123 Minecraftbaz123
عضو
عضو شده: 2021-08-22 06:44:17
2021-08-22 11:27:05

پاسخ به: مسیح دیندار

 من این کد تست کردم اما مشکلی داشت اگر یک بار فیلد پر کنیم درست است کد به صورت json ذخیره میشود اما بار دوم برای تست بک بار دیگر پر کردم کد json اضافه نشد بلکه دفعه قبل فیلد سیو کرده بودم متن سیو شده با متن جدید جایگزین شد! اگر میشود راهنمایی کنید 

با تشکر از شما 

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-08-22 11:53:40

پاسخ به: Minecraftbaz123 Minecraftbaz123

در روش ذخیره اطلاعات در فایل، چون از دیتابیس استفاده نمیشه، نمیشه هر ورودی رو با یک شناسه مخصوص تفکیک کرد. تنها کاری که میشه کرد اینه که نام فایل خروجی رو متغیر کنیم. برای اینکار یه قسمت ثابت به اضافه یه عدد تصادفی می تونه برای هر بار ذخیره فرم، یک فایل با نام متفاوت تولید کنه.

اینکار هم صد در صد بی نقص نیست، چون یک در میلیون احتمالش هست عدد تصادفی که ساخته میشه قبلا یک فایل با همون عدد ذخیره شده باشه که البته اگه رنج عدد تصادفی زیاد باشه، این احتمال خیلی کمتر میشه. 

یه نمونه کد برای ساختن نام تصادفی اینه:

<!DOCTYPE html>
<html>
<head>
  <title>ذخیره اطلاعات در فایل متنی</title>
</head>
<body>
  <form method="post">
    اطلاعات را وارد کنید:<br>
    <input type="text" name="textdata"><br>
    <input type="text" name="textdata2"><br>
    <input type="submit" name="submit">
    
  </form>
</body>
</html>
<?php
    if(isset($_POST['textdata']))
    {
    $dataa=$_POST['textdata'];
    $datab=$_POST['textdata2'];
	$posts[] = array('title'=> $dataa, 'url'=> $datab);
    $response['posts'] = $posts;
	$randomnumber = rand(0,100000000);
	$randomname = "results".$randomnumber.".jason";

	$fp = fopen('$randomname', 'w');
	fwrite($fp, json_encode($response));
	fclose($fp);
    }
?>
Minecraftbaz123 Minecraftbaz123
عضو
عضو شده: 2021-08-22 06:44:17
2021-08-23 09:03:18

پاسخ به: مسیح دیندار

بخشید بنده دیروز کد تست کرده ام اما نام فایل ایجاد شده به نام متغیر $randomname بود اما گفتم خطا خاصی نیست و خودم رفت می کنم اما هرچه تلاش کردم خطا رفع نشد سپس با چند نفر دیگر که بیشتر از من پی اچ پی یاد داشتند نیز گفتم اما. نتوانستند مشکل رفع کنند بنده چندین بار برای رفع خطا تلاش کردم اما ارور داد پس مجبور شدم به خود شما مراجعه کنم با عرض عذر خواهی از اینکه آنقدر وقت شما رو گرفتم!

پ

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-08-23 09:29:13

پاسخ به: Minecraftbaz123 Minecraftbaz123

سلام مجدد؛

این کد رو هم تست کنید:

<!DOCTYPE html>
<html>
<head>
  <title>ذخیره اطلاعات در فایل متنی</title>
</head>
<body>
  <form method="post">
    اطلاعات را وارد کنید:<br>
    <input type="text" name="textdata"><br>
    <input type="text" name="textdata2"><br>
    <input type="submit" name="submit">
    
  </form>
</body>
</html>
<?php
    if(isset($_POST['textdata']))
    {
    $dataa=$_POST['textdata'];
    $datab=$_POST['textdata2'];
	$posts[] = array('title'=> $dataa, 'url'=> $datab);
    $response['posts'] = $posts;
	$randomnumber = rand(0,100000000);
	$randomname = "results".$randomnumber.".jason";

	$fp = fopen($randomname, 'w');
	fwrite($fp, json_encode($response));
	fclose($fp);
    }
?>
Minecraftbaz123 Minecraftbaz123
عضو
عضو شده: 2021-08-22 06:44:17
2021-08-30 07:47:49

پاسخ به: مسیح دیندار

ه میشه یک تغییر داخل کد بدید که متن مقادیر داخل posts ذخیره نشه

برای مثال الان خروجی جسون این:

{"posts":{"title":"supportclwebsitemaker","url":"shdbfhvghvghvchbvfhv@gmail.com"}}

 

می خواهم اینجوری باشه:

{"title":"supportclwebsitemaker","url":"shdbfhvghvghvchbvfhv@gmail.com"}

خیلی متشکرم

 

یاسین سرلک
عضو
عضو شده: 2021-06-24 12:28:25
2021-10-02 20:28:47

سلام.

میخوام یه چیزی رو بدونم. من مثلا میخوام خود کاربر نام فایلو انتخاب کنه و اگه فایلی با اون نام بود ارور بده، نام فایو انتخاب کنه خیلی سادس فقط میخوام بدونم چجوری اروری مثل فایلی با این وجود دارد رو بده ، راه حلی هست؟

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-10-02 20:30:24

پاسخ به: یاسین سرلک

سلام؛

لطفا یه تاپیک جدا بسازید تا بهتر راهنمایی کنم. اینجا اطلاعیه های پاسخ به تاپیک براتون نمیاد.