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

C++ JAVA
systems
Турист
Турист
Posts: 282
Joined: Fri Sep 28, 2012 7:04 pm
Location: ..

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

Post by systems » Sun Jun 02, 2019 4:07 pm

Здравеите опитвам се да направя скрипт които да обновява времето зададено в база данни аз направих това:
то обновява само колоната 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>";
}
?>[/php]

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3278
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Jun 02, 2019 5:47 pm

"UPDATE `users` SET `ban='1'`, `ban_end`=MINUTE('$message') WHERE `users`.`username`='$user''";

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

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

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

Code: Select all

<?php

$banEnd = time&#40;&#41; + 24*60*60; // 1 ден
$nq = "UPDATE `users` SET  `ban_end`=$banEnd WHERE  `users`.`username`='$user''";
После правиш една проста проверка при логването на потребителя:

Code: Select all

<?php
$time = time&#40;&#41;;
$select = "SELECT * FROM`users` WHERE  `users`.`username`='$user' AND `ban_end` <= $time";

if &#40;$select&#41; &#123;
// прави каквото искаш
&#125; else &#123;
// вие сте баннат абонат
&#125;



systems
Турист
Турист
Posts: 282
Joined: Fri Sep 28, 2012 7:04 pm
Location: ..

Post by systems » Sun Jun 02, 2019 7:11 pm

Мен идеята ми е времето да го задавам не през 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>";
}
?>[/php]

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3278
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Jun 02, 2019 7:31 pm

Тогава просто си задай времето без функцията MINUTE(), като $pub_date трябва да е във този формат: 2019-01-01 12:00:00

[php]
$nq = "UPDATE `pvpgn_BNET` SET ban='1', ban_end=$pub_date WHERE username=$user";
[/php]

https://stackoverflow.com/questions/949 ... e-with-php

systems
Турист
Турист
Posts: 282
Joined: Fri Sep 28, 2012 7:04 pm
Location: ..

Post by systems » Sun Jun 02, 2019 7:42 pm

Благодаря формата започна да променя времето но проблема е че без функия minute()
времето не се занулява в базата с данни.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3278
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Jun 02, 2019 7:49 pm

systems wrote:Благодаря формата започна да променя времето но проблема е че без функия minute()
времето не се занулява в базата с данни.
Чакай сега. Нещо не разбирам! Защо трябва да ти се занулява времето в базата? Нали искаш да подаваш времето за бан. Ъпдейтваш полето с новата дата и час за изтичане на бана и след, като изтече какво те бърка полето каква стойност има? Я ми напиши алгоритъм какво искаш в последователност да ти прави системата! 1. Банваш; 2. Махаш бана

systems
Турист
Турист
Posts: 282
Joined: Fri Sep 28, 2012 7:04 pm
Location: ..

Post by systems » Sun Jun 02, 2019 7:57 pm

Идеята е този скрипт да махне бана затова ми трябва функция която да занулява времето във 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]

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3278
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Jun 02, 2019 8:03 pm

Нормално е да не ти работи. В този случай логиката ти е грешна. Не виждам къде проверяваш и за датата на бана. Тук проверяваш само дали има баннати абонати ама дали са с изтекъл срок или прочие нищо не следиш. Както и да е!

[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());

}
}
?>
[/php]

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3278
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Jun 02, 2019 8:05 pm

Като цяло полето ban трябва да ти приема true или false. Целия ти код е адски стар и не е приложим вече. Логиката ти е сбъркана и не знам защо се мъчиш с тази боза.

systems
Турист
Турист
Posts: 282
Joined: Fri Sep 28, 2012 7:04 pm
Location: ..

Post by systems » Sun Jun 02, 2019 8:10 pm

Идеята е бана без моя намеса да се махне в случая скрипта за махане проверява дали
го има или не ако времето е различно от 0000-00-00 00:00 не го маха ако е занулено директно го маха.

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

Post Reply