PDA

View Full Version : سوال: حذف ایمیل از داخل یک فایل متنی و جلوگیری از ثبت ایمیل تکراری داخل فایل متنی



moslem_f
چهارشنبه 26 تیر 1392, 21:53 عصر
سلام عرض ادب و خسته نباشید هر طوری در انجمن سرچ کردم به نتیجه نرسیدم بیشتر در مورد سوالم توضیح میدم و دست یاری دراز می کنم با تشکر.

یک برنامه دارم که کاربر از روی فرم یه ایمیل وارد می کنه و اون ایمیل وارد میشه داخل یه فایل متنی به اسم لیست دات تکست مثلا . حالا می خوام زمانی که کاربر اون ایمیل رو وارد کرد در صورت موجود بودن اون ایمیل داخل فایل متنی به کاربر یه پیغام نمایش داده بشه که کاربر گرامی ایمیل وارد جود در دیتا بیس ما موجود می باشد و نیازی به ثبت مجدد نیست . این یک و دو هم می خوام بدونم چه طوری میشه دوباره یک ایمیل خاص رو از داخل اون فایل متنی حذف کنم که این موارد بر می گرده به کار با فایل ولی نمیدونم چه طوری میشه این کارا رو انجام داد زیاد تو بحث کار با فایل وارد نیستم با تشکر.
ارادتمند : مسلم فلاح نیت

parsboy
چهارشنبه 26 تیر 1392, 22:24 عصر
سلام عرض ادب و خسته نباشید هر طوری در انجمن سرچ کردم به نتیجه نرسیدم بیشتر در مورد سوالم توضیح میدم و دست یاری دراز می کنم با تشکر.

یک برنامه دارم که کاربر از روی فرم یه ایمیل وارد می کنه و اون ایمیل وارد میشه داخل یه فایل متنی به اسم لیست دات تکست مثلا . حالا می خوام زمانی که کاربر اون ایمیل رو وارد کرد در صورت موجود بودن اون ایمیل داخل فایل متنی به کاربر یه پیغام نمایش داده بشه که کاربر گرامی ایمیل وارد جود در دیتا بیس ما موجود می باشد و نیازی به ثبت مجدد نیست . این یک و دو هم می خوام بدونم چه طوری میشه دوباره یک ایمیل خاص رو از داخل اون فایل متنی حذف کنم که این موارد بر می گرده به کار با فایل ولی نمیدونم چه طوری میشه این کارا رو انجام داد زیاد تو بحث کار با فایل وارد نیستم با تشکر.
ارادتمند : مسلم فلاح نیت
باسلام دوست عریزقبل ازاینکه ایمیل روثبت کنی با یک Query ساده میتونی چک کنی ببنی این میل وجودداره یا نه اگر وجودداشت پیام بده مثلا اگر نه که ثبت بشه! اما چراا فایل ها حالا؟!!! وقتی میشه با Mysql به راحتی همین کارو باسرعت بالاترانجام داد!موفق باشید.

moslem_f
چهارشنبه 26 تیر 1392, 22:53 عصر
باسلام دوست عریزقبل ازاینکه ایمیل روثبت کنی با یک Query ساده میتونی چک کنی ببنی این میل وجودداره یا نه اگر وجودداشت پیام بده مثلا اگر نه که ثبت بشه! موفق باشید.

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

Javidhb
چهارشنبه 26 تیر 1392, 22:57 عصر
باید فایل متنی تون توی هر خط یه ایمیل ذخیره کنه...



<?php
$email = trim('emailAddress');
$file = file("emailsFile.txt");
foreach($file as $line) {
$line = trim($line);
if($line == $email) {
echo $email . " - ایمیل تکراریست";
}
}
?>


