منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : هل هذا الكود جيد لتعديل نص في ملف نصي
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم
هل هذا الكود جيد ام ان هناك افضل
انا الي كاتبه ومليش خبرة في php
<?php
كود :
$deml = $_GET['e'];
$neml = $_GET['n'];
$logfile= 'Text_Emails_Users.txt';
$data = file_get_contents($logfile);
$newdata = str_replace($deml, $neml, $data);
file_put_contents($logfile, $newdata);
?>
السلام عليكم
الان اعتقد انك تريد من الكود
ان ترسل نص من برنامجك
الصفحة تستقبل النص وتضيفة الى النص السابق صح او لا
مثلا انهو سجل اخطاء او ما شابه
وضح لي المقصد حتى نعمل شي جميل
واعتذر عن تاخري في الرد لاني اعود من العمل واغلب الاحيان تكون الكهرباء مقطوعة عند عودتي
اعتذر عن التأخير في الرد ايضا
وضعت ملف به ايملات المستخدمين للتحقق من وجود البريد قبل ذلك قبل عملية التسجيل في البرنامج
وهذا ملف في حالة التعديل علي بريد ما اريد كما قلت حدرتك ارسال البريد الجديد والقديم الي الملف فيقوم بأستبداله من الملف
وجزاك الله خيرا
اوكي اخي با اعمل كود بدتا بيس mysql
وكود بفايل
كان نفسي فعلا اتعامل مع قواعد البينات mysql بس للاسف مالي اي خبرة في ذلك
مؤقتا قمت بعمل كل بيناتي داخل ملفات
سلام عليكم اولا هذا ب file

اولا الجزاء الخاص ب c#

اولا نظيف هذه المكتبات

كود :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Web;
using System.Net.NetworkInformation;

ثم دالة الارسال

كود :
public static int  hold = 5;
       public static bool  hold_net_work = false;
        internal  string getHTTP(string szURL, string szPost)
        {
            bool ok = false;
            int error = 0;
            fe:
          
                try
                {
                    HttpWebRequest httprequest;
                    HttpWebResponse httpresponse;
                    StreamReader bodyreader;
                    string bodytext = "";
                    Stream responsestream;
                    Stream requestStream;
                    httprequest = (HttpWebRequest)WebRequest.Create(szURL);
                    httprequest.Method = "POST";
                    httprequest.ContentType =
                    "application/x-www-form-urlencoded";
                    httprequest.ContentLength = szPost.Length;
                    requestStream = httprequest.GetRequestStream();
                    requestStream.Write(Encoding.ASCII.GetBytes(szPost), 0,
                    szPost.Length);
                    requestStream.Close();
                    httpresponse = (HttpWebResponse)httprequest.GetResponse();
                    responsestream = httpresponse.GetResponseStream();
                    bodyreader = new StreamReader(responsestream);
                    bodytext = bodyreader.ReadToEnd();
                    ok = true;
                    return bodytext;
                }
                catch
                {
              
                    goto fe;
                }
          
            return "post_error";
        }

الان الدالة التي سنستدعي بها الدالة السابقة ايضا في c#

كود :
public void my_reg(string old_email,string new_email)
        {
            string result = getHTTP(@"http://mysite.com/s.php", "old_email=" + old_email + "&new_email=" + new_email);
            switch (result)
            {
                case "post_error":
                    // خطاء في الشبكة
                    break;
                case "email_change_ok":
                    // تم تغيير البريد بنجاح
                    break;
                case "old_not_found":
                   // البريد السابق غير موجود
                    break;
                case "server_not_respous":
                    // المخدم لا يستجيب او ان الملف غير قابل للقراءة والكتابة
                    break;
                case "input_is_not_email":
                    // المدخلات ليست بريد الكتروني صحيح
                    break;
                case "input_empty":
                    // المدخلات فارغة
                    break;
                default:
                    // خطاء غير معروف
                    break;
            }
        }


