fmwebschool.com
Top Experts [learn more]Top 4-10
webko

9743 K
bandmandq

2458 K
Genx

1525 K
4. tcmeyers
5. kbata
6. Martie
7. Hammerton
8. rrenfrow
9. bneeman
10. plegler
Welcome, Guest. Please login or register.
April 18, 2015, 06:03:54 PM

Login with username, password and session length
Search:     Advanced search
FMWebschool releases more educational FMStudio webinars - check them out here:
http://www.fmwebschool.com/webinars.php
27871 Posts in 6165 Topics by 1525 Members
Latest Member: alkyred
* Home Help Search Calendar Login Register
+  fmwebschool.com
|-+  Recent Posts
Pages: [1] 2 3 ... 10

 1 
 on: April 09, 2015, 04:29:11 PM 
Started by PhanMan - Last post by PhanMan
I got pretty far with your suggestion.  thanks.  Now my problem is trying to setup an if elseif statement for the index.php page.  My original code was if user is already logged in, find the userID  and display the data.  Else log the user in if the user id, password and status="active" matches.  Now I'm trying to incorporate elseif where if the userid and password matches but the status is inactive, reveal another section of the page.  if the user is set to active the login works.  however if the user is set to expired, it displays the login unsuccessful message and in the url, it says "Code=401&errorMsg=No+records+match+the+request" which I exist because i manually set a user to inactive to test.

Here is my current code:


Code:
<?php if(!session_id()) session_start(); ?>
<?php require_once('../../Connections/users.php');?>

