Обновяване на време

systems

Registered
Здравеите опитвам се да направя скрипт които да обновява времето зададено в база данни аз направих това:
то обновява само колоната ban от 0 на 1 но неиска да обнови времето на колона ban_end която е 0
заявката съм я взел от phpmyadmin там като задам примерно 2 минути и поставя на MINUTES след 2 минути
колоната сама обновява обратно на 0 това опитвам да го направя и с този код но незная защо нестава моля за помощ

колоната на ban_time съм я направил така: ban_end int(11) UNSIGNED 0

PHP:
<?php
$dbhost = "localhost";
$dbuser = ""; 
$dbpass = ""; 
$dbname = ""; 
$connect = mysql_connect("$dbhost", "$dbuser", "$dbpass");
mysql_select_db($dbname,$connect) or die ("Could not select database");
echo '<form action="" method="POST">';
echo 'потребител<br /><input type="text" name="user" /><br/>';
echo 'Време<br /><textarea cols="20" name="message" rows="20"></textarea><br /><br/>';
echo '<input type="submit" name="submit" value="Банни" />';
echo '</body>';
if(isSet($_POST['submit'])){ 
$user = (($_POST['user']));
$message = (($_POST['message']));
if (empty($user)) 
{ 
die(" Не е въведено име! "); 
}
$message =$_POST['message'];
if (empty($message)) 
{ 
die(" Не е въведено време"); 
}
$nq = "UPDATE `users` SET  `ban='1'`, `ban_end`=MINUTE('$message') WHERE  `users`.`username`='$user''";
$nr = mysql_query($nq);
echo "<div class='success'>Вие успешно банахте акаунт:$_POST[user]. за:$_POST[message] минути</div>";
}
?>
 
"UPDATE `users` SET `ban='1'`, `ban_end`=MINUTE('$message') WHERE `users`.`username`='$user''";

Накрая имаш една единична кавичка в повече.

За да работи функцията MINUTE() полето ban_end трябва да е datetime.

Защо просто не си направиш едно поле със датата и часът на изтичане на бана? Тоест в полето ban_end въвеждаш датата на стартиране + времето на бана или по-просто казано:

Код:
<?php

$banEnd = time() + 24*60*60; // 1 ден
$nq = "UPDATE `users` SET  `ban_end`=$banEnd WHERE  `users`.`username`='$user''";

После правиш една проста проверка при логването на потребителя:

Код:
<?php
$time = time();
$select = "SELECT * FROM`users` WHERE  `users`.`username`='$user' AND `ban_end` <= $time";

if ($select) {
// прави каквото искаш
} else {
// вие сте баннат абонат
}
 
Мен идеята ми е времето да го задавам не през phpmyadmin а чрез кода
през формата през поле: Pub_date
промених колона ban_end на datetime но скрипта отново непроменя времето в базата с данни каквото и време да задам си седи на 0000-00-00 00:00:00

PHP:
<?php
$dbhost = "localhost";
$dbuser = " "; 
$dbpass = " "; 
$dbname = " "; 
$connect = mysql_connect("$dbhost", "$dbuser", "$dbpass");
mysql_select_db($dbname,$connect) or die ("Could not select database");
echo '<form action="" method="POST">';
echo 'Потребител<br /><input type="text" name="user" /><br/>';
echo 'Време:<input type="datetime-local" name="pub_date" value="2019-01-01 12:00:00"/>';
echo '<input type="submit" name="submit" value="Задаи време" />';
echo '</body>';
if(isSet($_POST['submit'])){ 
$user = (($_POST['user']));
$pub_date =$_POST['pub_date'];
if (empty($user)) 
{ 
die(" Не е въведено име! "); 
}
$nq = "UPDATE `pvpgn_BNET` SET ban='1', ban_end=MINUTE('$pub_date') WHERE username='$user'";
$nr = mysql_query($nq);
echo "<div class='success'>Вие успешно зададохте време на бан на  Потребител: : $_POST[user].  бана е до: $_POST[pub_date]</div>";
}
?>
 
Тогава просто си задай времето без функцията MINUTE(), като $pub_date трябва да е във този формат: 2019-01-01 12:00:00

PHP:
$nq = "UPDATE `pvpgn_BNET` SET ban='1', ban_end=$pub_date WHERE username=$user";

https://stackoverflow.com/questions/9490177/how-to-generate-date-for-mysql-datetime-type-with-php
 
Благодаря формата започна да променя времето но проблема е че без функия minute()
времето не се занулява в базата с данни.
 
systems каза:
Благодаря формата започна да променя времето но проблема е че без функия minute()
времето не се занулява в базата с данни.

Чакай сега. Нещо не разбирам! Защо трябва да ти се занулява времето в базата? Нали искаш да подаваш времето за бан. Ъпдейтваш полето с новата дата и час за изтичане на бана и след, като изтече какво те бърка полето каква стойност има? Я ми напиши алгоритъм какво искаш в последователност да ти прави системата! 1. Банваш; 2. Махаш бана
 