الان صفحة php
كود :
<?php
$filename='/path/to/foo.txt';
$filenamelog='/path/to/log.txt';
$email_array=null;$counter_of_email=0;
if((!empty($_POST['new_email'])) &&(!empty($_POST['old_email'])) )
{
      if((filter_var($_POST['new_email'], FILTER_VALIDATE_EMAIL))&&(filter_var($_POST['old_email'], FILTER_VALIDATE_EMAIL))) {
          
          $email=  mysql_real_escape_string($_POST['new_email']);
        
          $old=mysql_real_escape_string($_POST['old_email']);;
      
if ((file_exists($filename))&& (is_writable ($filename )) && (is_readable ($filename )))           {
            $file = fopen($filename, "r+");
                     while(!feof($file)) {
  $email_array[$counter_of_email] =fgets($file);
  $counter_of_email++;
}
fclose($file);
if(in_array( $old, $email_array))
{
    $key = array_search($old, $email_array);
    $key--;
    $email_array[$key]=$email;
    file_put_contents($filename, "");
     $file = fopen($filename, 'w');
    foreach ($email_array as $value) {
      
fwrite($file, $value.'\n');
    }
    fclose($file);
    $da=  date("Y-m-d H:i:s");
    $fp = fopen($filenamelog, 'w');
fwrite($fp, "email is change from $old to $email at $da  \n");
fclose($fp);
echo 'email_change_ok';
}
else {
  echo 'old_not_found';
}          
}
else {
     echo 'server_not_respous';
}
          
      }
else {
      echo 'input_is_not_email';    
      }
}
else
{
    echo 'input_empty';
}
?>
طبعا ملفين ملف سجلات التعديل
وملف الي فيه الايميل طبعا هذا على السريع والكهرباء قاتله لنا
$filename='/path/to/foo.txt';
$filenamelog='/path/to/log.txt';
(11-04-14, 03:31 AM)ali.alfoly كتب : [ -> ]السلام عليكم
هل هذا الكود جيد ام ان هناك افضل
انا الي كاتبه ومليش خبرة في php
كود :
<?php
$deml = $_GET['e'];
$neml = $_GET['n'];
$logfile= 'Text_Emails_Users.txt';
$data = file_get_contents($logfile);
$newdata = str_replace($deml, $neml, $data);
file_put_contents($logfile, $newdata);
?>

(24-04-14, 01:04 PM)ali.alfoly كتب : [ -> ]كان نفسي فعلا اتعامل مع قواعد البينات mysql بس للاسف مالي اي خبرة في ذلك
مؤقتا قمت بعمل كل بيناتي داخل ملفات

لغة PHP سهلة جداً فهي مشابهة إلى حد ما لـ JAVA وC
ولغة MySql مشابهة إلى حد كبير لـ SQLServer

ال GET_$ يقرأ المعطيات التي أرسلت بأسلوب GET (أي ظاهرة في العنوان HTTP)، في حين يستخدم POST_$ لقراءة المعطيات مع الأسلوب POST.
ال ( file_get_contents ) هي دالة تقرأ محتوى من ملف.
ال ( file_put_contents ) هي دالة تكتب محتوى في ملف.
ال ( str_replace ) هي دالة تستبدل نص بآخر في محتوى نصي.

أعلم أنكم تعرفون كل هذا.

هناك مشكلة ستحصل في الكود السابق:
المشكلة في حالة أنك تريد تغيير الإيميل abc@mail.com ويوجد إيميل يزيد في البداية أو النهاية بأي أحرف
هنا سيتم تغيير أيضا الأجزاء المطابقة في الإيميلات التالية
xxabc@mail.com
abc@mail.com.eg
xxabc@mail.com.eg

إذا... لابد من وجود رموز تميز بداية ونهاية الإيميل بشكل صحيح مثل ; أو : أو أقواس وما شابه مما لا يمكن وجودة في الإيميل وذلك في داخل الملف

هنا مثال لحل هذه المشكلة في الكود السابق في حال استخدام الأقواس { } لتحديد الإيميل في داخل الملف
كود :
$newdata = str_replace( "{".$deml."}" , "{".$neml."}" , $data );
إقتباس : ولغة MySql مشابهة إلى حد كبير لـ SQLServer

معذرة اخي MySql و SQLServer ليست لغات ولكنها انظمة قواعد بيانات ولكن لنقول ان لغة الاستعلام sql ansi موحدة لجميع الانظمة تقريبا مع اختلاف ميزات هنا وهناك
جزاكم الله خيرا اخواني واسف علي التأخير في الرد كنت اذاكر الموضوع Heart

جزاك الله خيرا اخي vbnet فعلا تنويه مهم وتم التعديل . ومعلومات قيمة جدا جدا جزاك الله خيرا

اخي الحبيب oneyemenweb2 جزاك الله خيرا ونفع بك وجعله في موازين حسناتك

بالنسبة لسجل التغير انا لا اريد عمل سجل تغير
واريد فهم بعض الامور وهي
1 - عند كتابة مسار الملف النصي في المصفح يتم عرض عنوانين البريد المخزنة به تفاديت هذه المشكلة بتشفير النص قبل رفعه
بحيث النص قبل التشفير
كود :
{ali.alfoly1@gmail.com}
{ali.alfoly2@gmail.com}
{ali.alfoly3@gmail.com}
عند تشفير النص يوجد به بعض الاحرف التي تتعارض مع طبيعة لغة البرمجة PHP مثل الرمز # فقمت بتحويل النص المشفر الي Asc
بحيث اصبح بعد التعديل الي
كود :
{80 73 82 54 103 72 122 78 113 120 78 54 69 81 114 77 56 85 97 }
{80 73 82 54 103 72 122 78 113 72 122 78 113 120 78 54 69 81 114 77 56 85 97 }
{80 73 82 54 103 120 78 54 69 81 114 77 56 85 97 }