<?php
if 
(isset(
$_SESSION['logged_in']) and ($_SESSION['logged_in'])) {  
// If already logged in, do a FIND on NetWareUserID in the session var

$login_find $users->newFindCommand('users');
$login_findCriterions = array('userID'=>'=='.fmsEscape($_SESSION['userID']),);
foreach($login_findCriterions as $key=>$value) {
$login_find->AddFindCriterion($key,$value);
}

fmsSetPage($login_find,'login',1); 

$login_result $login_find->execute(); 

if(FileMaker::isError($login_result)) fmsTrapError($login_result,"error_login.php"); 

fmsSetLastPage($login_result,'login',1); 

$login_row current($login_result->getRecords());

$login__taxpaymentscompanyinfo_portal fmsRelatedRecord($login_row'taxpayments_companyinfo');
 

$login_row current($login_result->getRecords());


} elseif (
$_SESSION['logged_in'] == null)
 {
// Not logged in, deal with it from POST data:

$_SESSION['logged_in'] = false// default until proven OK
$_SESSION['userID'] = "";

$passwordhash crypt($_POST['password']);
$login_find $users->newFindCommand('users');
$login_findCriterions = array('userID'=>'=='.fmsEscape($_POST['userID']),'status'=>'='.'Active',);
foreach(
$login_findCriterions as $key=>$value) {
    
$login_find->AddFindCriterion($key,$value);
}

fmsSetPage($login_find,'login',1); 

$login_result $login_find->execute(); 

if(FileMaker::isError($login_result)) fmsTrapError($login_result,"error_login.php"); 

fmsSetLastPage($login_result,'login',1); 

$login_row current($login_result->getRecords());

if ( crypt($_POST['password'], $login_row->getField('password')) == $login_row->getField('password') ) {
// this is true if the POSTed password matches
$_SESSION['logged_in'] = true;
$_SESSION['userID'] = $login_row->getField('userID');
$_SESSION['full_name'] = $login_row->getField('full_name');
$_SESSION['first_name'] = $login_row->getField('first_name');
$_SESSION['last_name'] = $login_row->getField('last_name');
$_SESSION['company'] = $login_row->getField('company');
//Now also create a logging record to capture date / time logged in
$loginTimestamp date("m/d/Y");
$loginResult "Yes";
//And insert to the logging table in the database with UserIS, Timestamp and whatever other data
$new_record_add $users->newAddCommand('users_login_count');
$new_record_fields = array('userID'=>$_POST['userID'],'logged_in'=>$loginTimestamp,'successful'=>$loginResult,);
foreach(
$new_record_fields as $key=>$value) {
    
$new_record_add->setField($key,$value);
}

$new_record_result $new_record_add->execute(); 

if(
FileMaker::isError($new_record_result)) fmsTrapError($new_record_result,"error.php"); 

$new_record_row current($new_record_result->getRecords()); 

$edit_record_edit $users->newEditCommand('users',$login_row->getRecordId());
$edit_record_fields = array('last_logged_in'=>$loginTimestamp,);
foreach(
$edit_record_fields as $key=>$value) {
    
$edit_record_edit->setField($key,$value);
}

$edit_record_result $edit_record_edit->execute(); 

if(
FileMaker::isError($edit_record_result)) fmsTrapError($edit_record_result,"error.php"); 

$edit_record_row current($edit_record_result->getRecords()); 

}

else
 {
// Not logged in, deal with it from POST data:

$_SESSION['logged_in'] = false// default until proven OK
$_SESSION['userID'] = "";


$passwordhash crypt($_POST['password']);
$login_find $users->newFindCommand('users');
$login_findCriterions = array('userID'=>'=='.fmsEscape($_POST['userID']),'status'=>'='.'Expired',);
foreach(
$login_findCriterions as $key=>$value) {
    
$login_find->AddFindCriterion($key,$value);
}

fmsSetPage($login_find,'login',1); 

$login_result $login_find->execute(); 

if(FileMaker::isError($login_result)) fmsTrapError($login_result,"error_login.php"); 

fmsSetLastPage($login_result,'login',1); 

$login_row current($login_result->getRecords());

if ( crypt($_POST['password'], $login_row->getField('password')) == $login_row->getField('password') ) {
// this is true if the POSTed password matches
$_SESSION['logged_in_expired'] = true;
$_SESSION['userID'] = $login_row->getField('userID');
$_SESSION['full_name'] = $login_row->getField('full_name');
$_SESSION['first_name'] = $login_row->getField('first_name');
$_SESSION['last_name'] = $login_row->getField('last_name');
$_SESSION['company'] = $login_row->getField('company');
//Now also create a logging record to capture date / time logged in
$loginTimestamp date("m/d/Y");
$loginResult "Yes";
//And insert to the logging table in the database with UserIS, Timestamp and whatever other data
$new_record_add $users->newAddCommand('users_login_count');
$new_record_fields = array('userID'=>$_POST['userID'],'logged_in'=>$loginTimestamp,'successful'=>$loginResult,);
foreach(
$new_record_fields as $key=>$value) {
    
$new_record_add->setField($key,$value);
}

$new_record_result $new_record_add->execute(); 

if(
FileMaker::isError($new_record_result)) fmsTrapError($new_record_result,"error.php"); 

$new_record_row current($new_record_result->getRecords()); 

$edit_record_edit $users->newEditCommand('users',$login_row->getRecordId());
$edit_record_fields = array('last_logged_in'=>$loginTimestamp,);
foreach(
$edit_record_fields as $key=>$value) {
    
$edit_record_edit->setField($key,$value);
}

$edit_record_result $edit_record_edit->execute(); 

if(
FileMaker::isError($edit_record_result)) fmsTrapError($edit_record_result,"error.php"); 

$edit_record_row current($edit_record_result->getRecords()); 

}
}

?>

 2 
 on: April 09, 2015, 03:28:36 PM 
Started by PhanMan - Last post by webko
I'm not sure I understand that question...

The insert to the Logging table should happen when the login is successful, and the session vars are created - in this case, that is at the end of the code on the login page.

*if* you wanted to log every time someone accessed the main index page, then you could do a similar insert there as well.

Cheers

Webko

 3 
 on: April 08, 2015, 08:17:30 AM 
Started by PhanMan - Last post by PhanMan
The place for this is straight after you have set the session variables for the login - add a section to insert data to a logging table - I don't have the exact syntax to hand but:

Code:
if ( crypt($_POST['password'], $login_row->getField('password')) == $login_row->getField('password') ) {
// this is true if the POSTed password matches
$_SESSION['logged_in'] = true;
$_SESSION['userID'] = $login_row->getField('userID');
$_SESSION['full_name'] = $login_row->getField('full_name');
$_SESSION['first_name'] = $login_row->getField('first_name');
$_SESSION['last_name'] = $login_row->getField('last_name');
$_SESSION['company'] = $login_row->getField('company');
//Now also create a logging record to capture date / time logged in
$loginTimestamp = date("Y-m-d H:i:s");
//And insert to the logging table in the database with UserIS, Timestamp and whatever other data

}

Would put the posting code to the login table on this index page at the end of the rest of the code?

 4 
 on: April 07, 2015, 04:13:11 PM 
Started by PhanMan - Last post by webko
The place for this is straight after you have set the session variables for the login - add a section to insert data to a logging table - I don't have the exact syntax to hand but:

Code:
if ( crypt($_POST['password'], $login_row->getField('password')) == $login_row->getField('password') ) {
// this is true if the POSTed password matches
$_SESSION['logged_in'] = true;
$_SESSION['userID'] = $login_row->getField('userID');
$_SESSION['full_name'] = $login_row->getField('full_name');
$_SESSION['first_name'] = $login_row->getField('first_name');
$_SESSION['last_name'] = $login_row->getField('last_name');
$_SESSION['company'] = $login_row->getField('company');
//Now also create a logging record to capture date / time logged in
$loginTimestamp = date("Y-m-d H:i:s");
//And insert to the logging table in the database with UserIS, Timestamp and whatever other data

}

 5 
 on: April 07, 2015, 11:23:26 AM 
Started by PhanMan - Last post by PhanMan
I would probably add a new field in the login table, and then do an edit to it if the login is successful before the redirect to the index page...

And you would set the now date/time using the date function in php

$loginTimestamp = date("Y-m-d H:i:s");

Hope this helps

Webko

Thanks for the reply Webko but I'm not sure where to start on this. 

My login page is just a simple form with userID and password fields.

My index.php is finding the recordset. 

Code:
<?php
if(!session_id()) session_start(); 
if(isset(
$_SESSION['logged_in']) and ($_SESSION['logged_in'])) {  
// If already logged in, do a FIND on NetWareUserID in the session var

require_once('../../Connections/users.php');

$login_find $users->newFindCommand('users');
$login_findCriterions = array('userID'=>'=='.fmsEscape($_SESSION['userID']),);
foreach($login_findCriterions as $key=>$value) {
$login_find->AddFindCriterion($key,$value);
}

fmsSetPage($login_find,'login',1); 

$login_result $login_find->execute(); 

if(FileMaker::isError($login_result)) fmsTrapError($login_result,"error_login.php"); 

fmsSetLastPage($login_result,'login',1); 

$login_row current($login_result->getRecords());

$login__taxpaymentscompanyinfo_portal fmsRelatedRecord($login_row'taxpayments_companyinfo');
 

$login_row current($login_result->getRecords());


} else {
// Not logged in, deal with it from POST data:

$_SESSION['logged_in'] = false// default until proven OK
$_SESSION['userID'] = "";


require_once('../../Connections/users.php');

$passwordhash crypt($_POST['password']);
$login_find $users->newFindCommand('users');
$login_findCriterions = array('userID'=>'=='.fmsEscape($_POST['userID']),'status'=>'='.'Active',);
foreach(
$login_findCriterions as $key=>$value) {
    
$login_find->AddFindCriterion($key,$value);
}

fmsSetPage($login_find,'login',1); 

$login_result $login_find->execute(); 

if(FileMaker::isError($login_result)) fmsTrapError($login_result,"error_login.php"); 

fmsSetLastPage($login_result,'login',1); 

$login_row current($login_result->getRecords());

if ( crypt($_POST['password'], $login_row->getField('password')) == $login_row->getField('password') ) {
// this is true if the POSTed password matches
$_SESSION['logged_in'] = true;
$_SESSION['userID'] = $login_row->getField('userID');
$_SESSION['full_name'] = $login_row->getField('full_name');
$_SESSION['first_name'] = $login_row->getField('first_name');
$_SESSION['last_name'] = $login_row->getField('last_name');
$_SESSION['company'] = $login_row->getField('company');

}
}
?>

 6 
 on: April 06, 2015, 07:43:12 PM 
Started by PhanMan - Last post by webko
I would probably add a new field in the login table, and then do an edit to it if the login is successful before the redirect to the index page...

And you would set the now date/time using the date function in php

$loginTimestamp = date("Y-m-d H:i:s");

Hope this helps

Webko

 7 
 on: April 06, 2015, 12:03:06 PM 
Started by PhanMan - Last post by PhanMan
I need want to track when a user was last logged into the system.  I have a login.php and once the user logs in, it takes them to index.php.  What is the best way to pass the date into the database?

 8 
 on: March 31, 2015, 05:17:18 PM 
Started by macwizard - Last post by macwizard
Webko,

Thank you very much for your reply.  I substituted your code, but unfortunately it did not solve the issue.  It is working a touch faster now in Firefox and it now works in Safari as well (in Lion 10.7.5) but Chrome on the Mac and Firefox and IE on Windows 7 Pro continue to fail. 

As before, the further_details_submit page is instantly adding data to two fields in FileMaker, but not succeeding in redirecting to the next page (IOW the next page fails to load).  I thought I should provide the code for this page that fails to load (many thanks):

<?php  require_once('Connections/CNRC_email_login.php');

$sou_find = $CNRC_email_login->newFindCommand('ExamRegDetails');
$sou_findCriterions = array('-recid'=>$_REQUEST['-recid'],);
foreach($sou_findCriterions as $key=>$value) {
    $sou_find->AddFindCriterion($key,$value);
}

fmsSetPage($sou_find,'sou',10);

$sou_result = $sou_find->execute();

if(FileMaker::isError($sou_result)) fmsTrapError($sou_result,"error.php");

fmsSetLastPage($sou_result,'sou',10);

$sou_row = current($sou_result->getRecords());

$sou__Webdata_portal = fmsRelatedRecord($sou_row, 'Web_data');
$sou__PaymentDetails2_portal = fmsRelatedRecord($sou_row, 'Payment_Details 2');
$sou__ExamPaymentDate_portal = fmsRelatedRecord($sou_row, 'ExamPayment_Date');

 // FMStudio v1.02 - do not remove comment, needed for DreamWeaver support  ?>
 
<style type="text/css">
<!--
.style3 {
   font-family: Verdana, Arial, Helvetica, sans-serif;
   font-weight: normal;
}
-->
</style>
<script src="SpryAssets/SpryValidationCheckbox.js" type="text/javascript"></script>
<script src="SpryAssets/SpryValidationSelect.js" type="text/javascript"></script>
<link href="SpryAssets/SpryValidationCheckbox.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.style5 {
   font-size: 18px;
   font-style: italic;
   color: #FF0000;
   font-weight: bold;
}
#LeftVerdana {
   text-align: left;
}
#BoldVerdanaLarge {
   font-weight: bold;
}
HR body form table tr th {
   text-align: left;
}
#lv1 {
   text-align: left;
   font-family: Verdana, Geneva, sans-serif;
   font-weight: normal;
}
-->
</style>
<link href="SpryAssets/SpryValidationSelect.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.style6 {font-size: x-large}
.style7 {
   font-size: 24px;
   font-weight: bold;
}
.style8 {
   font-family: Verdana, Arial, Helvetica, sans-serif;
   font-weight: bold;
   font-size: 24px;
}
.style9 {
   font-family: Verdana, Arial, Helvetica, sans-serif;
   font-size: 14px;
}
.style10 {
   font-family: Verdana, Arial, Helvetica, sans-serif;
   font-weight: bold;
   font-size: 14px;
}
.style12 {
   font-family: Verdana, Arial, Helvetica, sans-serif;
   font-weight: normal;
   font-size: 16px;
}
.style13 {font-size: 24px}
.style14 {font-size: 16px}
-->
</style>
<p><img src="Images/Jakob-blowing-BubblesLONG2.gif" width="955" height="130"></p>
<h2 class="style3"><span class="style13" id="BoldVerdanaLarge">Statement of Understanding</span> <span class="style5">All Applicants Must Complete This Form</span></h2>
<form name="sou" method="post" action="sou_submit.php">
<table width="958">
    <tr>
      <th colspan="3"><p align="left" class="style12">        I hereby apply for certification with the Canadian Network for Respiratory Care (CNRC) and understand that certification depends on fulfilling the specified eligibility requirements successfully.

         

          <span id="LeftVerdana">I authorize CNRC to make any inquiries deemed necessary to verify the information I have provided with respect to my application for certification.

         

          If certified, I understand that my name will be included in CNRC's official records and may be published in CNRC approved asthma or respiratory-related newsletters or journals. Further, I understand that information gathered by CNRC through the certification process may be used as group data for statistical purposes and program evaluation.

         

      To the best of my knowledge, the information on this application is complete and accurate.</span></p></th>
    </tr>
    <tr>
      <th height="30" colspan="2"><div align="right" class="style9">
        <div align="right">By checking the adjacent box, I am agreeing with this Statement of Understanding.</div>
      </div></th>
      <td width="287" height="30"><span id="s_o_u">
        <label>
        <input name="StatementOfUnderstanding" type="checkbox" value="I agree" id="StatementOfUnderstanding">
        </label>
      <span class="checkboxRequiredMsg">Please make a selection.</span></span></td>
    </tr>
    <tr>
      <th colspan="3" id="lv1"><p><span class="style7">

        Consent to Release Information</span><br class="style6" />
       

        <span class="style14">Please be advised that CNRC provides aggregate  certification examination results to the approved Asthma, COPD and  Respiratory Educator&rsquo;s Programs.</span></p>
        <p class="style14">Whether or not you choose to release your identity and certification status as further information to the approved

      Asthma, COPD and Respiratory Educator&rsquo;s Programs where you took your program, the following decision is required. </p></th>
    </tr>
    <tr>
      <th width="379">&nbsp;</th>
      <th width="276" height="30"><div align="right"><span class="style9">Consent to Release Information</span></div></th>
      <td height="30"><span id="spryselect1">
        <select name="InfoReleaseConsent" id="InfoReleaseConsent">
          <option selected="selected">Select a value</option>
          <option value="Yes, I give my consent.">Yes, I give my consent.</option>
          <option value="No, I do not give my consent.">No, I do not give my consent.</option>
        </select>
        <label for="InfoReleaseConsent"></label>
      <span class="selectRequiredMsg">Please select an item.</span></span></td>
    </tr>
    <tr>
      <th colspan="3"><p align="left"><span class="style8">Third Party Consent</span>

       

        <span class="style12">From time to time, CNRC releases names &amp; contact  information to other organizations for specific, one-time use activities  (e.g. a conference mailing for a CNRC member organization or a research  project). This information is never used for general solicitation  purposes, only for information CNRC deems to be of an educational  benefit to CAEs and CREs.</span></p>
        <p align="left" class="style12">If you select &quot;Yes, I give my consent&quot;, you  agree to having the Canadian Network for Respiratory Care (CNRC) provide  your name and address to third parties approved by CNRC. This  information will only be used to provide information that may be of  interest to you. </p>
      <p align="left" class="style12">If you select &quot;No, I do not give my consent&quot;,  the Canadian Network for Respiratory Care (CNRC) WILL NOT provide your  name and address to third parties approved by CNRC. </p></th>
    </tr>
    <tr>
      <th><div align="left"><span class="style10">Exam History</span><span id="spryselect3">
        <select name="Exam_History" id="Exam_History">
          <option>Select a value</option>
          <option value="first time">I am writing this exam for the first time.</option>
          <option value="rewrite">I am re-writing this exam.</option>
        </select>
        <label for="Exam_History"></label>
      <span class="selectRequiredMsg">Please select an item.</span></span></div></th>
      <th height="30"><div align="right"><span class="style10">Third Party Consent</span></div></th>
      <td height="30"><span id="spryselect2">
        <select name="ThirdPartyConsent" id="ThirdPartyConsent">
          <option selected="selected">Select a value</option>
          <option value="Yes to third party consent.">Yes, I give my consent.</option>
          <option value="No to third party consent.">No, I do not give my consent.</option>
        </select>
        <label for="ThirdPartyConsent"></label>
      <span class="selectRequiredMsg">Please select an item.</span></span></td>
    </tr>
    <tr>
      <th>&nbsp;</th>
      <th height="30">&nbsp;</th>
      <td height="30"><input type="submit" name="sou_submit" value="Continue..." />
      <input name="-recid" type="hidden" value="<?php echo $sou_row->getRecordId(); ?>" id="-recid"></td>
    </tr>
  </table>