Идеята е този скрипт да махне бана затова ми трябва функция която да занулява времето във phpmyadmi като задам функция minutes веднага щом часа и датата станат като зададените веднага занулява полето обратно на 0000-00-00 00:00:00

PHP:
<?php
$dbhost = "localhost";
$dbuser = " "; 
$dbpass = " "; 
$dbname = " "; 
$connect = mysql_connect("$dbhost", "$dbuser", "$dbpass");
mysql_select_db($dbname,$connect) or die ("Could not select database");
$term = $_POST['term'];
$sql = mysql_query("select * from pvpgn_BNET where ban like '%".$term."%' or username like'%".$term."%'");
while ($row = mysql_fetch_array($sql))
{
        if($row['ban']=='1')
        {
         $user=$row['username'];
        }
}
$s= mysql_query("UPDATE `pvpgn_BNET` SET ban='1' WHERE username='$user' AND ban_end='0000-00-00 00:00:00'") or die(mysql_error());
?>
 
Нормално е да не ти работи. В този случай логиката ти е грешна. Не виждам къде проверяваш и за датата на бана. Тук проверяваш само дали има баннати абонати ама дали са с изтекъл срок или прочие нищо не следиш. Както и да е!

PHP:
<?php
$dbhost = "localhost";
$dbuser = " "; 
$dbpass = " "; 
$dbname = " "; 
$connect = mysql_connect("$dbhost", "$dbuser", "$dbpass");
mysql_select_db($dbname,$connect) or die ("Could not select database");
$term = $_POST['term'];
$sql = mysql_query("select * from pvpgn_BNET where ban like '%".$term."%' or username like'%".$term."%'");
while ($row = mysql_fetch_array($sql))
{
    if($row['ban']=='1')
    {
        $user=$row['username'];
		$s= mysql_query("UPDATE `pvpgn_BNET` SET ban='0' WHERE username='$user' AND ban_end='0000-00-00 00:00:00'") or die(mysql_error());

    }
}
?>
 
Като цяло полето ban трябва да ти приема true или false. Целия ти код е адски стар и не е приложим вече. Логиката ти е сбъркана и не знам защо се мъчиш с тази боза.
 
Идеята е бана без моя намеса да се махне в случая скрипта за махане проверява дали
го има или не ако времето е различно от 0000-00-00 00:00 не го маха ако е занулено директно го маха.

друг вариянт които опитах е чрез сравнение на дата и час но там трябва да се зареди скрипта в точния час за да се махне бана ако този час е отминал бана не се променя
докато при този вариянт като се занули времето бана се маха моментално, затова се чудя как да го направя под линукс съм но имам инсталиран cron но с него немога нещо да го накарам да зареди фаила в точно време.
 
Ето ти горе долу за какво говоря! Ееее пак е омазия ама дано ми схванеш идеята!

PHP:
<?php
$dbhost = "localhost";
$dbuser = " "; 
$dbpass = " "; 
$dbname = " "; 
$connect = mysql_connect("$dbhost", "$dbuser", "$dbpass");
mysql_select_db($dbname,$connect) or die ("Could not select database");
echo '<form action="" method="POST">';
echo 'Потребител<br /><input type="text" name="user" /><br/>';
echo 'Време:<input type="datetime-local" name="pub_date" value="2019-06-03 12:00:00"/>';
echo '<input type="submit" name="submit" value="Задаи време" />';
echo '</body>';
if (isSet($_POST['submit'])) { 
	$user = (($_POST['user']));
	$pub_date =$_POST['pub_date'];
	if (empty($user)) { 
		die(" Не е въведено име! "); 
	}
	$nq = "UPDATE `pvpgn_BNET` SET ban_end=$pub_date WHERE username='$user'";
	$nr = mysql_query($nq);
	echo "<div class='success'>Вие успешно зададохте време на бан на  Потребител: : $_POST[user].  бана е до: $_POST[pub_date]</div>";
}
// До тук въвеждаш бана


$sql = mysql_query("select * from pvpgn_BNET");
while ($row = mysql_fetch_array($sql))
{
    if(strtotime($row['ban_end']) < time())
    {
        $user=$row['username'];
        $s= mysql_query("UPDATE `pvpgn_BNET` SET ban='0', ban_end='0000-00-00 00:00:00' WHERE username='$user'") or die(mysql_error());

    } else { print "Бана на $user не е изтекъл!<br>";}
}
?>
 
Благодаря много наистина едно голямо благодаря супер си кода които си дал проверява дали времето е изтекло и ако не е бана стои но ако е изтекло маха бана и занулява времето в базата с данни работи без грешка още веднъж благодаря златен си!!!!!
 

Горе