لدى قاعده مسجل بها اعضاء و كل عضو مسجل معه اى بى
لدى قائمه بمدى ارقام الاى بى المصريه و لكنها كبيره
لذلك سيحتاج شخص محنك لادخاله فى كود استعلام
اريد كود استعلامى يظهر المصريين عن طريق الاى بى و يظهرهم بالاسماء
لدى قاعده مسجل بها اعضاء و كل عضو مسجل معه اى بى
لدى قائمه بمدى ارقام الاى بى المصريه و لكنها كبيره
لذلك سيحتاج شخص محنك لادخاله فى كود استعلام
اريد كود استعلامى يظهر المصريين عن طريق الاى بى و يظهرهم بالاسماء
مجرد محاولة
لا اعتقد ان الكود سيعمل و لكني مثلك سأنتظر الخبراء ليأتوا بالطريقة الصحيحةكود PHP:
<?php
$seldb= mysql_connect($host,$username,$password);
$con= mysql_select_db($dbname,$seldb);
$getip = mysql_query(SELECT ip,username FROM users WHERE $username=username AND $ip=ip);
echo "<table>";
while ($row = mysql_fetch_assoc($getip)){
echo "
<tr>
<td>".$row['username']."</td>
</tr>
<tr>
<td>".$row['ip']."</td>
</tr>";
}
echo "</table>";
mysql_free_result($getip);
?>
كما أن الكود ينقصه اختيار الأي بي الخاص بمصر فقط
و ان شاء الله ألاخوة يفيدوك
التعديل الأخير تم بواسطة اسلام مصطفي ; 30-10-2010 الساعة 08:18 PM
__________________
Twitter : eMostafa91
نعم يمكن ذلك بكل بساطة
لنفرض انك لديك عضو مصري لديه هذا الاي بي 41.186.232.28
وكل اعضاء مصر مثلا يبدأون ب 41.186 او 41 فقط
ستستخدم like
ولا تنسى وضع علامة % في اول الرقم حتى يكون شرط التشابه من المقطع الاول من الاي بيكود PHP:
SELECT * from users WHERE ip_address like '%41.186'
__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
انا عامل نفس الكود تقريبا و مشكلتى هى ازاى ادخل الايبيهات المصريه فى الكود علما ان الرينج بتاعها حوالى 250 رينج
اخى الفاضل يوجد اكثر من 250 رينج للايبيهات المصريه فلن ينفع هذا الكود
من امثله الرينج المصري
41.64.0.0 - 41.65.255.255
41.67.64.0 - 41.67.127.255
62.241.128.0 - 62.241.159.255
64.34.248.112 - 64.34.248.127
209.236.119.134 - 209.236.119.141
212.12.224.0 - 212.12.255.255
كل دى ايبيهات مصريه
اذا ليس هناك حل الا عمل كود برمجي لوب على كل الايبيهات بعدد الrange اللي معك كما تقول 250
اي ستقوم بعمل حلقة تكرار 250 مرة على array تحمل ال 250 رينج بالدالة foreach
وقم بعمل حقل اضافي في قاعدة البيانات وليكن country_flag واذا كان العضو مصري ضع به رقم 1 واذا لم يكن مصري ضع الرقم 0
وعند الاستعلام استعلم على اساس هذا الحقل
__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
في البداية يجب علينا وضع طريقة للمقارنة بين الابيهات وبعدها نعمل الاستعلام
لهذا الغرض نستعمل دوال ip2long , long2ip
وذلك لتحويل الايبي لقيمة رقمية قابلة للمقارنة بسهولة
يعني عندك المجال التالي:
41.32.0.0 - 41.47.255.255
نشغل عليه الدالة ip2long
http://php.net/manual/en/function.ip2long.php
يصبح
689963008 - 691011583
طبعًا نخزن بداية المدى ونهايته كل واحد في حقل في قاعدة البيانات
عندما نخزن كل ال ranges التي لدينا لمصر
فإن اي ايبي مصري سوف يكون بين هذه الارقام اذا ما حولناه ل long
بعد ان قمنا بتخزين المجالات بصورة صحيحة
الان نعمل الاستعلام
الفكرة اننا نفحص ايبيهات المشتركين
ونعمل select للمشتركين الذين ايبيهاتهم من داخل المجالات التي في الجدول فقط(بالتالي من مصر فقط)
هذا هو الاستعلام:
وهو يشترح نفسهكود PHP:
SELECT name FROM users JOIN ip_ranges ON ip BETWEEN range_from AND range_to
على كل حال الكود الذي كتبته بالمرفقات
ويحوي:
-ملف تكست لتخزين ال ranges لتحليلها وادخالها الى قاعدة البيانات بطريقة مرتبة
عن طريق الدالة insert_ranges
- ملف قاعدة البيانات جاهز
-ملف الفحص وفيه الاكواد
انتبه ان ايبي العضو يجب ان يتم حفظه كرقم bigint وليس varchar
رغم اني لم احب هذه الطريقة
الافضل انه عندما يسجل المستخدم تاخذ الايبي تبعه وتجد دولته، بعد ان تجد دولته تخزن اسمها في الحقل. وهكذا يمكن ان تعرف دولة المستخدم بسهولة
التعديل الأخير تم بواسطة ahmad sadiq ; 12-05-2011 الساعة 02:17 AM