للعلم هناك ملف خاص بعنواين البريد وملف خاص باسماء المستخدمين كل هذا من اجل ضمان عدم تكرار احدهم

2 - الكود الخاص بالارسال

كود :
Public Function Edet_Text_Email(old_email As String, new_email As String) As String
        Dim result As String = getHTTP("http://www.sh-ml.net/Edet_Text_Email.php", "old_email=" & old_email & "&new_email=" & new_email)
        Select Case result
            Case "post_error"
                Return "خطاء في الشبكة"
            Case "email_change_ok"
                Return "تم تغيير البريد بنجاح"
            Case "old_not_found"
                Return "البريد السابق غير موجود"
            Case "server_not_respous"
                Return "المخدم لا يستجيب او ان الملف غير قابل للقراءة والكتابة"
            Case "input_is_not_email"
                Return "المدخلات ليست بريد الكتروني صحيح"
            Case "input_empty"
                Return "المدخلات فارغة"
        End Select
        Return "خطاء غير معروف"
    End Function

    Friend Function getHTTP(szURL As String, szPost As String) As String
fe:
        Try
            Dim httprequest As HttpWebRequest
            Dim httpresponse As HttpWebResponse
            Dim bodyreader As StreamReader
            Dim bodytext As String = ""
            Dim responsestream As Stream
            Dim requestStream As Stream
            httprequest = DirectCast(WebRequest.Create(szURL), HttpWebRequest)
            httprequest.Method = "POST"
            httprequest.ContentType = "application/x-www-form-urlencoded"
            httprequest.ContentLength = szPost.Length
            requestStream = httprequest.GetRequestStream()
            requestStream.Write(Encoding.ASCII.GetBytes(szPost), 0, szPost.Length)
            requestStream.Close()
            httpresponse = DirectCast(httprequest.GetResponse(), HttpWebResponse)
            responsestream = httpresponse.GetResponseStream()
            bodyreader = New StreamReader(responsestream)
            bodytext = bodyreader.ReadToEnd()
            Return bodytext
        Catch
            GoTo fe
        End Try
        Return "post_error"
    End Function

انا كنت استخدم الكود
كود :
Try '- تعديل الاسم في ملف ااسماء
                Dim request As WebRequest
                request = WebRequest.Create(
                                "http://www.sh-ml.net/Edet_Text_Names.php?e=" & Me.Name_selct & "&n=" & New_Det_User.nem)
                request.GetResponse()
        Catch ex As Exception
            Me.Text_Err = "خطاء في حفظ الاسم في ملف الاسماء : اعد المحاولة"
            Return
        End Try

فكان ذلك اسهل بكثير فرجاء توضيح فائدة الكود السابق حتي اعرف الفرق

3 - كود ملف الـ PHP قمت بتعديله بحيث ازلة شرط التحقق من البريد لاني كما وضحت لحدرتك سيصبح نص ASC وليس بريد
واريد من حدرتك تعديله بحيث لا يقوم بتسجيل سجل تغيرات فقط يقوم بالتعديل وجزاك الله خيرا
كود :
<?php
$filename='/path/to/foo.txt';
$filenamelog='/path/to/log.txt';
$email_array=null;$counter_of_email=0;
if((filter_var($_POST['new_email'], FILTER_VALIDATE_EMAIL))&&(filter_var($_POST['old_email'], FILTER_VALIDATE_EMAIL))) {
          
          $email=  mysql_real_escape_string($_POST['new_email']);
        
          $old=mysql_real_escape_string($_POST['old_email']);;
      
if ((file_exists($filename))&& (is_writable ($filename )) && (is_readable ($filename )))           {
            $file = fopen($filename, "r+");
                     while(!feof($file)) {
  $email_array[$counter_of_email] =fgets($file);
  $counter_of_email++;
}
fclose($file);
if(in_array( $old, $email_array))
{
    $key = array_search($old, $email_array);
    $key--;
    $email_array[$key]=$email;
    file_put_contents($filename, "");
     $file = fopen($filename, 'w');
    foreach ($email_array as $value) {
      
fwrite($file, $value.'\n');
    }
    fclose($file);
    $da=  date("Y-m-d H:i:s");
    $fp = fopen($filenamelog, 'w');
fwrite($fp, "email is change from $old to $email at $da  \n");
fclose($fp);
echo 'email_change_ok';
}
else {
  echo 'old_not_found';
}          
}
else {
     echo 'server_not_respous';
}
          
      }
?>
الصفحات : 1 2