<?php
/*
* Emerit Ticket (setup script to give 20 merits to open evening peeps)
* Tested up to 20000 rows
* URL SCHEME: /?id=8888,8887,8886,8885&merits=20
* Database variables need to be set for your own environment
*/
# Local timezone
define('TIME_ZONE','Europe/London');
# Database driver /database name /charset
define('DB_DSN', 'mysql:host=localhost;dbname=Emerit;charset=utf8');
# Database username
define('DB_USER', 'root');
# Database password
define('DB_PASSWORD', 'admin');
# Device ID
define('DEVICE_ID', 'SCRIPT');
# Student ID
$getStudentID = filter_input(INPUT_GET,"id",FILTER_SANITIZE_STRING);
# Create an array from comma delimited get input
$getStudentIDArray = explode(',', $getStudentID);
# Amount of merits to award
$getAmount = filter_input(INPUT_GET,"merits",FILTER_SANITIZE_STRING);
/*
* PDO connection block
* Prints error & dies if connection can't be made
*/
try
{
$CONN = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
$CONN->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
# MYSQL MyISAM doesn't support transactions
$CONN->rollback();
die($CONN = null);
}
/*
* Get date & time
* Sets datetime for locality
* @param string local timezone
* @return array date( d-m ) & time( H:i )
*/
function dateTimeNow($TZ)
{
$timeZone = new DateTimeZone($TZ);
$dateTime = new DateTime();
$dateTime->setTimezone($timeZone);
$dateNow = $dateTime->format('d-m');
$timeNow = $dateTime->format('H:i');
return array(
"date" => $dateNow,
"time" => $timeNow
);
}
# Access array with $now['date'] & $now['time']
$now = (dateTimeNow(TIME_ZONE));
# Strictly stated single row INSERT example
// $Statement = $CONN->prepare("INSERT INTO EMerits(EMeritNo, StudentID, Time, Date, DeviceID, DateUploaded, TimeUploaded) VALUES(:EMeritNo, :StudentID, :Time, :Date, :DeviceID, :DateUploaded, :TimeUploaded)");
// $Statement->execute(array("EMeritNo" => null,
// "StudentID" => $STUDENTID,
// "Time" => $now['time'],
// "Date" => $now['date'],
// "DeviceID" => "SCRIPT",
// "DateUploaded" => $now['date'],
// "TimeUploaded" => $now['time']));
$merits = array(
#array(null, '8888', $now['time'], $now['date'], 'SCRIPT', $now['date'], $now['time'])
);
# fill merits array with student id * specified merits quantity
foreach ($getStudentIDArray as $getStudentEl) {
$studentEL = $getStudentEl;
for($i=0; $i < $getAmount; $i++)
{
$merits[] = array(null, $studentEL, $now['time'], $now['date'], DEVICE_ID, $now['date'], $now['time']);
}
}
# VALUES from $merits array for each insert
$params = implode(",", array_fill(0, count($merits[0]), "?"));
# SQL query for a single table row / merit
$sql = "INSERT INTO EMerits VALUES ($params)";
#prepare statement
$Statement = $CONN->prepare($sql);
# Execute 1 insert statement at a time
foreach ($merits as $merit)
{
$Statement->execute($merit);
}
# Arbitrary feedback
echo "<pre>";
echo "Student(s) Id: ";
print_r($getStudentIDArray);
echo "<br />";
echo "Amount of Merits: " . $getAmount;
echo "</pre>";
Comments