منبع (http://www.dreamincode.net/forums/topic/260390-check-if-string-exists-as-a-whole-line-in-txt-file/)

moslem_f
چهارشنبه 26 تیر 1392, 23:16 عصر
الان این کد چک میکنه اون ایمیل وجود داره ؟ من به این شکل استفاده کردم به خطا بر خوردم میشه لطف کنید رفع مشکلش کنید با تشکر.


$email = trim($_POST['email']);
$file = file("list.txt", "a");
fwrite($file, "\n" . $email)
foreach($file as $line) {
$line = trim($line);
if($line == $email) {
echo $email . "شما قبل ثبت نام کرديد!";
}
else
echo "از عضويت شما متشکريم!";
}
fclose($file);

Javidhb
پنج شنبه 27 تیر 1392, 00:21 صبح
شاید راه بهتری از این هم باشه، اما ...



<?php
$email = trim($_POST['email']);
$fileName = "list.txt";

function checkEmail($fName, $email)
{
$file = file($fName);
foreach($file as $line) {
$line = trim($line);
if($line == $email) {
echo $email . " - ایمیل تکراریست";
return false;
}
}
return true;
}

if(checkEmail($fileName, $email) === true)
{
$file_write = fopen($fileName, 'a');
fwrite($file_write, "\n" . $email);
echo "از عضويت شما متشکريم!";
fclose($file_write);
}
?>

Unique
پنج شنبه 27 تیر 1392, 00:31 صبح
شرمنده من مستقیم جواب شما را نمیدم ! اما واقعا جالبه چرا وقتی سامانه هایی مثل پایگاه های داده به صورت RDBMS مثل mysql و فایلی مثل sqlite , xml وجود داره یک نفر بخواد از ذخیره توی فایل های ساده و دستورات ابتدایی استفاده کنه و بشینه خودش روتین های چک کردن وجود یک فیلد و پیدا کردن و حذف را بکشه ؟ هیچ برنام هنویس عاقلی نمیاد بدون دلیل این کار را انجام بده ! میشه بپرسم چرا شما همچین تقاضایی دارین وقتی خیلی راحت میشه از سامانه های ذکر شده استفاده کرد و درخواست های شما را توی چند خط پیاده کرد ؟ شما حساب این را کردین اگه تعداد ایمیل ها بالا بره سرعت اجرای فرآیند شما پایین میاد ؟

اما اگه جواب آکادمیک میخوای بهترین راه اینه از طریق تابع ()file بیای محتویات اون فایل را بریزی توی یک آرایه و بعدش index مربوط به ایمیلی که باید حذف بشه یا دوبله نباشه را پیدا کنی ! عملیات را انجام بدی روی آرایه و دوباره آرایه را روی همون فایل ذخیره کنی ! اما باز هم میگم که این کار عاقلانه نیست و در basic ترین حالت میشه با xml و استفاده از xpath و کلاس های مرتبط توی php راحت این کار را کرد یا از sqlite استفاده کرد و از sql بهره برد !

moslem_f
پنج شنبه 27 تیر 1392, 01:30 صبح
فقط می تونم بگم :ناراحت: همین انشا الله اون روزم میاد ! که ما ...

Javidhb
پنج شنبه 27 تیر 1392, 01:55 صبح
ایشاالله.. :چشمک: ... ولی سعی کن اولویت بندی کنی مطالبی رو میخوای یاد بگیری... بنظرم مبحث فایلها رو فقط تئوری یاد بگیر که شــــــــاید یه روزی اگه لازم شد ازشون استفاده کنی.

مثلا JSON، همین کاری که با فایل کردی رو با JSON انجام بده.
بعد از اینکه مسلط شدی میبینی که هم کدهات کمتر شده و هم سرعت برنامه ات بیشتر ... تازه میتونی راحت به همون ایمیل، username هم اضافه کنی و ...

moslem_f
پنج شنبه 27 تیر 1392, 15:25 عصر
ایشاالله.. :چشمک: ... ولی سعی کن اولویت بندی کنی مطالبی رو میخوای یاد بگیری... بنظرم مبحث فایلها رو فقط تئوری یاد بگیر که شــــــــاید یه روزی اگه لازم شد ازشون استفاده کنی.

مثلا JSON، همین کاری که با فایل کردی رو با JSON انجام بده.
بعد از اینکه مسلط شدی میبینی که هم کدهات کمتر شده و هم سرعت برنامه ات بیشتر ... تازه میتونی راحت به همون ایمیل، username هم اضافه کنی و ...


برای حذف کردن اون ایمیل از داخل فایل متنی باید چه طوری کد رو نوشت اگر امکانش هست بگید ممنون میشم با تشکر.

Javidhb
پنج شنبه 27 تیر 1392, 18:09 عصر
بفرمایید:



<?php
$email = trim($_POST['email']);
$fileName = "list.txt";

if(checkEmail($fileName, $email) === true)
{
$file_write = fopen($fileName, 'a');
fwrite($file_write, "\n" . $email);
echo "از عضويت شما متشکريم!";
fclose($file_write);
}

function checkEmail($fName, $email)
{
$file = file($fName);
foreach($file as $k => $line) { //گرفتن ایندکس آرایه
$line = trim($line);
if($line == $email) {
echo $email . " - ایمیل تکراریست";
unset($file[$k]); // پاک کردن از آرایه

file_put_contents($fName, trim(implode($file))); //درست کردن دوباره فایل

return false;
}
}
return true;
}
?>