php conditional form validation by date - php

I have the function below that takes an entered date and serves different validation messages base don the dates value .The thing is is not always working as it's supposed. I'm new at PHP and maybe i'm doing something wrong. Anyone has an ideea how to correct it?
function validate_date($result, $value, $form, $field){
$date1=date("Y", strtotime($value));
$date2=date("Y");
$diff= $date2-$date1;
$diff2=18-$diff;
if ($value ==0) {
$result["is_valid"] = false;
$result["message"] = "Compeltati data!";
}
else {
if ($diff < 0) {
$result["is_valid"] = false;
$result["message"] = "Data invalida!";
}
elseif ($diff == 0) {
$result["is_valid"] = false;
$result["message"] ="Data invalida!";
}
elseif ($diff > 0){
if ($diff2 > 0 and $diff2 < 5 ){
$result["is_valid"] = true;
echo '<script type="text/javascript">alert("Va trebuie confirmarea parintilor. Contactati-ne pe email!");</script>';
}
elseif ($diff2 > 5) {
$result["is_valid"] = false;
$result["message"] = "Nu aveti varsta minima pentru participare!";
}
}
}
return $result;
}

As I understand $diff is AGE and $diff2 is how much he/she is younger then 18year age. In that case if age of person is more then 18 then $diff2 will be negative and you have'nt added any clause for $diff2<0. so add it like:
if ($diff2 > 0 and $diff2 < 5 ){
$result["is_valid"] = true;
echo '<script type="text/javascript">alert("Va trebuie confirmarea parintilor. Contactati-ne pe email!");</script>';
}
elseif ($diff2 > 5) {
$result["is_valid"] = false;
$result["message"] = "Nu aveti varsta minima pentru participare!";
}
else { //for $diff<=0
$result["is_valid"] = false; //as you need change it on age >=18
$result["message"] = "as you need!";
}

Related

PHP Function to detect rar files completion (*.r01) not working with *.s01