</form>
</p>
<script type="text/javascript">
<!--
var sprycheckbox1 = new Spry.Widget.ValidationCheckbox("s_o_u", {validateOn:["change"]});
var spryselect1 = new Spry.Widget.ValidationSelect("spryselect1");
var spryselect2 = new Spry.Widget.ValidationSelect("spryselect2");
var spryselect3 = new Spry.Widget.ValidationSelect("spryselect3");
//-->
</script>

 9 
 on: March 31, 2015, 02:36:14 PM 
Started by macwizard - Last post by webko
I suspect the issue is the return between the first (one line) block of PHP, and the next section - a redirect doesn't like *anything* to be sent to the browser before the redirect... Try like:

Code:
<?php require_once('Connections/CNRC_email_login.php'); 

$further6_edit $CNRC_email_login->newEditCommand('ExamRegDetails',$_POST['-recid']);
$further6_fields = array('Exam_Location_1'=>$_REQUEST['Exam_Location_1'],'Exam_Location_Suggestion'=>$_REQUEST['Exam_Location_Suggestion'],'ExamLanguagePref'=>$_REQUEST['ExamLanguagePref'],'SpecialNeeds'=>$_REQUEST['SpecialNeeds'],);
foreach(
$further6_fields as $key=>$value) {
    
$further6_edit->setField($key,$value);
}

