الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة فى امر حذف مدخلات بعد مدة زمنية محددة

بدأه fatmaali في 12 سبتمبر 2012 · 8 رد · 987 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

وهذه الامر اضعه فى صفحة عرض الاعلان

اقتباس
$timenw = time ();

$exec = mysql_query ( "DELETE FROM a3lan WHERE time <'" . $timenw . "'" );

علما بان جدول الاعلان بالقاعدة هوا كالتالى

-- بنية الجدول `a3lan`
--

CREATE TABLE IF NOT EXISTS `a3lan` (
  `a3lan_id` int(11) NOT NULL AUTO_INCREMENT,
  `pic` varchar(255) DEFAULT 'images/nophoto.gif',
  `a3lan_name2` varchar(255) DEFAULT NULL,
  `postdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `time` int(22) NOT NULL,
  PRIMARY KEY (`a3lan_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1256 AUTO_INCREMENT=218 ;

الكود يعمل بشكل ممتاز على اللوكل هوست السرفر المحلى لكن عند رفعه على السرفر الخاص بالموقع لا يعمل يحذف الاعلان بنفس الثانية التى يتم وضعه فيها مهما كان الوقت مختلف

وانا اقوم باضافة الوقت هكذا 3600

ارجو حل المشكل

#2

السلام عليكم

هناك بعض الأشياء المتعلقة بدالة ;()time أريد أن أوضحها

- دالة time تعطى لنا الوقت الحالى بالثوانى منذ هذا التاريخ January 1 1970 00:00:00 GMT .

- تعتمد القيمة التى تعطينا إياها تلك الدالة على الوقت الحالى للسرفر بالنسبة للإستضافة على الإنترنت , أو تعتمد على الوقت الحالى للجهاز إذا كنا نستخدم السرفر المحلى , ولهذا يجب عليك التأكد من ضبط التاريخ والوقت على الجهاز أو معرفة ما هو الوقت الحالى للسرفر إذا كنتى تستخدمى إستضافة على الإنترنت , ولكن وقت السرفر لايهم كثيراً ما دمنا سنتعامل مع أيام ففروق التوقيت تكون بالساعات فغير مهم فى هذا الكود وفى الغالب يكون وقت السرفر مضبوط على توقيت غيرنتش .

اقتباس
وانا اقوم باضافة الوقت هكذا 3600
ما هذا الوقت , هذا يعنى أن وقت إنتهاء الإعلان هو 1970-01-06 الساعه 02:00 صباحاً , فبالطبع سيتم حذف الإعلان فور فتح الصفحة .

قيمة الـ timestamp الحالية وأنا أكتب الموضوع بالنسبة للتوقيت المحلى لمدينتى هى 1347425754 .

ولضبط عدد أيام ظهور الإعلان التى سيتم تخزينها فى قاعدة البيانات يكون بالشكل التالى :

$showDays = 6 ;
$timestampDays = time()+($showDays*24*60*60);

هذا الكود يقوم بتحويل قيمة الأيام لثوانى فى شكل timestamp لحفظها فى قاعدة البيانات , وعلى سبيل المثال فى الكود السابق مده ظهور الإعلان هى 6 أيام من تاريخ إدخال القيمة .

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

لا إله إلا أنت سبحانك إني كنت من الظالمين

#3

بمعني ان الامر الذي يجب وضعه بالاعلان يكون هكذا ؟

$showDays = 6 ; 
$timestampDays = time()+($showDays*24*60*60);
$exec = mysql_query ( "DELETE FROM a3lan WHERE time <'" . $timestampDays . "'" );

ولكن قمت بتغيرة كما ذكرت ولكن ايضا يحذف الخبر بمجرد فتح صفحة الاعلان

تم تعديل هذه المشاركة بواسطة fatmaali في 13 سبتمبر 2012 في 06:09

#4

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

<?
$insert="insert into e3lan (name,pic,link,active) values ('$name','$pic','$link','$active')";
$Result=mysql_query($insert);
if($Result)
{
echo"



";
echo"<meta http-equiv=refresh content=2;url=a3lan.php>";
}
?>
#5

السلام عليكم

$insert="insert into e3lan (name,pic,link,active) values ('$name','$pic','$link','$active')";

بيانات هذا الكود تختلف عن محتويات قاعدة البيانات التى قمتى بإرفاقها فى الموضوع , وأيضاً اسم الجدول مختلف فهنا اسمه e3lan وفى بيانات القاعدة اسمه a3lan .

أرجوا إرفاق الكود كامل لنستطيع مساعدتك .

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

لا إله إلا أنت سبحانك إني كنت من الظالمين

#6

حاضر اخي اتفضل

اولاً قاعدة البيانات الخاصة بالاعلانات

-- 
-- بنية الجدول `a3lan`
-- 

CREATE TABLE `a3lan` (
  `a3lan_id` int(11) NOT NULL auto_increment,
  `pic` varchar(255) default 'images/nophoto.gif',
  `a3lan_name2` varchar(255) default NULL,
  `note` mediumtext,
  `pay` varchar(255) default NULL,
  `postdate` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `save_news` int(11) NOT NULL default '0',
  `city_id` int(11) NOT NULL default '0',
  `city1_id` int(11) NOT NULL default '0',
  `city2_id` int(11) NOT NULL default '0',
  `id_user` int(11) NOT NULL default '0',
  `active` int(11) NOT NULL default '0',
  `na` varchar(255) NOT NULL,
  `addres` varchar(255) NOT NULL,
  `city2_name` varchar(255) NOT NULL,
  `city1_name` varchar(255) NOT NULL,
  `time` int(11) NOT NULL,
  PRIMARY KEY  (`a3lan_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1256 AUTO_INCREMENT=218 ;

-- 
-- إرجاع أو إستيراد بيانات الجدول `a3lan`
--

ثانيا كود اضافة الاعلان

كود insert الخاص باضافة الاعلان

<?
$insert="insert into a3lan (time,note,addres,pic,pay,a3lan_name2,city2_id,city1_id,city_id,a3lan_id,na,id_user,city1_name,city2_name,active) values ('$time','$note','$addres','$pic','$pay','$a3lan_name2','$city2_id','$city1_id','$city_id','$a3lan_id','$na','$id_user','$city1_name','$city2_name','$active')";
$Result=mysql_query($insert);

if($Result)
{
echo"تم الاضافة بنجاح";
echo"<META HTTP-EQUIV=Refresh Content=2;URL=first.php>";

}

?>

ثالثا ...... كود عرض الاعلان ... ملحوظة بدل امر الحذف من القاعدة حسب التوقيت اريد استبداله بامر ابديت ويرجع حاله الاعلان الى غير مفعل

حيث ان

active=1 مفعل

active=0 غير مفعل

كود عرض الاعلان

اقتباس

<?php

include("include/config.php");

if (!isset($_GET['page'])) {

$page = 1;

} else {

$page = $_GET['page'];

}

$max_results =10;

$from = (($page * $max_results) - $max_results);

$to = $from + $max_results;

$i=0;

$showDays = 1 ;

$timestampDays = time()+($showDays*24*60*60);

$up_save =mysql_query("UPDATE a3lan SET active=0 order by time < $timestampDays");

$result = mysql_query("select * from a3lan where a3lan_id>=1 and city_id=1 and active=1 and time > $timestampDays order by a3lan_id desc limit $from,$max_results");

if (mysql_num_rows($result) > 0)

{

$row=substr($note,1,100);

?>

<?

while ($row = mysql_fetch_array($result)) {

?>

<td width="64" align="center" dir="rtl" background="td.gif">

<a target="" href="show_e3lan.php?pp=<?=$row['a3lan_id']?>"><img border="5" src="<?=$row['pic']?>" width="50" height="50" style="border: 4px solid #FFFFFF; background-color: #C0C0C0"></a></td>

<td width="204" align="center" dir="rtl" background="td.gif">

<?=$row['postdate']?></td>

<td width="153" align="center" background="td.gif">

<font face="Tahoma" size="2">طرابلس</font></td>

<td width="225" align="center" background="td.gif">

<font face="Tahoma" size="2"><?=$row['city1_name']?></font></td>

<td align="center" height="62" background="td.gif">

<a target="" href="show_e3lan.php?pp=<?=$row['a3lan_id']?>&u=طرابلس"><?=$row['a3lan_name2']?></a></td>

</tr>

<?

$i++;

}//end while

?>

</table>

</div>

<br>

<?php

echo" </p>

<div class='navc' align='center' dir='rtl'><b>

<p dir='rtl'>الصفحات من</p></b></div>";

$queryall = "select count(*) as count from a3lan where a3lan_id>=1 and active=1 ";

$resultall = mysql_query($queryall);

$count_row = mysql_fetch_row($resultall);

$total_results = $count_row['0'];

$total_pages = ceil($total_results / $max_results);

// Build Previous Link

for($i = 1; $i <= $total_pages; $i++) {

if (($page) == $i) {

echo "<div class='navc' align='center' dir='rtl'><b>

<p dir='rtl'>$i</p></b></div>";

} else {

echo "<div class='nav' align='center' dir='rtl' ><a href=\"index.php?page=$i\">$i</a></div>";

}

}

}

else

echo "<center>

<font size='2' color='#FF0000'>

<table border='0' width='30%' cellpadding='0' height='41' dir='ltr' cellspacing='0'>

<tr>

<td bgcolor='#FFE6E6' width='202'>

<p align='center'>

<font size='2' color='#393939' face='Tahoma'>

لا يوجد منتجات فى هذا القسم

</font></td>

<td bgcolor='#FFE6E6'>

<p align='center'>

<img border='0' src='images/error_button.png' width='32' height='32'></td>

</tr>

</table> </font>

</p>

</center>

";

echo "";

?>

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

اقتباس

<?

$update="update a3lan set active='$active',time='$time' where a3lan_id='$a3lan_id'";

$Result=mysql_query($update);

if($Result)

{

?>

تم التعديل بنجاح

<meta http-equiv=refresh content=0;url='show_producta1.php'>

<?

}

?>

اظن كذا الامر وضح وارجو اذا تكرمت الحل

#7

السلام عليكم

ملاحظة : الأفضل عدم إستخدام الوسوم المختصرة فى php مثل :

<?  ?>
or
<?= $value ?>

والأفضل إستخدام الوسوم العادية لأن الوسوم المختصرة غير مفعلة فى النسخ الحالية من php تمهيداً لإلغائها فى php 6 .

ويفضل إستخدام الوسوم العادية بالشكل التالى :

<?php  ?>
or
<?php echo $value; ?>

بالنسبة لتعديل الكود

أولاً : كود insert الخاص باضافة الاعلان :

<?php
$showDays = 6 ;
$timestampDays = time()+($showDays*24*60*60);
$insert="insert into a3lan (time,note,addres,pic,pay,a3lan_name2,city2_id,city1_id,city_id,a3lan_id,na,id_user,city1_name,city2_name,active) values ('$timestampDays','$note','$addres','$pic','$pay','$a3lan_name2','$city2_id','$city1_id','$city_id','$a3lan_id','$na','$id_user','$city1_name','$city2_name','$active')";
$Result=mysql_query($insert);

if($Result)
{
echo"تم الاضافة بنجاح";
echo"<META HTTP-EQUIV=Refresh Content=2;URL=first.php>";
}
?>

ثانياً: كود عرض الإعلان :

<?php
include("include/config.php");

if (!isset($_GET['page'])) {
$page = 1;
} else {
$page = $_GET['page'];
}
$max_results =10;
$from = (($page * $max_results) - $max_results);
$to = $from + $max_results;
$i=0;
$timeNow = time();
$up_save =mysql_query("UPDATE a3lan SET active=0 where time < $timeNow");
$result = mysql_query("select * from a3lan where a3lan_id>=1 and city_id=1 and active=1 and time > $timeNow order by a3lan_id desc limit $from,$max_results");
if (mysql_num_rows($result) > 0)
{
//$row=substr($note,1,100);

?>

<?php
while ($row = mysql_fetch_array($result)) {
?>
<td width="64" align="center" dir="rtl" background="td.gif">
<a target="" href="show_e3lan.php?pp=<?php echo $row['a3lan_id']; ?>"><img border="5" src="<?php echo $row['pic']; ?>" width="50" height="50" style="border: 4px solid #FFFFFF; background-color: #C0C0C0"></a></td>
<td width="204" align="center" dir="rtl" background="td.gif">
<?php echo $row['postdate']; ?></td>
<td width="153" align="center" background="td.gif">
<font face="Tahoma" size="2">طرابلس</font></td>
<td width="225" align="center" background="td.gif">
<font face="Tahoma" size="2"><?php echo $row['city1_name']; ?></font></td>
<td align="center" height="62" background="td.gif">
<a target="" href="show_e3lan.php?pp=<?php echo $row['a3lan_id']; ?>&u=طرابلس"><?php echo $row['a3lan_name2']; ?></a></td>

</tr>

<?php
$i++;
}//end while
?>
</table>
</div>

<br>

<?php
echo" </p>
<div class='navc' align='center' dir='rtl'><b>
<p dir='rtl'>الصفحات من</p></b></div>";
$queryall = "select count(*) as count from a3lan where a3lan_id>=1 and active=1 ";
$resultall = mysql_query($queryall);
$count_row = mysql_fetch_row($resultall);
$total_results = $count_row['0'];
$total_pages = ceil($total_results / $max_results);
// Build Previous Link
for($i = 1; $i <= $total_pages; $i++) {
if (($page) == $i) {
echo "<div class='navc' align='center' dir='rtl'><b>
<p dir='rtl'>$i</p></b></div>";
} else {
echo "<div class='nav' align='center' dir='rtl' ><a href=\"index.php?page=$i\">$i</a></div>";

}

}
}
else
echo "<center>
<font size='2' color='#FF0000'>
<table border='0' width='30%' cellpadding='0' height='41' dir='ltr' cellspacing='0'>
<tr>
<td bgcolor='#FFE6E6' width='202'>
<p align='center'>
<font size='2' color='#393939' face='Tahoma'>
لا يوجد منتجات فى هذا القسم
</font></td>
<td bgcolor='#FFE6E6'>
<p align='center'>
<img border='0' src='images/error_button.png' width='32' height='32'></td>
</tr>
</table> </font>

</p>

</center>



";
echo "";
?>

وأخيراً : كود صفحة الابديت الخاصة بارجاع الاعلان مرة اخرى للعرض بعد ان تم الغاء تفعيله بعد انتهاء المدة :

<?php
$showDays = 6;
$timestampDays = time()+($showDays*24*60*60);
$update="update a3lan set active='$active',time='$timestampDays' where a3lan_id='$a3lan_id'";
$Result=mysql_query($update);
if($Result)
{
?>
تم التعديل بنجاح
<meta http-equiv=refresh content=0;url='show_producta1.php'>
<?php
}
?>

يمكنك مراجعة التعديلات التى تمت على أوامر الـ SQL , وتم تحول الوسوم القصيرة إلى الوسوم الإفتراضية , طبعاً المتغير showDays$ هو عدد أيام ظهور الإعلان من تاريخ وضعه .

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

لا إله إلا أنت سبحانك إني كنت من الظالمين

#8

السلام عليكم اخي الفاضل بدايتنا انا اشكرك جدا على مجهودك وتعبك فى الرد لكن هناك مشكله

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

وبمجرد ما رفعت الملفات على الويب وقمت بتجرربة وضع اعلان ووضعت مدة ظهور الاعلان 1 يوم مازال الاعلان الى الان موجود ولم يتغير شيئ ...

#9

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

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

يغلق للانتهاء

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…