[php/mysql] Vergelijking lukt niet

Pagina: 1
Acties:

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
// hier staan wat sql queries

/* knip */

if ($currentuserstatus == "Moderator") { $go = "true"; $editstatus = "mod"; }
if ($currentuser == $berichtposter) { $go = "true"; $editstatus = "user"; }

if ($go != "true") { die("Je hebt het recht niet dit bericht te wijzigen"); }

$sql2 = mysql_query("SELECT * FROM f_berichten WHERE id='$id'") or die("Unable to execute query");
$row2 = mysql_fetch_array($sql2);
$berichttijd = $row2["unixtime"];
$berichttijd = $berichttijd + 86400;
$tijd = time();

if (($editstatus != "mod") &amp;&amp; ($tijd > $berichttijd)) { die("Je mag een bericht maar tot 24 uur na het plaatsen wijzigen"); }


echo "<p><textarea rows=10 style=\"width:500px;\">$bericht</textarea>";
?>

de $berichttijd wordt dus uit de database gehaalt en vergeleken met de time(); maar ook al is de $tijd groter dan de $berichttijd. Hij negeert dat, negeert de die(); en dat is dus niet de bedoeling.

Hoe dit op te lossen?

oja: Het $berichttijd-veld staat nu op int, maar heeft ook al op decimal gestaan. Dat heeft er misschien ook nog wat mee te maken.

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
sorry verkeerde forum

=> /38

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • pimlie
  • Registratie: November 2000
  • Laatst online: 19:08
$berichttijd zou ik als een timestamp in de database zetten en dan met UNIX_TIMESTAMP(unixtime) AS unixtime er uit halen ofzoiets. Lijkt me dat ie het dan wel zou moeten doen.

  • OzBoz
  • Registratie: Maart 2000
  • Laatst online: 09-09 19:36

OzBoz

.:.H.:.I.:.P.:.

Moved vanuit P

My Fizion | My 3D prints | LinkedIn


  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
Op maandag 22 oktober 2001 21:18 schreef pimlie het volgende:
$berichttijd zou ik als een timestamp in de database zetten en dan met UNIX_TIMESTAMP(unixtime) AS unixtime er uit halen ofzoiets. Lijkt me dat ie het dan wel zou moeten doen.
ik schrijf naar de database: time();
ik haal uit de database: SELECT UNIX_TIMESTAMP(unixtime)

het schrijven gaat goed.
Maar als ik hem dan weer uit de database wil halen geeft ie als resultaat 0.

Als ik de mysql-kolomtype op timestamp zet geeft dit als resultaat dus 20011022214725 maar time() geeft dus zo'n seconde-getal.

Maar ik heb nu dus nog geen oplossing gevonden. Heeft iemand een oplossing ervoor?

ik schrijf dus de time() weg vraag hem daarna op en kijk of de time() van dit moment niet niet meer is dan time() uit de database+86400

als dit zo is krijgt ie de functie die()
maar het script gaat dus gewoon verder.

Iemand?

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Verander het eens in dit (op de juiste plaats)
PHP:
1
2
3
4
5
6
7
<?
$berichttijd = $berichttijd + 86400;
$tijd = time();
echo "1: $berichttijd <br>";
echo "2: $tijd <br>";
if (($editstatus != "mod") &amp;&amp; ($tijd > $berichttijd)) { die("Je mag een bericht maar tot 24 uur na het plaatsen wijzigen"); }
?>

Welke output geeft ie ?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
werkt al een stuk beter :)

thnx.

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • pimlie
  • Registratie: November 2000
  • Laatst online: 19:08
Je hebt de oplossing dan waarschijnlijk al, maar ik wou toch ff zeggen waar het fout ging ;)

Je gebruikte die UNIX_TIMESTAMP verkeerd. Je moet idd de kolomtype in mysql op timestamp zetten. Dan krijg je zon 20011023etc getal. Dit selecteer je vervolgens als UNIX_TIMESTAMP(unixtime) AS unixtime. De functie UNIX_TIMESTAMP() vertaalt die mysql timestamp naar een unix timestamp.

Het voordeel van het gebruik van een kolom type timestamp boven het gewoon in de database zetten van een unix timestamp is dat je kan inserten met ".. SET unixtime = NULL". Dan hoef je dus niet eerst een variabele te definieren met de waarde time().

Maar ja, tis maar wat je gewend bent natuurlijk :)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Misschien even ter overvloede, ik heb er ook even mee geworsteld tot ik zag dat ik het volgende gedaan had:
PHP:
1
2
3
<?
mysql_query("select blablabla, UNIX_TIMESTAMP(tijd) from bla",$conn);
?>

Maar dit moet natuurlijk zo:
PHP:
1
2
3
<?
mysql_query("select blablabla, UNIX_TIMESTAMP(tijd) as tijd from bla",$conn);
?>

Als je die "as tijd" vergeet, komt er idd 0 uit je array vliegen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
thanx all hier kan ik weer mee vooruit :)

(toch bedankt voor het uitleggen pimlie, dan maak ik het even zo als jij uitlegt werkt wel handig en ik laat de unixtime gewoon weg tijdens de INSERT, dan word het automatisch een timestamp)

THNX! :)

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt

Pagina: 1