$further6_result $further6_edit->execute();

if(
FileMaker::isError($further6_result)) fmsTrapError($further6_result,"error.php");

$further6_row current($further6_result->getRecords());

fmsRedirect('stmt_o_u.php'.'?-recid='.$further6_row->getRecordId());

 
// FMStudio v1.0 - do not remove comment, needed for DreamWeaver support ?>


 10 
 on: March 30, 2015, 08:03:20 PM 
Started by macwizard - Last post by macwizard
Hello and thanks for your interest/assistance.  I'm using Dreamweaver 3 on Lion and FMStudio 1.9.0. I've had a registration system working for years that now is failing at one spot. 
I'm wondering if the newer browsers have tightened up their conditions for php sessions (I have very little knowledge of php). The first web page after creation of the db record uses the registration ID as a variable, and the failure happens where the redirect is using the unique Record ID. Would it be better to stick with the Reg_ID all the way through? 
The system still works on Firefox 36.0.1 on Lion, but not Safari 6.1.6 or Chrome.  Neither does it work on Windows 7 or 8.  If I cheat, all browsers on Lion and Windows 7 can properly load the failing webpage.  By "cheat", I mean if I manually enter the URL with the proper Record id at the end (e.g. https://cnrc.fmgateway.com/stmt_o_u.php?-recid=2064). BTW, there are underscores, not gaps in that URL.  Here's what has taken place up to that point:

1.  webuser authenticates,
2.  chooses an exam for registration
3.  submits qualifications
4.  the FileMaker registration record is created
5.  user provides two more fields of info and clicks Continue  (this should update the db and redirect to next page)
6.  database is updated properly regarding those two fields (redirect should now take place)
7.  webpage hangs and eventually times out instead of being redirected to the next page

Here is the code of the submit page:
<?php require_once('Connections/CNRC_email_login.php'); ?>
<?php
$further6_edit = $CNRC_email_login->newEditCommand('ExamRegDetails',$_POST['-recid']);
$further6_fields = array('Exam_Location_1'=>$_REQUEST['Exam_Location_1'],'Exam_Location_Suggestion'=>$_REQUEST['Exam_Location_Suggestion'],'ExamLanguagePref'=>$_REQUEST['ExamLanguagePref'],'SpecialNeeds'=>$_REQUEST['SpecialNeeds'],);
foreach($further6_fields as $key=>$value) {
    $further6_edit->setField($key,$value);
}

$further6_result = $further6_edit->execute();

if(FileMaker::isError($further6_result)) fmsTrapError($further6_result,"error.php");

$further6_row = current($further6_result->getRecords());

fmsRedirect('stmt_o_u.php'.'?-recid='.$further6_row->getRecordId());

 // FMStudio v1.0 - do not remove comment, needed for DreamWeaver support ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

Pages: [1] 2 3 ... 10
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!