اذهب إلى المحتوى

Hamada Ahmed

الأعضاء
  • المساهمات

    121
  • تاريخ الانضمام

  • تاريخ آخر زيارة

أجوبة بواسطة Hamada Ahmed

  1. السلام عليكم

    لدي كودين لجدولين عند ارسال بيانات للقاعدة من الاول تخزن بنجاح لكن عند ارسال بيانات من الثاني لا تخزن في الثاني بل تخزن في الاول في صورة  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;

    الكود الاول

    <script>
    jQuery.noConflict();
    (function($) {
    //.........
    $(document).ready(function(){
    $("#submit").click(function(){
    var subject = $("#subject").val();
    var aclass = $("#aclass").val();
    var together = $("#together").val();
    
    var dataString = 'subject='+ subject + '&aclass='+ aclass + '&together='+ together ;
    if(aclass=='<?php while($row=$result->fetch_assoc()):?><?=$row['aclass']?><?php endwhile;?>')
    {
    alert("لا يمكن ادخال فصلبن متشابهين في نفس الحصة");
    }
    else
    {
    $.ajax({
    type: "POST",
    url: "schedule_primary/send/send_saturday_one.php?send_saturday_one=<?=$_GET['teacher_schedule'] ?>",
    data: dataString,
    cache: false,
    success: function(result){
    $('#saturday_one_form')[0].remove();
    }
    });
    }
    return false;
    });
    });
    //.........
    })(jQuery);
    </script>
    <form  id="saturday_one_form" >
    <select  class="select_all" id="subject">
    <?php include('schedule_primary/subject_option.php');?>
    </select>
    <br />
    <select class="select_all" id="aclass">
    <?php include('schedule_primary/class_option.php');?>
    </select>
    <br />
    <input  class="input_submit_all" id="submit" type="button"  value="حفظ">
    </form>

    الكود الثاني

    <script>
    jQuery.noConflict();
    (function($) {
    //.........
    $(document).ready(function(){
    $("#submit").click(function(){
    var subject = $("#subject").val();
    var aclass = $("#aclass").val();
    var together = $("#together").val();
    
    var dataString = 'subject='+ subject + '&aclass='+ aclass + '&together='+ together ;
    if(aclass=='<?php while($row=$result->fetch_assoc()):?><?=$row['aclass']?><?php endwhile;?>')
    {
    alert("لا يمكن ادخال فصلبن متشابهين في نفس الحصة");
    }
    else
    {
    $.ajax({
    type: "POST",
    url: "schedule_primary/send/send_saturday_tow.php?send_saturday_two=<?=$_GET['teacher_schedule'] ?>",
    data: dataString,
    cache: false,
    success: function(result){
    $('#saturday_two_form')[0].remove();
    }
    });
    }
    return false;
    });
    });
    //.........
    })(jQuery);
    </script>
    <form  id="saturday_two_form" >
    <select  class="select_all" id="subject">
    <?php include('schedule_primary/subject_option.php');?>
    </select>
    <br />
    <select class="select_all" id="aclass">
    <?php include('schedule_primary/class_option.php');?>
    </select>
    <br />
    <input  class="input_submit_all" id="submit" type="button"  value="حفظ">
    </form>

    كود الارسال الاول

    <?php
    include('../../connect_file.php');
    $ador_schedule = $_SESSION['id'];
    $get_teacher = intval($_GET['send_saturday_one']);
    $subject=$_REQUEST['subject'];
    $aclass=$_REQUEST['aclass'];
    $together= "$subject$aclass" ;
    
    $stmt = $db->prepare("insert into saturday_one_primary_schedule (ador_schedule,teacher,subject,aclass,together)VALUES 
    (?,?,?,?,?)" );
    $stmt->bind_param('sssss' ,$ador_schedule,$get_teacher,$subject,$aclass,$together);
    $stmt->execute();   
    $stmt->close();
    $db->close();  
    ?>

    كود الارسال الثاني

    <?php
    include('../../connect_file.php');
    $ador_schedule = $_SESSION['id'];
    $get_teacher = intval($_GET['send_saturday_two']);
    $subject=$_REQUEST['subject'];
    $aclass=$_REQUEST['aclass'];
    $together= "$subject$aclass" ;
    
    $stmt = $db->prepare("insert into saturday_two_primary_schedule (ador_schedule,teacher,subject,aclass,together)VALUES 
    (?,?,?,?,?)" );
    $stmt->bind_param('sssss' ,$ador_schedule,$get_teacher,$subject,$aclass,$together);
    $stmt->execute();   
    $stmt->close();
    $db->close();  
    ?>

     

  2. السلام عليكم ورحمة الله وبركاتة

    نفترض ان لدينا مثلا جدول في قاعدة البيانات مخزن بة مجموعة من المواد الدراسية لعدد من الافراد كيف يمكن حساب مجموع قيمة معينة في كل الجدول مثلا نريد حساب مجموع   Arabic في كل الجدول

    p_2584r53r11.png

     

  3. بتاريخ On ٦‏/١٢‏/٢٠٢١ at 21:00 قال رفيق مشعيل الوادعي:

    شوف الصورة التالية قمت بعمل استعلام لبياناتك في SQL:

     

    EEEEEEEEEEEEEEEEEEEE.jpg

    اما بالنسبة لا ستعمال قواعد البيانات في PHP فليس لدي خبره كافيه فيها 

    ولكن شوف الصورة التاليه التقطتها من كتاب تعليمي لـ PHP :

     

    Screenshot_٢٠٢١١٢٠٦_٢٣٢٠٣٦.jpg

    اشكرك على مجهودك لكن لا اريد حساب تكرار ايبي الزائر فمثلا united state تلاحظ عدد الزوار 122 ستلاحظ انها ايبيهات مكررة نريد فقط حساب الايبيهات بدون تكرار بجوارها اسم الدولة

  4. بتاريخ 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');

  5. بتاريخ منذ ساعة مضت قال Adnane Kadri:

    يمكنك الاستفادة من هاته الإجابات على سؤال سابق لك

     

    قمت بعمل ذلك

    اريد فقط عمل عداد للزوار الخاصين ببلد معين بدون تكرار زائر دخل الموقع اكثر من مرة

    اما الخطوات السابقة من تخزين الايبي واسم الدولة فهي تخزن بالفعل والكود بالاعلى يظهرالعدد الاجمالي واسماء الدول

    سوف اضع لك صورة من الموقع للتوضيح

    بها 23 زائر من دول مختلفة اريد تقسيم ال23 زائر لتظهر بجوار اسم الدولة

    p_2166l6ac81.png

    فكيف يمكن توزيع هذا العدد على الدول

    • أعجبني 1
  6. اذا كان لدينا جدول في قاعدة البيانات يخزن ايبي الزائر واسم البلد ( في نهاية اليوم يتم حذف محتوى الجدول ) يتم فلترة الايبيهات المكررة والبلدان لتظهر بصيغتها النهائية عدد الزوار  في هذا اليوم والبلدان الخاصة بالزوار كما في الكود التالي

    <?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
  7. الكود التالي يستخدم في تعدد الصفحات لكنه يظهر نتائج الموضوعات من الاقدم للأحدث كيف يمكن تعديلة ليعرض النتائج من الأحدث للأقدم

    <?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
  8. بتاريخ 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
  9. الكود التالي يظهر عدد الزوار ليوم واحد

    يتم تخزين 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
  10. بتاريخ 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
  11. بتاريخ 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 ?>" />

    p_2140qr2mg1.png

    والصورة التالية بالوسمين معا description , keywords

    __________

    <meta name="keywords" content="<?=$keywords ?>" />
    <meta name="description" content="<?= $description = substr(''.$row['news_content'].'', 0, 1000); ?>">

    p_2140h78bv1.png

    ومصدر الصفحة بعد اضافة الوسمين كالتالي

    p_2140w9pqx1.png

    أي ان المشكلة ليست فى وسم الكلمات المفتاحية انما المشكلة في وسم الوصف _ لاحظ انني اقتطع جزء من محتوى الموضوع لكي يظهر فى الوصف لكنة يظهر اعلى هيدر الصفحة والطبيعي الا يظهر كذلك مثل الكلمات المفتاحية التي لم تظهر اثناء التصفح

    • أعجبني 1
  12. السلام عليكم ورحمة الله وبركاته ,

    في الكود التالي وسوم 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
  13. السلام عليكم ورحمة الله وبركاته

    منذ فترة طرحت سؤال وهو أن الموقع يعمل بشكل سليم على السيرفر المحلي وعند تجربته على استضافة مجانية حدثت مشكلة وهي ان بعض البيانات لا يتم ارسالها لبعض الجداول في القاعدة  - احد الاخوة الافاضل هنا قال هذه المشاكل لا تحدث في الاستضافة المدفوعة فقمت بشراء استضافة  لكن حدثت مشكلة اكبر مما حدث في الاستضافة المجانية كما في الصور التالية

    p_2138ck9zc1.png

    ----

    p_2138vhloa1.png

    لا يظهر الا سوى جزء من الموقع وحتى الراوبط لا تعمل ايضا

    لا اعرف اين المشكلة

  14. السلام عليكم ورحمة الله وبركاته 

    اريد ان اشتري استضافة مدفوعة من الانترنت لكن لا امتلك بطاقة -انا اعيش في مصر ما هي افضل بطاقة للشراء وكيف يمكن استخراجها وهل تحتاج إلى مبالغ مالية كبيرة للاستخراج وكيف يتم شحنها بالمال وهل يمكن ربطها بالباي بال  وهل هناك بطاقة للشراء من جميع المواقع 

    كل هذه الأسئلة احتاج لمعرفتها وشكرا لكم 

     

     

     

    • أعجبني 1
  15. بتاريخ 6 دقائق مضت قال بلال زيادة:

    المشكلة هذه خاصة بالاستضافات المجانية , فأغلبها تحدث بها هذه المشكلة , الأفضل اللجوء إلى استضافة مدفوعة. 

    هل هذه المشكلة لا تحدث في الاستضافة المدفوعة.

    • أعجبني 1
  16. السلام عليكم ورحمة الله وبركاته اخواني الأعزاء

    عند تجربة اسكربت الموقع على السيرفر المحلي يتم ارسال البيانات الى القاعدة وتخزينها  بدون أي مشاكل

    لكن عند تجربة استضافات مجانية لا يتم تخزين البيانات في جداول معينة وهناك جداول اخرى يتم تخزين البيانات فيها في الوقت نفسه عند تجربة استضافات مجانية اخرى يتغير الحال فبعض الجداول التي كانت لا تستقبل البيانات هنا تستقبلها والاخرى التى كانت تخزن لا تخزن هنا

    جربت الكثير منها  والمشكلة مازالت رغم انها تعمل بشكل جيد على السيرفر المحلي

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

    • أعجبني 1
  17. بتاريخ 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
  18. السلام عليكم ورحمة الله وبركاته

    اذا كان هناك جدول للموضوعات باسم  news    به حقل    id    تتسلسل من خلاله المواضيع

    وهناك جدول اخر للتعليقات باسم comment  به حقل  news_id  

    رقم الموضوع  id   هو نفسه  news_id  في التعليقات

    ماذا يمكن فعله لحذف كل التعليقات المتعلقة بموضوع معين عندما يتم حذف الموضوع نفسة من القاعدة اي ان id  ليس له وجود في الجدول 

    • أعجبني 1
  19. السلام عليكم

    أحد الأخوة الأفاضل بموقعكم الجميل قدم لي هذا الكود الذي يحذف الصور من مجلد التجميل التي ليس لها اسم مخزن في القاعدة بصيغة 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
  20. بتاريخ 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);
    }

    يفترض أن يقوم هذا بحل المشكل . 

    يمكنك دوما تتبع مخروج المصفوفتين عن طريق طباعة كل منهما كل مرة . 

    توثيق الوظيفتين :

    شكرا اخي الفاضل تمت بنجاح لكن تظهر رسالة خطأ ربما الامر بسيط

    p_2126mq7pw1.png

    • أعجبني 1
  21. بتاريخ 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);
    }

    سيمكن بهذا تتبع مخروج كل من المصفوفتين قبل تطبيق أية عمليات عليها .
     

    لا يتم حذف اي من الصور من مجلد التخزين والنتيجة كالتالي

    p_2126er5e11.png

    p_2126e2cgv1.png

     

     

    • أعجبني 1
  22. بتاريخ 5 ساعات قال Adnane Kadri:

    يعني هذا عدم تماثل بعض النتائج من قاعدة البيانات و الملفات , يحتمل أنك تقوم بتخزين اسم المجلد في قواعد البيانات أيضا . 

    هلا تأكدت من أن الصور تظهر كالتالي في قاعدة البيانات :

    
    img1.jpg
    img2.jpg

    و ليس كـ : 

    
    images/profile/img1.jpg
    images/profile/img2.jpg

     

    الصور يتم تخزينها الاسم

    والامتدادا كما بالصورة

    p_2125vwq5b1.png

     

    • أعجبني 1
  23. بتاريخ 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
  24. تظهر مشكلة كالتالي ويتم حذف الصورة المخزن اسمها في القاعدة ايضا

    p_21247vv4v1.png

    p_21242has41.png

    <?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
  25. السلام عليكم ورحمة الله وبركاته

    يقوم الاعضاء بتعديل صورهم الشخصية بالموقع بشكل مستمر مما يجعل الصور القديمة بلا فائدة وتشغل مساحة كبيرة

     في جدول الأعضاء يتم تخزين اسم وامتداد اخر صورة بهذا الشكل مثلا ( 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
×
×
  • أضف...