-
المساهمات
121 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة Hamada Ahmed
-
-
السلام عليكم ورحمة الله وبركاتة
نفترض ان لدينا مثلا جدول في قاعدة البيانات مخزن بة مجموعة من المواد الدراسية لعدد من الافراد كيف يمكن حساب مجموع قيمة معينة في كل الجدول مثلا نريد حساب مجموع Arabic في كل الجدول
-
بتاريخ On ٦/١٢/٢٠٢١ at 21:00 قال رفيق مشعيل الوادعي:
اشكرك على مجهودك لكن لا اريد حساب تكرار ايبي الزائر فمثلا united state تلاحظ عدد الزوار 122 ستلاحظ انها ايبيهات مكررة نريد فقط حساب الايبيهات بدون تكرار بجوارها اسم الدولة
-
بتاريخ 10 ساعات قال شرف الدين2:
برجاء عمل export لقاعدة البيانات ومن ثم إرفاقها في تعليق حتى أتمكن من معاينتها
CREATE TABLE `totalview` (
`user_ip` text NOT NULL,
`user_country` text NOT NULL,
`end_time` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `totalview` (`user_ip`, `user_country`, `end_time`) VALUES
('41.69.217.254', 'Egypt', '2021-12-06'),
('41.69.217.254', 'Egypt', '2021-12-06'),
('41.69.217.254', 'Egypt', '2021-12-06'),
('51.222.253.9', 'Canada', '2021-12-06'),
('66.249.74.94', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.73.131', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.74.94', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('41.69.217.254', 'Egypt', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.94', 'United States', '2021-12-06'),
('66.249.74.94', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.94', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.73.131', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.131', 'United States', '2021-12-06'),
('66.249.73.131', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.131', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.128', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('196.150.153.158', 'Egypt', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.73.131', 'United States', '2021-12-06'),
('196.150.37.189', 'Egypt', '2021-12-06'),
('196.150.37.189', 'Egypt', '2021-12-06'),
('196.150.37.189', 'Egypt', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('66.249.73.159', 'United States', '2021-12-06'),
('66.249.74.92', 'United States', '2021-12-06'),
('66.249.74.90', 'United States', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('104.219.248.96', 'United States', '2021-12-06'),
('104.219.248.96', 'United States', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'),
('102.184.7.10', 'Egypt', '2021-12-06'); -
بتاريخ منذ ساعة مضت قال Adnane Kadri:
يمكنك الاستفادة من هاته الإجابات على سؤال سابق لك
قمت بعمل ذلك
اريد فقط عمل عداد للزوار الخاصين ببلد معين بدون تكرار زائر دخل الموقع اكثر من مرة
اما الخطوات السابقة من تخزين الايبي واسم الدولة فهي تخزن بالفعل والكود بالاعلى يظهرالعدد الاجمالي واسماء الدول
سوف اضع لك صورة من الموقع للتوضيح
بها 23 زائر من دول مختلفة اريد تقسيم ال23 زائر لتظهر بجوار اسم الدولة
فكيف يمكن توزيع هذا العدد على الدول
- 1
-
اذا كان لدينا جدول في قاعدة البيانات يخزن ايبي الزائر واسم البلد ( في نهاية اليوم يتم حذف محتوى الجدول ) يتم فلترة الايبيهات المكررة والبلدان لتظهر بصيغتها النهائية عدد الزوار في هذا اليوم والبلدان الخاصة بالزوار كما في الكود التالي
<?php $status_query = "SELECT DISTINCT user_ip FROM totalview "; $result_query = mysqli_query($db, $status_query); $count = mysqli_num_rows($result_query); echo ' زوار اليوم : '.$count.' زائر '; ?> <?php echo ' بلدان الزوار :<br />'; $stmt = $db->prepare("SELECT DISTINCT user_country FROM totalview"); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['user_country'] , '<br />' ; } $stmt->close(); ?>
كيف يمكن اظهار عدد الزائرين من البلد بجوار اسم البلد فمثلا زار الموقع في هذا اليوم 100 زائر من خمس دول مثلا اريد ان تكون النتائج بدون تكرار الايبي للزائر الواحد كالتالي
الجزائر 40 زائر
مصر 30 زائر
السعودية 20 زائر
تونس 10 زائر
- 1
-
الكود التالي يستخدم في تعدد الصفحات لكنه يظهر نتائج الموضوعات من الاقدم للأحدث كيف يمكن تعديلة ليعرض النتائج من الأحدث للأقدم
<?php if (isset($_GET['page_memper_news'])) { $page_memper_news = $_GET['page_memper_news']; } else { $page_memper_news = 1; } $no_of_records_per_page = 21; $offset = ($page_memper_news-1) * $no_of_records_per_page; $total_pages_sql = "SELECT COUNT(*) FROM news"; $result = mysqli_query($db,$total_pages_sql); $total_rows = mysqli_fetch_array($result)[0]; $total_pages = ceil($total_rows / $no_of_records_per_page); $admin_type = "memper" ; $sql = "SELECT n.*, a.* FROM `news` as n inner join accounts as a WHERE a.id = n.writer_id AND a.admin_type ='".$admin_type."' LIMIT $offset, $no_of_records_per_page"; $res_data = mysqli_query($db,$sql); while($row = mysqli_fetch_array($res_data)) { echo ''.$row['news_date'].''; } mysqli_close($db); ?> <ul class="pagination"> <li><a href="?page_memper_news=1">بداية</a></li> <li class="<?php if($page_memper_news <= 1){ echo 'disabled'; } ?>"> <a href="<?php if($page_memper_news <= 1){ echo '#'; } else { echo "?page_memper_news=".($page_memper_news - 1); } ?>">سابق</a> </li> <li class="<?php if($page_memper_news >= $total_pages){ echo 'disabled'; } ?>"> <a href="<?php if($page_memper_news >= $total_pages){ echo '#'; } else { echo "?page_memper_news=".($page_memper_news + 1); } ?>">تالي</a> </li> <li><a href="?page_memper_news=<?php echo $total_pages; ?>">نهاية</a></li> </ul> <?php
- 1
-
بتاريخ On 11/20/2021 at 17:38 قال Adnane Kadri:
يمكنك الإستعانة بالواجهات البرمجية التي تقوم بتحليل عنوان IP وإستنتاج دولة الزائر المرافقة لهذا الـIP.
واحدة من الواجهات السهل التعامل معها هي واجهة ip-api، أين يمكنك إرسال طلبية HTTP من النوع GET مرفقة بعنوان IP الزائر لجلب كامل المعلومات الخاصة بهذا العنوان. يتم إرسال الطلبيات إلى نقطة الوصول التالية:
http://ip-api.com/json/{ip-address}
مثال عن الردود التي تقدمها الواجهة:
{ status: "success", country: "Algeria", countryCode: "DZ", region: "25", regionName: "Constantine", city: "Constantine", zip: "25010", lat: 36.368, lon: 6.6172, timezone: "Africa/Algiers", isp: "new", org: "", as: "AS36947 Telecom Algeria", query: "244.244.244.244" }
سيمكنك بعد ذلك قراءة أي خاصية من هذا الرد. مثل خاصية country أو countryCode لتوظيفها في خدمة غرضك.
خطوات لتوظيف الفكرة في مثالك:
- لنقل أن الدالة getUsersCountries تقوم بجلب الدول التي يأتي منها زوارك.
- تقوم هاته الدالة بإستعلام قراءة من قواعد البيانات لقراءة جميع عناوين الـ IP الخاصة بزوارك.
- تقوم الدالة بإرسال طلبيات GET إلى نقطة الوصول المذكورة سابقا لإستنتاج الدول التي يأتي منها زوارك (يمكنك إستعمال الدالة file_get_contents).
- يتم تخزين هاته الدول في مصفوفة.
- يتم فلترة عناصر هاته المصفوفة وجلب العناصر الغير مكررة (يمكنك إستعمال الدالة array_unique).
=> النتيجة: مصفوفة تحمل كامل بلدان الزوار.
تعديل :
لتجنب حظرك عن طريق هاته الواجهة، لا يفضل إرسال العديد من الطلبيات مرة واحدة مثل المنطق الذي ستقوم الدالة المرفقة كمثال بإتباعه، عوضا عن ذلك قم بتخزين اسم الدولة مباشرة بدل عنوان IP أو بجانبه في إستعلام INSERT الذي تقوم به في جدول totalview.
قمت باضافة للكود لكن بها زيادات اريد الاستغناء عنها
<?php include ('connect_file.php'); function ip_info($ip = NULL, $purpose = "location", $deep_detect = true) { $output = NULL; if (filter_var($ip, FILTER_VALIDATE_IP) === false) { $ip = $_SERVER["REMOTE_ADDR"]; if ($deep_detect) { if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_CLIENT_IP']; } } $purpose = str_replace(array( "name", "\n", "\t", " ", "-", "_" ) , NULL, strtolower(trim($purpose))); $support = array( "country", "countrycode", "state", "region", "city", "location", "address" ); $continents = array( "AF" => "Africa", "AN" => "Antarctica", "AS" => "Asia", "EU" => "Europe", "OC" => "Australia (Oceania)", "NA" => "North America", "SA" => "South America" ); if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) { $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip)); if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) { switch ($purpose) { case "location": $output = array( "city" => @$ipdat->geoplugin_city, "state" => @$ipdat->geoplugin_regionName, "country" => @$ipdat->geoplugin_countryName, "country_code" => @$ipdat->geoplugin_countryCode, "continent" => @$continents[strtoupper($ipdat->geoplugin_continentCode) ], "continent_code" => @$ipdat->geoplugin_continentCode ); break; case "address": $address = array( $ipdat->geoplugin_countryName ); if (@strlen($ipdat->geoplugin_regionName) >= 1) $address[] = $ipdat->geoplugin_regionName; if (@strlen($ipdat->geoplugin_city) >= 1) $address[] = $ipdat->geoplugin_city; $output = implode(", ", array_reverse($address)); break; case "city": $output = @$ipdat->geoplugin_city; break; case "state": $output = @$ipdat->geoplugin_regionName; break; case "region": $output = @$ipdat->geoplugin_regionName; break; case "country": $output = @$ipdat->geoplugin_countryName; break; case "countrycode": $output = @$ipdat->geoplugin_countryCode; break; } } } return $output; } ?> <?PHP // التأكد من ان عنوان ip حقيقى function getUserIP() { if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if (filter_var($client, FILTER_VALIDATE_IP)) { $ip = $client; } elseif (filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } return $ip; } $user_ip = getUserIP(); ?> <?php $ip_info = ip_info("Visitor", "Country"); $end_time = date("Y-m-d", strtotime("+1 day")); $stmt3 = $db->prepare("INSERT INTO totalview VALUES ('$user_ip','$ip_info','$end_time')"); $stmt3->execute(); $stmt3->close(); ?> <?php // حذف زوار الأمس بعد نهاية اليوم $date = date("Y-m-d"); $stmt11 = $db->prepare("DELETE from totalview WHERE end_time = ? "); $stmt11->bind_param('s', $date); $stmt11->execute(); $stmt11->close(); ?> <?php $status_query = "SELECT DISTINCT user_ip FROM totalview "; $result_query = mysqli_query($db, $status_query); $count = mysqli_num_rows($result_query); echo ' زوار اليوم : ' . $count . ' زائر '; ?> <br /> <?php $stmt = $db->prepare("SELECT DISTINCT user_country FROM totalview"); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['user_country'], '-'; } $stmt->close(); ?>
- 1
-
الكود التالي يظهر عدد الزوار ليوم واحد
يتم تخزين ip الزائر في القاعدة
كيف يمكن اظهار اسم دولة الزائر - فمثلا لو قام زائرين من مصر بزيارة الموقع عشر مرات في اليوم لا يتم تكرار اسم الدولة غير مرة واحدة كذلك لو قام مجموعة زائرين من تونس بالدخول للموقع عدة مرات لا يتم تكرار اسم الدولة الا مرة واحدة مثلا كالتالي؛
بلدان الزوار ( مصر - الجزائر - السعودية .......الخ )
<?PHP // التأكد من ان عنوان ip حقيقى function getUserIP() { if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) { $ip = $client; } elseif(filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } return $ip; } $user_ip = getUserIP(); ?> <?php $end_time = date("Y-m-d", strtotime("+1 day")); $stmt3 = $db->prepare("INSERT INTO totalview VALUES ('$user_ip','$end_time')"); $stmt3->execute(); $stmt3->close(); ?> <?php // حذف زوار الأمس بعد نهاية اليوم $date= date("Y-m-d"); $stmt11= $db->prepare("DELETE from totalview WHERE end_time = ? "); $stmt11->bind_param('s', $date ); $stmt11->execute(); $stmt11->close(); ?> <?php $status_query = "SELECT DISTINCT user_ip FROM totalview "; $result_query = mysqli_query($db, $status_query); $count = mysqli_num_rows($result_query); echo ' زوار اليوم : '.$count.' زائر '; ?>
- 1
-
بتاريخ 2 ساعات قال Adnane Kadri:
ليكن في العلم أن محتوى الخاصية content يقبل نصا فقط , في حين أنك تقوم بتقديم محتوى HTML إليه . لاحظ :
<meta name="description" content="<p style="text-align:center;""
و بسبب علامتي التنصيص المفتوحتين في :
content="<p style="text-align:center;">" ^ ^
فإن المتصفح يقوم بقراءة ما يقدم له كمحتوى HTML عادي , و بطبيعة الحال فإن هذا سيؤدي إلى ظهوره في الصفحة كـ HTML عادي .
يحتمل أنك تقوم بإستعمال محرر نصوص لتحرير نص الوصف عن طريق لوحة التحكم , تأكد أنك لا تقوم بذلك , و أن الحقل news_content محتوى نصي فقط و لا يحوي أية وسوم أو عناصر HTML . يمكنك كحل لهاته المشكلة إلغاء تفعيل محرر النصوص الذي تستعمله على مدخل هذا الحقل في مكان ما بلوحة التحكم أين تقوم بتحديث نص الوصف .يحتمل أيضا أنك تقوم بإستهداف حقل غير الذي تقوم بتخزين المحتوى النصي فيه .
تأكد من كل من السابق و أخبرني ما إن استمرت مشكلتك بالظهور .
قمت باضافة حقل للوصف بالجدول- قبل الارسال يتم اقتصاص جزء من المحتوى وتحويله الى نص ويتم تخزينة بهذه الصورة
$description = strip_tags(substr(''.$_REQUEST['news_content'].'', 0, 1000));
ويكون كود الوصف كالتالي
<meta name="description" content="<?=''.$row['description'].'' ?>">
هل برأيك الطريقة جيد ام لا - قمت بتجربتها ونجحت بالفعل لكن احتاج الى رأيك
- 1
-
بتاريخ 3 ساعات قال Adnane Kadri:
عموما , لا توجد أي مشكلة بالشيفرة التي لديك .
يحتمل أن يكون الإختلاف الذي يظهر بين ما هو الخادم المحلي و ما هو على المستضيف هو أحد التالي :
-
عدم إحتواء قواعد البيانات الخاصة بك على أي صفوف مدرجة بجدول topics بالمعرف المدرج في رابط الصفحة كـ :
?topics=23
يعني هذا إعادة الإستعلام الذي لديك لمصفوفة فارغة . و بالتالي عدم إمكانية قراءة الخواص news_content و title من ناتج الإستعلام . يؤدي هذا بدوره إلى نتيجة مشابهة للتالي :<meta name="keywords" content=" " /> <meta name="description" content=" ">
-
الإحتمال الاخر هو في عدم إحتواء رابط الصفحة على معامل بالإسم topics أساسا , فبدل أن تقوم بتصفح رابط الصفحة عن طريق :
https://domain.dm/path/to/my_page.php?topics=22
أنت تقوم بالتصفح إليه كالتالي :
https://domain.dm/path/to/my_page.php
يعني هذا تجاوز الشرط :
<?php if( isset($_GET['topics']) ) : ?>
و كل ما يقتضيه , و المرور مباشرة إلى شطر العبارة الشرطية الاخر :
<?php else : ?> <title> موقع ....... </title> <?php endif; ?>
مما يؤدي إلى عدم ظهور الوصف و الكلمات المفتاحية .
لتجاوز هاته المشكلة , يقترح تصدير قواعد البيانات التي لديك على الخادم المحلي و إستيرادها في خادمك المستضيف .
يقترح جانبا التأكد من أن الإتصال بقواعد البيانات يتم بشكل عادي , و من أن الجدول الذي تحاول القراءة من عليه يحوي بشكل عادي صفوفا يمكن القراءة منها .
ربما لم تفهم قصدي بشكل دقيق فانا اقصد ان description يظهر في المتصفح من المفترض ان يكون مختفي ولا يظهر للزوار والصور توضح لك ذلك
هذه الصورة للموقع بالوسم keywords فقط
<meta name="keywords" content="<?=$keywords ?>" />
والصورة التالية بالوسمين معا description , keywords
__________
<meta name="keywords" content="<?=$keywords ?>" />
<meta name="description" content="<?= $description = substr(''.$row['news_content'].'', 0, 1000); ?>">ومصدر الصفحة بعد اضافة الوسمين كالتالي
أي ان المشكلة ليست فى وسم الكلمات المفتاحية انما المشكلة في وسم الوصف _ لاحظ انني اقتطع جزء من محتوى الموضوع لكي يظهر فى الوصف لكنة يظهر اعلى هيدر الصفحة والطبيعي الا يظهر كذلك مثل الكلمات المفتاحية التي لم تظهر اثناء التصفح
- 1
-
عدم إحتواء قواعد البيانات الخاصة بك على أي صفوف مدرجة بجدول topics بالمعرف المدرج في رابط الصفحة كـ :
-
السلام عليكم ورحمة الله وبركاته ,
في الكود التالي وسوم meta للكلمات المفتاحية والوصف ,
أواجه مشكلة ظهور هذا الوصف في أعلى الصفحة في الخادم المحلي على المتصفح ,
و ليكن في العلم , أن نفس المشكلة لا تظهر في ذات الصفحة بذات المتصفح على الإستضافة .
ما إحتمالية المشكلة ؟ و ماذا يقترح كحل لها ؟
<head> <?php include('connect_file.php');?> <?php if( isset($_GET['topics']) ) : ?> <?php $gettopics= intval($_GET['topics']); $stmt = $db->prepare('SELECT * FROM news where id = ?'); $stmt->bind_param('i', $gettopics ); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="icon" type="image/ico" href="images/favicon.ico"/> <title> موقع ...... | <?= $row['title'] ?> </title> <?php function myFilter($var) { return mb_strlen($var, 'UTF-8') > 2; } $keywords = explode(' ', $row['title']); $keywords = array_filter($keywords,"myFilter"); $keywords = array_unique($keywords); $keywords = implode(' ,', $keywords); ?> <meta name="keywords" content="<?=$keywords ?>" /> <meta name="description" content="<?= $description = substr(''.$row['news_content'].'', 0, 1000); ?>"> <?php else : ?> <title> موقع ....... </title> <?php endif; ?> <style type="text/css"> <!-- --> </style> </head>
- 1
-
السلام عليكم ورحمة الله وبركاته
منذ فترة طرحت سؤال وهو أن الموقع يعمل بشكل سليم على السيرفر المحلي وعند تجربته على استضافة مجانية حدثت مشكلة وهي ان بعض البيانات لا يتم ارسالها لبعض الجداول في القاعدة - احد الاخوة الافاضل هنا قال هذه المشاكل لا تحدث في الاستضافة المدفوعة فقمت بشراء استضافة لكن حدثت مشكلة اكبر مما حدث في الاستضافة المجانية كما في الصور التالية
----
لا يظهر الا سوى جزء من الموقع وحتى الراوبط لا تعمل ايضا
لا اعرف اين المشكلة
-
السلام عليكم ورحمة الله وبركاته
اريد ان اشتري استضافة مدفوعة من الانترنت لكن لا امتلك بطاقة -انا اعيش في مصر ما هي افضل بطاقة للشراء وكيف يمكن استخراجها وهل تحتاج إلى مبالغ مالية كبيرة للاستخراج وكيف يتم شحنها بالمال وهل يمكن ربطها بالباي بال وهل هناك بطاقة للشراء من جميع المواقع
كل هذه الأسئلة احتاج لمعرفتها وشكرا لكم
- 1
-
بتاريخ 6 دقائق مضت قال بلال زيادة:
المشكلة هذه خاصة بالاستضافات المجانية , فأغلبها تحدث بها هذه المشكلة , الأفضل اللجوء إلى استضافة مدفوعة.
هل هذه المشكلة لا تحدث في الاستضافة المدفوعة.
- 1
-
السلام عليكم ورحمة الله وبركاته اخواني الأعزاء
عند تجربة اسكربت الموقع على السيرفر المحلي يتم ارسال البيانات الى القاعدة وتخزينها بدون أي مشاكل
لكن عند تجربة استضافات مجانية لا يتم تخزين البيانات في جداول معينة وهناك جداول اخرى يتم تخزين البيانات فيها في الوقت نفسه عند تجربة استضافات مجانية اخرى يتغير الحال فبعض الجداول التي كانت لا تستقبل البيانات هنا تستقبلها والاخرى التى كانت تخزن لا تخزن هنا
جربت الكثير منها والمشكلة مازالت رغم انها تعمل بشكل جيد على السيرفر المحلي
ما المشكلة في ذلك هل متعلقة ببرمجة الاكواد المسئولة عن الارسال ام انها متعلقة بالقاعدة نفسها وهل الاستضافات المدفوعة تظهر بها مثل هذه المشاكل
- 1
-
بتاريخ 24 دقائق مضت قال Hassan Hedr:
يمكن عند تعريف الربط بين جدول التعليقات وجدول الموضوعات تحديد معاملة التعليقات المرتبطة بموضوع تم حذفه عن طريق تحديد ON DELETE بالقيمة CASCADE
CREATE TABLE comment ( ... FOREIGN KEY (news_id) REFERENCES news (id) ON DELETE CASCADE );
بعدها عند حذف موضوع من جدول news سيتم حذف كل التعليقات المتعلقة من جدول comment به تلقائيا
قمت بعمل ذلك لكن لم تنجح
CREATE TABLE comments ( `id` INT( 9 ) NOT NULL AUTO_INCREMENT , `comment_text` Text NOT NULL , `subject_id` INT( 9 ) NOT NULL , `commentor_id` varchar(50) NOT NULL, `comment_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `comment_status` int(1) NOT NULL, PRIMARY KEY ( `id` ), FOREIGN KEY (subject_id) REFERENCES news (id) ON DELETE CASCADE ) ENGINE = MYISAM
- 1
-
السلام عليكم ورحمة الله وبركاته
اذا كان هناك جدول للموضوعات باسم news به حقل id تتسلسل من خلاله المواضيع
وهناك جدول اخر للتعليقات باسم comment به حقل news_id
رقم الموضوع id هو نفسه news_id في التعليقات
ماذا يمكن فعله لحذف كل التعليقات المتعلقة بموضوع معين عندما يتم حذف الموضوع نفسة من القاعدة اي ان id ليس له وجود في الجدول
- 1
-
السلام عليكم
أحد الأخوة الأفاضل بموقعكم الجميل قدم لي هذا الكود الذي يحذف الصور من مجلد التجميل التي ليس لها اسم مخزن في القاعدة بصيغة jpg
لكم اريد اضافة امتدادات اخرى للكود مثل png , gif الخ كيف يكون ذلك
<?php // حذف صور البروفايل القديمة ولا فائدة منها $sql = 'SELECT image_profile_path from accounts'; $result = mysqli_query($db,$sql); $db_imgs = []; while($row = mysqli_fetch_array($result)) { $db_imgs[] = $row['image_profile_path']; } $db_imgs = preg_filter('/^/','uploads/profile/',$db_imgs); $targetDirectory = "uploads/profile/"; $stored_imgs =glob($targetDirectory."*.jpg"); $targetImages = array_merge(array_diff($db_imgs,$stored_imgs),array_diff($stored_imgs,$db_imgs)); $targetImages = array_filter($targetImages); foreach($targetImages as $image) { unlink($image); } ?>
- 1
-
بتاريخ 52 دقائق مضت قال Adnane Kadri:
لاحظ عدم تماثل مخروجي المصفوفتين . فإما هذا :
أو العكس :
- أن يكون مخروج مصفوفة المخزن تحوي اسم المجلد .
فنتائج المصفوفة الأولى ممثلة للصور المخزنة stored_imgs لا تماثل نتائج المصفوفة الثانية db_imgs.
و لحل المشكلة سنقوم بإضافة السابقة uploads/profile/ إلى كل عناصر مصفوفة عناوين الصور في قواعد البيانات . يمكن ذلك عن طريق الوظيفة preg_filter كالتالي :
$prefixedArray = preg_filter('/^/', 'prefix', $targetArray);
كما أننا سنحتاج فلترة نتائج كل من المصفوفتين للتخلص من وجود العناصر الفارغة لتجنب التحذيرات و الأخطاء التي تظهر , يمكن ذلك عن طريق الوظيفة array_filter كالتالي :
$filteredArray = array_filter($nonFilteredArray);
لتصبح الشيفرة كاملة :
// تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $res = mysql_query('SELECT img_profile_path from users'); $db_imgs = []; while($row = mysql_fetch_array($res)) { $db_imgs[] = $row['img_profile_path']; } // إضافة سابقة $db_imgs = preg_filter('/^/', 'uploads/profile/', $db_imgs); // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_merge(array_diff($db_imgs, $stored_imgs), array_diff($stored_imgs, $db_imgs)); // فلترة العناصر الفارغة $targetImages = array_filter($targetImages); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); }
يفترض أن يقوم هذا بحل المشكل .
يمكنك دوما تتبع مخروج المصفوفتين عن طريق طباعة كل منهما كل مرة .
توثيق الوظيفتين :
شكرا اخي الفاضل تمت بنجاح لكن تظهر رسالة خطأ ربما الامر بسيط
- 1
-
بتاريخ 14 ساعات قال Adnane Kadri:
هلا قمت بتنفيذ الشيفرة التالية و إرفاق النتيجة ؟
// تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $res = mysql_query('SELECT img_profile_path from users'); $db_imgs = []; while($row = mysql_fetch_array($res)) { $db_imgs[] = $row['img_profile_path']; } // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_diff($stored_imgs, $db_imgs); echo '<pre>'; print_r($targetImages); echo '</pre>'; echo '<br><br><br><pre>'; print_r($db_imgs); echo '</pre>'; die(); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); }
سيمكن بهذا تتبع مخروج كل من المصفوفتين قبل تطبيق أية عمليات عليها .
لا يتم حذف اي من الصور من مجلد التخزين والنتيجة كالتالي
- 1
-
بتاريخ 5 ساعات قال Adnane Kadri:
يعني هذا عدم تماثل بعض النتائج من قاعدة البيانات و الملفات , يحتمل أنك تقوم بتخزين اسم المجلد في قواعد البيانات أيضا .
هلا تأكدت من أن الصور تظهر كالتالي في قاعدة البيانات :
img1.jpg img2.jpg
و ليس كـ :
images/profile/img1.jpg images/profile/img2.jpg
الصور يتم تخزينها الاسم
والامتدادا كما بالصورة
- 1
-
بتاريخ 14 ساعات قال Adnane Kadri:
تقوم الشيفرة الموصوفة بحذف كل من :
- الصور المخزن مساراتها في قواعد البيانات و التي لا تتوفر على مسار فعلي في نظام الملفات.
- الصور المتوفرة في نظام الملفات و ليس لها توفر في قواعد البيانات .
يمكنك استثناء الإحتمال الأول بالتخلص تماما من فكرة مزج مصفوفتي :
- ناتج فرق المصفوفة الاولى و الثانية .
- ناتج فرق المصفوفة الثانية و الأولى .
وذلك عن طريق السطر المعني ليصبح كالتالي :
$targetImages = array_diff($stored_imgs, $db_imgs);
قمت بذلك لكن يتم حذف الصورة من المجلد uploads/profile بالرغم من ان الصورة لها مسار مخزن في القاعدة - المفترض ان يحذف فقط الصور التي ليس لها مسار مخزن في القاعدة ويترك باقي الصور
من فضلك الق نظرة اخرى على الكود ربما به خطأ وهو كالتالي
<?php // حذف الصور القديمة للمستخدم ولا فائدة منها // تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $sql = 'SELECT image_profile_path from accounts'; $result = mysqli_query($db,$sql); $db_imgs = []; while($row = mysqli_fetch_array($result)) { $db_imgs[] = $row['image_profile_path']; } // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $targetDirectory = "uploads/profile/"; $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_diff($stored_imgs,$db_imgs); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); } ?>
- 1
-
تظهر مشكلة كالتالي ويتم حذف الصورة المخزن اسمها في القاعدة ايضا
<?php // حذف الصور القديمة للمستخدم ولا فائدة منها // تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $sql = 'SELECT image_profile_path from accounts'; $result = mysqli_query($db,$sql); $db_imgs = []; while($row = mysqli_fetch_array($result)) { $db_imgs[] = $row['image_profile_path']; } // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $targetDirectory = "uploads/profile/"; $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_merge(array_diff($db_imgs, $stored_imgs), array_diff($stored_imgs, $db_imgs)); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); } ?>
- 1
-
السلام عليكم ورحمة الله وبركاته
يقوم الاعضاء بتعديل صورهم الشخصية بالموقع بشكل مستمر مما يجعل الصور القديمة بلا فائدة وتشغل مساحة كبيرة
في جدول الأعضاء يتم تخزين اسم وامتداد اخر صورة بهذا الشكل مثلا ( 234562.jpg ) هل هناك حل لحذف الصور التي ليس لها امتداد في الجدول ليتم حذفها من مجلد الصور
جربت استخدام كود كالتالي لكن يتم حذف جميع الصور
<?php // جدول الأعضاء $stmt = $db->prepare('SELECT * FROM accounts'); $stmt->execute(); $result = $stmt->get_result(); $r_accounts = $result->fetch_assoc(); $stmt->close(); //$r_accounts['image_profile_path'] امتداد الصورة ?> <?php $picture = glob('uploads/profile/*.jpg'); $picture = glob('uploads/profile/*.png'); $picture = glob('uploads/profile/*.......'); if (......)// لا اعرف ما هو الشرط { foreach($picture as $file) { if(is_file($file)) // تكرار { unlink($file); // delete file } } } ?>
ما اريدة فقط هو حذف الصور التي ليس لها اسم مخزن في القاعدة
- 2
مشكلة في ارسال البيانات لقاعدة البيانات
في أسئلة البرمجة
نشر
السلام عليكم
لدي كودين لجدولين عند ارسال بيانات للقاعدة من الاول تخزن بنجاح لكن عند ارسال بيانات من الثاني لا تخزن في الثاني بل تخزن في الاول في صورة undefined
الجدول الاول saturday_one_primary_schedule
CREATE TABLE `saturday_one_primary_schedule` ( `ador_schedule` varchar(50) NOT NULL, `teacher` varchar(50) NOT NULL, `subject` varchar(50) NOT NULL, `aclass` varchar(50) NOT NULL, `together` varchar(50) NOT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8;
الجدول الثانيsaturday_two_primary_schedule
CREATE TABLE `saturday_two_primary_schedule` ( `ador_schedule` varchar(50) NOT NULL, `teacher` varchar(50) NOT NULL, `subject` varchar(50) NOT NULL, `aclass` varchar(50) NOT NULL, `together` varchar(50) NOT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8;
الكود الاول
الكود الثاني
كود الارسال الاول
كود الارسال الثاني