I have a php function to detect multiple rar file completion. The problem i have is that when old style rar is used eg:
archive.rar
archive.r01
archive.r02
archive.r03
......
archive.r99
The limit is archive.r99 and then goes to:
archive.s01
archive.s02
archive.s03
I can't do anything about the source.. and I have no idea how to adjust this function.
I tried do a || in strpos:
if (strpos($b[0], '.r') > - 1 || strpos($b[0], '.s') > - 1 ) {
but that doesn't work. It doesn't detect the s01 and keeps saying incomplete archive/missing files s01, s02, s03 etc...
here is the function:
private function detectMissingFiles($array) {
$typ = 0;
$tid = $t["id"];
$breaked = false;
$arr = array();
foreach($array as $b) {
if (stripos($b[0], 'disc') > - 1) {
return false;
}
if (strpos($b[0], '/') > - 1) {
continue;
}
if ($typ == 0) {
if (strpos($b[0], '.part0') > - 1) {
$typ = 2;
}
else
if (strpos($b[0], '.r') > - 1) {
$typ = 1;
}
else {
continue;
}
}
if ($typ == 1) {
if (is_numeric($s = substr($b[0], -2))) {
$arr[] = array(
id => $s,
s => $b[1]
);
}
}
else
if ($typ == 2) {
if (is_numeric($s = substr($b[0], -6, 2)) && substr($b[0], -4) == '.rar') {
$arr[] = array(
id => $s,
s => $b[1]
);
}
}
}
asort($arr);
if ($typ == 1) $sista = - 1;
else
if ($typ == 2) $sista = 0;
$status = "";
$antal = count($arr) - 1;
if ($antal > 30) {
foreach($arr as $ar) {
if ($antal > $ar["id"]) {
if ($ar["s"] < 50000000) {
$status.= L::get("WRONG_RAR_FILE_SIZE", [$ar["id"]]);
}
}
if ($sista + 1 != $ar["id"]) {
$status.= L::get("MISSING_FILE", [$sista + 1]);
}
$sista = $ar["id"];
}
if (strlen($status) > 1 && strlen($status) < 200) return $status;
else return 0;
}
}
I am hoping someone can enlighten me here. Thank you in advance!
my best guess is that the "old style rar" name algorithm is as follows:
function rar_int_to_string(int $i):string{
$c="r";
while($i>99){
++$c;
$i-=99;
}
if($i<10){
$c=$c."0";
}
return $c.$i;
}
which produces
r01>r02>r03>r04>r05>r06>r07>r08>r09>r10>r11>r12>r13>r14>r15>r16>r17>r18>r19>r20>r21>r22>r23>r24>r25>r26>r27>r28>r29>r30>r31>r32>r33>r34>r35>r36>r37>r38>r39>r40>r41>r42>r43>r44>r45>r46>r47>r48>r49>r50>r51>r52>r53>r54>r55>r56>r57>r58>r59>r60>r61>r62>r63>r64>r65>r66>r67>r68>r69>r70>r71>r72>r73>r74>r75>r76>r77>r78>r79>r80>r81>r82>r83>r84>r85>r86>r87>r88>r89>r90>r91>r92>r93>r94>r95>r96>r97>r98>r99>s01>s02>s03>s04>s05>s06>s07>s08>s09>s10>s11>s12>s13>s14>s15>s16>s17>s18>s19>s20>s21>s22>s23>s24>s25>s26>s27>s28>s29>s30>s31>s32>s33>s34>s35>s36>s37>s38>s39>s40>s41>s42>s43>s44>s45>s46>s47>s48>s49>s50>s51>s52>s53>s54>s55>s56>s57>s58>s59>s60>s61>s62>s63>s64>s65>s66>s67>s68>s69>s70>s71>s72>s73>s74>s75>s76>s77>s78>s79>s80>s81>s82>s83>s84>s85>s86>s87>s88>s89>s90>s91>s92>s93>s94>s95>s96>s97>s98>s99>t01>t02>t03>t04>t05>t06>t07>t08>t09>t10>t11>t12>t13>t14>t15>t16>t17>t18>t19>t20>t21>t22>t23>t24>t25>t26>t27>t28>t29>t30>t31>t32>t33>t34>t35>t36>t37>t38>t39>t40>t41>t42>t43>t44>t45>t46>t47>t48>t49>t50>t51>t52>t53>t54>t55>t56>t57>t58>t59>t60>t61>t62>t63>t64>t65>t66>t67>t68>t69>t70>t71>t72>t73>t74>t75>t76>t77>t78>t79>t80>t81>t82>t83>t84>t85>t86>t87>t88>t89>t90>t91>t92>t93>t94>t95>t96>t97>t98>t99>u01>u02>u03>u04>u05>u06>u07>u08>u09>u10>u11>u12>u13>u14>u15>u16>u17>u18>u19>u20>u21>u22>u23>u24>u25>u26>u27>u28>u29>u30>u31>u32>u33>u34>u35>u36>u37>u38>u39>u40>u41>u42>u43>u44>u45>u46>u47>u48>u49>u50>u51>u52>u53>u54>u55>u56>u57>u58>u59>u60>u61>u62>u63>u64>u65>u66>u67>u68>u69>u70>u71>u72>u73>u74>u75>u76>u77>u78>u79>u80>u81>u82>u83>u84>u85>u86>u87>u88>u89>u90>u91>u92>u93>u94>u95>u96>u97>u98>u99>v01>v02>v03>v04>v05>v06>v07>v08>v09>v10>v11>v12>v13>v14>v15>v16>v17>v18>v19>v20>v21>v22>v23>v24>v25>v26>v27>v28>v29>v30>v31>v32>v33>v34>v35>v36>v37>v38>v39>v40>v41>v42>v43>v44>v45>v46>v47>v48>v49>v50>v51>v52>v53>v54>v55>v56>v57>v58>v59>v60>v61>v62>v63>v64>v65>v66>v67>v68>v69>v70>v71>v72>v73>v74>v75>v76>v77>v78>v79>v80>v81>v82>v83>v84>v85>v86>v87>v88>v89>v90>v91>v92>v93>v94>v95>v96>v97>v98>v99>w01>w02>w03>w04>w05>w06>w07>w08>w09>w10>w11>w12>w13>w14>w15>w16>w17>w18>w19>w20>w21>w22>w23>w24>w25>w26>w27>w28>w29>w30>w31>w32>w33>w34>w35>w36>w37>w38>w39>w40>w41>w42>w43>w44>w45>w46>w47>w48>w49>w50>w51>w52>w53>w54>w55>w56>w57>w58>w59>w60>w61>w62>w63>w64>w65>w66>w67>w68>w69>w70>w71>w72>w73>w74>w75>w76>w77>w78>w79>w80>w81>w82>w83>w84>w85>w86>w87>w88>w89>w90>w91>w92>w93>w94>w95>w96>w97>w98>w99>x01>x02>x03>x04>x05>x06>x07>x08>x09>x10>x11>x12>x13>x14>x15>x16>x17>x18>x19>x20>x21>x22>x23>x24>x25>x26>x27>x28>x29>x30>x31>x32>x33>x34>x35>x36>x37>x38>x39>x40>x41>x42>x43>x44>x45>x46>x47>x48>x49>x50>x51>x52>x53>x54>x55>x56>x57>x58>x59>x60>x61>x62>x63>x64>x65>x66>x67>x68>x69>x70>x71>x72>x73>x74>x75>x76>x77>x78>x79>x80>x81>x82>x83>x84>x85>x86>x87>x88>x89>x90>x91>x92>x93>x94>x95>x96>x97>x98>x99>y01>y02>y03>y04>y05>y06>y07>y08>y09>y10>y11>y12>y13>y14>y15>y16>y17>y18>y19>y20>y21>y22>y23>y24>y25>y26>y27>y28>y29>y30>y31>y32>y33>y34>y35>y36>y37>y38>y39>y40>y41>y42>y43>y44>y45>y46>y47>y48>y49>y50>y51>y52>y53>y54>y55>y56>y57>y58>y59>y60>y61>y62>y63>y64>y65>y66>y67>y68>y69>y70>y71>y72>y73>y74>y75>y76>y77>y78>y79>y80>y81>y82>y83>y84>y85>y86>y87>y88>y89>y90>y91>y92>y93>y94>y95>y96>y97>y98>y99>z01>z02>z03>z04>z05>z06>z07>z08>z09>z10>z11>z12>z13>z14>z15>z16>z17>z18>z19>z20>z21>z22>z23>z24>z25>z26>z27>z28>z29>z30>z31>z32>z33>z34>z35>z36>z37>z38>z39>z40>z41>z42>z43>z44>z45>z46>z47>z48>z49>z50>z51>z52>z53>z54>z55>z56>z57>z58>z59>z60>z61>z62>z63>z64>z65>z66>z67>z68>z69>z70>z71>z72>z73>z74>z75>z76>z77>z78>z79>z80>z81>z82>z83>z84>z85>z86>z87>z88>z89>z90>z91>z92>z93>z94>z95>z96>z97>z98>z99>aa01>aa02>aa03>aa04>aa05>aa06>aa07>aa08>aa09>aa10>aa11>aa12>aa13>aa14>aa15>aa16>aa17>aa18>aa19>aa20>aa21>aa22>aa23>aa24>aa25>aa26>aa27>aa28>aa29>aa30>aa31>aa32>aa33>aa34>aa35>aa36>aa37>aa38>aa39>aa40>aa41>aa42>aa43>aa44>aa45>aa46>aa47>aa48>aa49>aa50>aa51>aa52>aa53>aa54>aa55>aa56>aa57>aa58>aa59>aa60>aa61>aa62>aa63>aa64>aa65>aa66>aa67>aa68>aa69>aa70>aa71>aa72>aa73>aa74>aa75>aa76>aa77>aa78>aa79>aa80>aa81>aa82>aa83>aa84>aa85>aa86>aa87>aa88>aa89>aa90>aa91>aa92>aa93>aa94>aa95>aa96>aa97>aa98>aa99>ab01>ab02>ab03>ab04>ab05>ab06>ab07>ab08->ab09
and so on, with "ab09" meaning "file chunk #999"

checkinf if date is real using php

I'm trying to check if a date is real, it must return true, and if not, it must return false.
It does not seemes to work when I write 35-02-2012 (Date format dd-mm-yy) it return true, but I was expecting false, I do not know where I'm wrong.
below is my function
function isItRealDate($date) {
if ($date == '') {
return false;
} else {
$rxDatePattern = '/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/'; //Declare Regex
$dtArray = preg_match($rxDatePattern, $date); // is format OK?
if ($dtArray == '0') {
return false;
} else {
$tableau_date = explode('-', $date);
//Checks for dd-mm-yyyy format.
$dtMonth = $tableau_date[1];
$dtDay = $tableau_date[0];
$dtYear = $tableau_date[2];
if ($dtMonth < 1 || $dtMonth > 12) {
return false;
} elseif ($dtDay < 1 || $dtDay > 31) {
return false;
} elseif (($dtMonth == 4 || $dtMonth == 6 || $dtMonth == 9 || $dtMonth == 11) && $dtDay == 31) {
return false;
} elseif ($dtMonth == 2) {
$isleap = ($dtYear % 4 == 0 && ($dtYear % 100 != 0 || $dtYear % 400 == 0));
if ($dtDay > 29 || ($dtDay == 29 && !$isleap)) {
return false;
} else {
return true;
}
}
}
}
}
anykind of help will be much appreciated
If you want something that just works, use checkdate().
As suggested by Ibrahim, use:
function isItRealDate($date) {
if(preg_match("#^(\d{1,2})\-(\d{1,2})\-(\d{1,4})$#", $date, $match)){
//regex could match 99-99-9999 - checkdate will take care.
return checkdate($match[2], $match[1], $match[3]);
}
return false;
}
This will work for ANY (valid) date between 1-1-1 and 31-12-9999

New Error.. Cant Figure This One Out

My timestamp code worked well before i put it in a function.. Get this parse error on line 55, ive marked the line number with "// LINE 55", cant figure it out :(
Here's my error:
Parse error: syntax error, unexpected '.' in C:\wamp\www\flueforumdk\config.php on line 55
Here's the calling of the function:
$GET_UNIX_STAMP_FROM_DB = $art[tidspunkt];
$UNIX_TIME_SECONDS = $GET_UNIX_STAMP_FROM_DB;
echo timestamp_converter($UNIX_TIME_SECONDS);
Here's my function code:
## TIMESTAMP CONVERTER FUNCTION
function timestamp_converter($UNIX_TIME_SECONDS){
// UDREGNING FRA UNIX TIME
$tid = time() - $UNIX_TIME_SECONDS;
$timer = floor($tid/3600);
$minutter = floor($tid/60);
$dage = floor($timer / 24);
$uge = floor($dage / 7);
$month = floor($dage / 30.5);
$aar = floor($dage / 365);
if($tid < 60){
echo"<b>$tid</b> sekunder";
} elseif ($tid > 60){
echo"";
}
if($minutter == 0){
echo"";
} elseif ($minutter < 60){
if($minutter == 1){
echo"<b>$minutter</b> minut";
}else{
echo"<b>$minutter</b> minutter";
}
}
if($timer == 0){
echo"";
} elseif ($timer < 24){
if($timer == 1){
echo"<b>$timer</b> time";
}else{
echo"<b>$timer</b> timer";
}
}
//LINE 55 if($dage == 0){
echo"";
} elseif ($dage < 7){
if($dage == 1){
echo"<b>$dage</b> dag";
}else{
echo"<b>$dage</b> dage";
}
}
if($uge == 0){
echo"";
} elseif ($uge < 4){
if($uge == 1){
echo"<b>$uge</b> uge";
}else{
echo"<b>$uge</b> uger";
}
}
if($month == 0){
echo"";
} elseif ($month < 12){
if($month == 1){
echo"<b>$month</b> måned";
}else{
echo"<b>$month</b> måneder";
}
}
if($aar == 0){
echo"";
} elseif ($aar > 0){
if($aar == 1){
echo"<b>$aar</b> år";
}else{
echo"<b>$aar</b> år";
}
}
}

Given an IP address and a Subnet, how do I calculate the range of IPs using php

I have the following code snippet and im trying to detect if an IP address falls into a certain range. Most of the time I have the IP address and the subnet but sometimes I just have the IP address only.
<?php
function CalculateRange($IP,$Subnet=""){
//Calculate subnetmax
if ($Subnet==""){
}
//Calculate max IP
return $MaxIP;
}
//--- IP range
$IPRange = array (
array("address"=>"196.201.26.0","subnet"=>"255.255.252.0"),
array("address"=>"196.202.43.0","subnet"=>"255.255.0.0"),
array("address"=>"196.203.44.0","subnet"=>"255.255.128.0"),
);
//Display MaxIP for each IP and Subnet
foreach ($IPRange as $pair) {
echo "<p>";
echo "For IP:{$pair['address']} with Subnet:{$pair['subnet']}.";
echo "MaxIP is ";
echo CalculateRange($pair['address'],$pair['subnet']);
echo "</p>";
}
?>
My question is how do I calculate MaxIP for the IP and Subnet combo?
<?php
$subnet = "255.255.252.0"; // provide your subnet here
$ip = "191.168.31.0"; // provide your ip here
$ip_blocks = explode(".", $ip);
$mask_blocks = explode('.', $subnet);
$ip_class = '';
if($ip_blocks[0] > 0 && $ip_blocks[0] <= 126) {
$ip_class = 'a';
} elseif($ip_blocks[0] >= 128 && $ip_blocks[0] <= 191) {
$ip_class = 'b';
} elseif($ip_blocks[0] >= 192 && $ip_blocks[0] <= 223) {
$ip_class = 'c';
} elseif($ip_blocks[0] >= 224 && $ip_blocks[0] <= 239) {
$ip_class = 'd';
} elseif($ip_blocks[0] >= 240 && $ip_blocks[0] <= 255) {
$ip_class = 'e';
} else {
die('wrong ip');
}
$subnet_class= '';
if($mask_blocks[0]=='255' && $mask_blocks[1] < '255') {
$subnet_class = 'a';
} elseif($mask_blocks[0]=='255' && $mask_blocks[1]=='255' && $mask_blocks[2] < '255') {
$subnet_class = 'b';
} else {
$subnet_class = 'c';
}
echo 'subnet class: '.$subnet_class.'<br />';
$min_ip = '';
$max_ip = '';
if($subnet_class=='b') {
if($ip_class == $subnet_class) {
$min_ip = "$ip_blocks[0].$ip_blocks[1].1";
$max_ip = "$ip_blocks[0].$ip_blocks[1].255";
echo 'minimum: '.$min_ip.' - maximum: '.$max_ip;
} else {
echo 'Error! IP does not lie in this range. ';
exit;
}
}
// you can continue for other subnet masks as well.. as this is only for subnet for class b
?>
The below worked perfectly
function isInRange() {
//--- IP range
$IPRange = array (
array("address"=>"197.207.35.238","subnet"=>"255.255.0.0"),
array("address"=>"41.207.44.232","subnet"=>"255.255.10.0"),
array("address"=>"40.207.44.250","subnet"=>"255.255.0.0")
);
foreach ($IPRange as $pair) {
//Check if we have subnet mask
if ($pair['subnet']!='') {
// simple example
$bcast = ip2long($_SERVER['REMOTE_ADDR']);
$smask = ip2long($pair['subnet']);
$nmask = $bcast & $smask;
$SourceStartIP = long2ip($nmask);
if($SourceStartIP==$pair['address']) {
//This is in range
return true;
}
} else {
//--- The header matches something in the fixed list
if ($pair['address'] == $_SERVER['REMOTE_ADDR']) {
return true;
}
}
}
return false;
}

PHP echo only 1 higher or 1 lower then current hour

So I'm having this issue where I want to echo only the things that are 1 higher or 1 lower then the current hour. Example if current hour = 14 only echo 13, 14 and 15
Anyone have a clue on how I can do this?
<?php
mysql_connect("*******", "******", "**");
if(!mysql_select_db("deb67423_dj")) {
die("<b>Mislukt!</b><br>Het verbinden met de database is mislukt.");
}
$textweek = date("D");
if($textweek == "Mon") {
$dag = 0;
} else
if($textweek == "Tue") {
$dag = 1;
} else
if($textweek == "Wed") {
$dag = 2;
} else
if($textweek == "Thu") {
$dag = 3;
} else
if($textweek == "Fri") {
$dag = 4;
} else
if($textweek == "Sat") {
$dag = 5;
} else
if($textweek == "Sun") {
$dag = 6;
}
$textuur = date("G");
$SQL = "SELECT * FROM rooster WHERE dag = '$dag'";
$result = mysql_query($SQL);
echo "<table>";
while ($row = mysql_fetch_assoc($result)) {
echo "<td> Hiervoor: DJ ".$row['gebruikersnaam']. "</td>";
}
echo "</table>";
$currHour = date('G');
echo $currHour - 1, ', ', $currHour, ', ', $currHour + 1;
Take note that $currHour can be 0 and you will have to take care of this "special" case... But I think this snippet will get you started. See the PHP date() documentation for more help.

Categories