<?php
// OPOZORILA: PROGRAM MORA BITI NUJNO POD IMENOM index.php IN POGANJATI SE MORA POD Apache 2, ki podpria RewriteEngine,
// ali pa, še bolše, s HTTp strežnikom nginx (ker je boljši). Če uporabite Apache, uporabite .htacess datoteko, za nginx pa uporabite priložen nginx conf fajl.
// Imeti moraš SQL uporabnika in bazo,
// (C) 2019 Anton Šijanec.
// inštalacija potrebuje composer. inštalirajte required dependence (dapphp/securimage)
// Uporaba dovoljena za učenje in za nekomercijalne namene, brez zaslužkov in z navedbo avtorja. Hvala!
// exit("Balkan ŠortLink je v pripravi. Pripravljen bo čez okoli 2 dni. Anton Šijanec, Projekt začet 20. januarja, predviden čas začetka obratovanja storitve
// je 23. januar 2019. Program bo odprtokoden in dostopen na mojem GitHub.com/sijanec/balkan-shortlink!");
session_start();
clearstatcache();
// ini_set('display_errors', 'On'); //debug
// error_reporting(E_ALL); //debug
$nadaljuj = "ja";
require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
$securimage = new Securimage();
$verzija = "0.1.19.09.18";
$log .= "Verzija: " . $verzija . "\n";
// definicije - uporabniškega vnosa ne preverjam, zato si ne naredite sql vrivanja (angl. sql injection) ali vrinjanja skript (ni htmlchars sanitizacije).
// drugače pa je program dokaj varen prej vrivanjem... upajmo... vsi ostali uporabniški vnosi so sanitizirani.
$servername = "127.0.0.1"; // domena, IP naslov oziroma ime gostitelja za dostop do MySQL ali ekvivalentne SQL podatkovne baze (strežnika)
$username = "shortlink"; // uporabniško ime za dostop do strežnika SQL
$password = "pesvort"; // geslo za dostop do strežnika SQL
$baza = "shortlink"; // podatkovna baza SQL v katero naj pišem - naredi jo pred zagonom programa
$tabela = "links"; // tabela, ki naj jo naredim v podatkovni bazi SQL oziroma tabela v podatkovni bazi SQL, ki naj jo uporabljam
$maxlenght = 9;
$rxshort = "/^[0-9a-z]{1,".$maxlenght."}$/"; // angleško regular expression, ki naj ga uporabim za kratek niz - nujno popravi še besedilne opise. Pusti ga takega, kot je!
$domena = $_SERVER['HTTP_HOST']; // tvoja domena
switch($domena){
case "xn--pga.ga":
$domena = "š.ga";
break;
case "xn--oda.ga":
$domena = "÷.ga";
break;
case "xn--e1a.ga":
$domena = "е.ga";
break;
}
$captcha = "ja"; // ja/ne: ali naj uporabljam captcho? potrebujete phpcaptcha.org, mapo securimage skopirajte zraven index.php (tega programa).
$kljuc = "antoniolukas"; // api kljuc, da bi treba captche
if($_SERVER['HTTP_HOST'] == "xn--pga.ga") {
$securimage_folder_missing = "securimage mapa z datotekami za captcho ne obstaja. Naložite jo iz phpcaptcha.org/download in jo postavite zraven index.php, ali pa spremenite
nastavitev captcha v konfiguracijah (definicije) iz ja na ne (ne priporočam).\n";
$dbconn_error = "<pre>Povezava v podatkovno bazo ni uspela. <!-- Razhroščevanje: ";
$dbconn_success = "Povezava v podatkovno bazo uspešna.\n";
$dbuse_success = "Izbira podatkovne baze uspešna.\n";
$dbuse_error = "Podatkovne baze ni bilo mogoče izbrati. <!-- Razhroščevanje: ";
$tableexists = "Tabela v podatkovni bazi obstaja. Program je že bil v uporabi.\n";
$tablenotexists = "Tabela v podatkovni bazi ne obstaja. Program je bil zagnan prvič. Poskusil jo bom narediti.\n";
$dbtablecreate_success = "Tabela v podatkovni bazi je bila uspešno narejena.\n";
$dbtablecreate_error = "<pre>Napaka v izdelavi tabele v podatkovni bazi! <!-- razhroščevanje: ";
$shortlink_notexists = "Kratek URL še ne obstaja v podatkovni bazi.\n";
$shortlink_notexists_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka!</b> Kratek URL še ne obstaja v podatkovni bazi.
</div><br>";
$form_sent = "Obrazec je bil izpolnjen, začenjam preverjanje vnosa.";
$captcha_error = "Preverjanje človeštva (CAPTCHA) je negativno. Mogoče niste človek, zato ne bom nadaljeval.";
$captcha_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka preverjanja!</b> Preverjanje CAPTCHA je pokazalo negativni rezultat. Mogoče niste človek, zato ne bom nadaljeval.
</div><br>";
$shortlinkregex_success = "Preverjanje krajšalnega niza je pozitivno. Krajševalni niz se lahko uporabi.\n";
$captcha_success = "Preverjanje človeštva (CAPTCHA) je pozitivno. Človek ste.";
$shortlinkregex_error = "Krajšalni niz se ne ujema z regexom " . $rxshort . ", zato ne bom nadaljeval.\n";
$shortlinkregex_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka vnosa!</b> Krajševalni niz se ne ujema z njegovimi pravili. Mora biti 1 do ".$maxlenght." znakov dolg in lahko vsebuje male črke in številke.
</div><br>";
$longurlregex_success = "Preverjanje dolgega URL-ja je pozitivno. Dolg URL se lahko uporabi.\n";
$longurlregex_error = "Preverjanje dolgega URL-ja je negativno, zato ne bom nadeljeval.\n";
$longurlregex_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka vnosa!</b> Dolg URL se ne ujema z standardi. Poskusite ponovno. Posebni znaki v URL-ju (kot na primer š) morajo biti URL kodirani.
</div><br>";
$longurl_too_long = "Dolg URL je predolg. Mora biti krajši od 767 bajtov, drugače lahko pride do napak v podatkovni bazi.\n";
$longurl_too_long_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka vnosa!</b> URL je predolg. Mora biti krajši od 767 bajtov.
</div><br>";
$longurl_not_too_long = "Dolg URL ni predolg. To je v redu.\n";
$shortlink_free_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka!</b> Krajšalni tekst že obstaja v podatkovni bazi. Izberite drugega.
</div><br>";
$shortlink_free_error = "Krajševalni tekst že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n";
$shortlink_free = "Krajševalni tekst še ne obstaja v podatkovni bazi. To je v redu.\n";
$longurl_free_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka!</b> Dolg URL že obstaja v podatkovni bazi. Nanj kaže <b>";
$longurl_free_error = "Dolg URL že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n";
$longurl_free_success = "Dolg URL še ne obstaja v podatkovni bazi. To je v redu.\n";
$url_was_not_shortened_error = "URL ni bil okrajšan. Glej napake zgoraj!";
$unknown_database_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Sistemska napaka!</b> Neznana napaka podatkovne baze.
</div><br>";
$unknown_database_error = "Neznana napaka podatkovne baze. Glej sistemske dnevnike.\n";
$shortlink_success_ui = "<div class=alertok>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Uspešno!</b> Šortlink <b>".$domena."/".htmlspecialchars($_REQUEST['short'])."</b> je bil uspešno narejen!
</div><br>";
$shortlink_success = "Šortlink ".$domena."/".htmlspecialchars($_REQUEST['short'])." je bil uspešno narejen!\n";
$form_not_sent = "Obrazec ni bil izpolnjen, zato samo prikazujem stran.\n";
$title = "ŠortLink Balkan š.ga";
$subtitle = "<h2 align=center>Ste kdaj hoteli narediti iz dolgega linka ŠortLink tako, da bi izgledal bolj balkansko?</h2>
<h2 align=center>Tudi če niste, je tukaj ŠortLink Balkan, edini Link Šortener, namenjen predvsem slovanskim narodom, saj za njegovo uporabo potrebujete črko Š!</h2>
<h3 align=center>Vsi Šortani linki se bodo začeli z š.ga, na primer š.ga/tekst. Najs ane?</h3>
<h4 align=center>Šortlinker deluje v kooperaciji z ÷.ga šortlinkerjem (internacionalizirana verzija tega). Vsi šortani linki,
izdelani na ÷.ga bodo delovali tudi na š.ga in obratno. Za angleško različico odprite <a href=https://÷.ga/>÷.ga</a>.</h4>";
$longurl_placeholder = "Vpiši dolg URL";
$shortexpression_placeholder = "Vpiši krajšalnico";
$captcha_placeholder = "Prepiši znake";
$submit_value = "Skrajšaj";
$insecure_warning = "OPOZORILO: Povezan si preko nešifrirane povezave.";
$secure_connection = "Varna povezava je vzpostavljena.";
$cookie_warning = "ŠortLink Balkan za svoje delovanje potrebuje in uporablja sejne piškotke. Z uporabo storitve se strinajte z shranjevanjem piškotkov
v vaš brskalnik za največ 24 minut. Piškotek se uporablja samo za interni namen, torej za to, da izvemo katere črke si imel na preverjanju za ljudi (CAPTCHA)
in nikakor ne za namene vohunjenja (tracking cookies). Piškotki so vidni samo na domeni š.ga, torej samo našemu strežniku. To sporočilo smo vam po veljavnem EU
zakonu morali pokazati, ker sta Hrvaška in Slovenija v Evropski Uniji in morata zato upoštevati te <!--glupe --> zakone.";
} else {
$securimage_folder_missing = "securimage folder missing";
$dbconn_error = "<pre>Connection to the database was not successful. <!-- Debug: ";
$dbconn_success = "Connection to the database was successful.\n";
$dbuse_success = "Database picked successfully.\n";
$dbuse_error = "Unable to pick database. <!-- Debug: ";
$tableexists = "Table in database already exists. Program was already ran.\n";
$tablenotexists = "Table in database does not exist yet. Program is now being ran for the first time. Trying to create table.\n";
$dbtablecreate_success = "Table in database was successfully created.\n";
$dbtablecreate_error = "<pre>Error while creating database table! <!-- debug: ";
$shortlink_notexists = "Shortlink is not present in the database yet.\n";
$shortlink_notexists_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Error!</b> Shortlink has not been created yet.
</div><br>";
$form_sent = "Form received, starting sanitization.";
$captcha_error = "Anti Robot test (CAPTCHA) was not submitted correctly. Not continuing, maybe the client is a script.";
$captcha_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Input error!</b> Human test CAPTCHA reported a negative. Maybe you are not human, so I will not continue. Please, try again.
</div><br>";
$shortlinkregex_success = "Shortlink is in the correct form. We can pass on.\n";
$captcha_success = "Captcha was successfully submitted. You are a human.";
$shortlinkregex_error = "Shortlink does not compile with regex " . $rxshort . ", so I will not continue.\n";
$shortlinkregex_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Input error!</b> Shortlink does not compile with the rules. It must be one to ".$maxlenght." characters long and can only
contain lowercase letters and numbers.
</div><br>";
$longurlregex_success = "Long URL regex check positive. Long URL can be used.\n";
$longurlregex_error = "Long URL regex check negative, so I will not continue.\n";
$longurlregex_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Input error!</b> Long URL does not compile with the rules. Try again. Special characters (such as š) have to be URL encoded.
</div><br>";
$longurl_too_long = "Long URL is too long. It has to be shorter than 767 bytes, otherwise it can come to database errors.\n";
$longurl_too_long_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Input error!</b> URL is too long. It has to be shorter than 767 bytes.
</div><br>";
$longurl_not_too_long = "Dolg URL ni predolg. To je v redu.\n";
$shortlink_free_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Error!</b> Shortlink already exists in our database. Pick something else.
</div><br>";
$shortlink_free_error = "Shortlink already exists, so I can't continue.\n";
$shortlink_free = "Shortlink does not exist in the database yet, so we can continue. That is ok.\n";
$longurl_free_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Error!</b> Long URL is already present in database. This shortlink points to it: <b>";
$longurl_free_error = "Long URL is already present in the database, so I can't continue.\n";
$longurl_free_success = "Long URL is not yet present in our database. That is ok, I will continue.\n";
$url_was_not_shortened_error = "URL was not shortened. See errors above!";
$unknown_database_error_ui = "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>System error!</b> Unknown database error.
</div><br>";
$unknown_database_error = "Unknown database error, see system logs.\n";
$shortlink_success_ui = "<div class=alertok>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Success!</b> Shortlink <b>".$domena."/".htmlspecialchars($_REQUEST['short'])."</b> was successfully created!
</div><br>";
$shortlink_success = "Shortlink ".$domena."/".htmlspecialchars($_REQUEST['short'])." was successfully created!\n";
$form_not_sent = "Form was not sent, that is why I am just displaying the webpage.\n";
$title = "Division character shortlinker ÷.ga";
$subtitle = "<h2 align=center>Ever wanted a unique and cool shortlink?</h2>
<h2 align=center>Even if you didn't, this shortlink servive is truly awesome. It uses a one letter domain ÷.ga which is
accessible via a simple shortcut on all keyboard layouts.</h2>
<h3 align=center>All shorted links will start with ÷.ga/, for example ÷.ga/text. Nice, huh?</h3>
<h4 align=center>This service is cooperating with š.ga, balkan shortlinker that uses slavic letter š (š.ga). All links created there
will work here as well and vice versa. Visit <a href=https://š.ga/>š.ga</a> for slovenian version.</h4>
<h5 align=center>Note: we have noticed that some browsers show ÷ as xn--oda. This should not cause any problems.
Typing ÷.ga/link will nonetheless still work as a regular shortlink.</h5>
";
$longurl_placeholder = "Enter long URL";
$shortexpression_placeholder = "Enter short suffix (expression)";
$captcha_placeholder = "Retype characters from Captcha";
$submit_value = "Shorten";
$insecure_warning = "WARNING: You are connected via plaintext connection.";
$secure_connection = "Secure connection is established.";
$cookie_warning = "We use cookies. Not for evil purposes, just for storing your session information for about 24 minutes. And
we do respect your privacy. In fact they are only used to preserve information about captcha code generated in one request and
resubmitted in another. Captcha code (six letter jumble) does not contain any sensible information, trust me (-;";
}
// samoinštalacija - .htaccess ne sme obstajati ob prvem zagonu (sicer se uporabi le v apache okolju)
/*
if(!file_exists(".htaccess")) {
$htaccess = "
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?r=$1 [NC,L,QSA]
";
if(file_put_contents(".htaccess", $htaccess)) {
exit("Program je bil verjetno zagnan prvič. Izdelava .htaccess je uspela.\n");
} else {
$log .= "Program je bil zagnan verjetno prvič. Izdelava .htaccess ni uspela. Popravi dovoljenja mape.\n";
}
}
if($_REQUEST['k'] == $kljuc) {
$_SESSION['k'] = $_REQUEST['k'];
}
*/
/*
if($captcha !== "ne" && 1==0) {
/*
if(!file_exists("/securimage")) {
exit($securimage_folder_missing);
} else {
// okejjjjj
}
*/ // ne delamo več tko, zdej je composer
}
*/
// sql povezava in izbira podatkovne baze
$conn = mysqli_connect($servername, $username, $password, $baza); // naredi povezavo
if (!$conn) { // preveri povezavo
die($dbconn_error . mysqli_connect_error() . "-->\n</pre>");
}
$log .= $dbconn_success;
if(mysqli_select_db($conn,$baza)) {
$log .= $dbuse_success;
} else {
die($dbuse_error . mysqli_error($conn) . "-->\n");
}
//poglej če tabela links obstaja
$alitabelaobstaja = mysqli_query($conn, 'SELECT 1 from `'.$tabela.'`');
if($alitabelaobstaja !== FALSE) {
$log .= $tableexists;
} else {
// ne - naredi jo!
$log .= $tablenotexists;
$sql = "CREATE TABLE IF NOT EXISTS `".$tabela."` (
`short` varchar(".int($maxlength) + 1.") COLLATE utf8_unicode_ci NOT NULL,
`long` text(767) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`short`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
if (mysqli_query($conn, $sql)) {
$log .= $dbtablecreate_success;
} else {
die($dbtablecreate_error . mysqli_error($conn) . "-->\n</pre>");
}
}
//če je potrebna preusmeritev
if(!empty($_REQUEST['r'])) {
// preveri, če dolg niz že obstaja
$safer = mysqli_real_escape_string($conn, $_REQUEST['r']);
// joj kaj je to sranje
// echo $safer; //debug-ne, ker xss
$query = "SELECT `long` from `".$tabela."` where `short`='".$safer."';";
$result = mysqli_query($conn, $query);
echo mysqli_error($conn); //debug
if(mysqli_num_rows($result) > 0) {
// echo array_pop(mysqli_fetch_row($result); //debug //to je to!
$dolgkiobstaja = array_pop(mysqli_fetch_row($result)); //to je to!
// ŠortLink obstaja, preusmerjam!
header("Location: ".$dolgkiobstaja);
} else {
$log .= $shortlink_notexists;
$alert .= $shortlink_notexists_ui;
}
}
// če je zahteva za vpis, vpiši!
if(!empty($_REQUEST['submit'])) {
$log .= $form_sent;
if($captcha !== "ne" && $_REQUEST['k'] !== $kljuc && $_SESSION['k'] !== $kljuc) {
if ($securimage->check($_POST['captcha_code']) == false) {
$log .= $captcha_error;
$alert .= $captcha_error_ui;
$nadaljuj = "ne";
} else {
$log .= $captcha_success;
}
}
// regex match kratkega niza
if(preg_match($rxshort, $_REQUEST['short'])) {
$log .= $shortlinkregex_success;
} else {
$log .= $shortlinkregex_error;
$nadaljuj = "ne";
$alert .= $shortlinkregex_error_ui;
}
// preverjanje, ce je res URL
if(filter_var($_REQUEST['long'], FILTER_VALIDATE_URL)) {
$log .= $longurlregex_success;
} else {
$log .= $longurlregex_error;
$nadaljuj = "ne";
$alert .= $longurlregex_error_ui;
}
// preprecevanje sql prekoračitve
if(strlen($_REQUEST['long']) > 767) { //strlen pove bajte, mb_strlen pove dolžino niza
$log .= $longurl_too_long;
$nadaljuj = "ne";
$alert .= $longurl_too_long_ui; //drugače lahko pride do napak v SQL bazi podatkov
} else {
$log .= $longurl_not_too_long;
}
if($nadaljuj == "ja") { //nadaljuj z sql stvarmi, samo, če so zgornji pogoji zadostni
//preveri, če kratek niz že obstaja
$safeshort = mysqli_real_escape_string($conn, $_REQUEST['short']);
$query = "SELECT * from `".$tabela."` where `short`='".$safeshort."';";
$result = mysqli_query($conn, $query);
if(mysqli_num_rows($result) > 0) {
$alert .= $shortlink_free_error_ui;
$log .= $shortlink_free_error;
$nadaljuj = "ne";
} else {
$log .= $shortlink_free;
}
// preveri, če dolg niz že obstaja
$safelong = mysqli_real_escape_string($conn, $_REQUEST['long']);
$query = "SELECT `short` from `".$tabela."` where `long`='".$safelong."';";
$result = mysqli_query($conn, $query);
if(mysqli_num_rows($result) > 0) {
// echo array_pop(mysqli_fetch_row($result); //debug //to je to!
$kratekkiobstaja = array_pop(mysqli_fetch_row($result)); //to je to!
$alert .= $longurl_free_error_ui.$domena."/".htmlspecialchars($kratekkiobstaja)."</b>
</div><br>";
$log .= $longurl_free_error;
$nadaljuj = "ne";
} else {
$log .= $longurl_free_success;
}
/*
//idk ne dela -- v redu, vem zakaj: podpičje manjka! jaoooo in še `'" jaooooo sql nima ", ' je za nize, ` je za stolpce, tabele,...
$prepared = mysqli_prepare($conn, "SELECT * FROM ".$tabela." WHERE short=?");
// var_dump(mysqli_error($conn)); //debug
$binded = mysqli_stmt_bind_param($prepared, "s", $_REQUEST['short']);
// echo $binded; //debug
$executed = mysqli_stmt_execute($prepared);
echo $executed; //debug
$binded_result = mysqli_stmt_bind_result($prepared, $rezultat);
echo $rezultat; //debug
$fetched = mysqli_stmt_fetch($prepared);
echo $fetched; //debug
$result = mysqli_query($conn, $prepared);
echo mysqli_error($conn); //debug
if(mysqli_num_rows($result) == 0) {
$log .= "Krajševalni tekst še ne obstaja v podatkovni bazi. To je v redu.\n";
} else {
$alert .= "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka!</b> Krajšalni tekst že obstaja v podatkovni bazi. Izberite drugega.
</div><br>";
$log .= "Krajševalni tekst že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n";
$nadaljuj = "ne";
}
//preverjanje, če krajševalni niz že obstaja
$prepared = mysqli_prepare($conn, "SELECT * FROM ".$tabela." WHERE long=?");
// echo mysqli_error($conn); //debug
mysqli_stmt_bind_param($prepared, "s", $_REQUEST['long']);
$result = mysqli_query($conn);
if(mysqli_num_rows($result) == 0) {
$log .= "Dolg URL še ne obstaja v podatkovni bazi. To je v redu.\n";
} else {
$alert .= "<div class=alert>
<span class=closebtn onclick=this.parentElement.style.display='none';>×</span>
<b>Napaka!</b> Dolg URL že obstaja v podatkovni bazi. Nanj vodi <b>".$domena."/".htmlspecialchars($result)."</b>.
</div><br>";
$log .= "Dolg URL že obstaja v podatkovni bazi, zato ne morem nadaljevati. Nanj vodi ".$domena."/".htmlspecialchars($result).".\n";
$nadaljuj = "ne";
}
*/
}
if($nadaljuj !== "ja") {
$log .= $url_was_not_shortened_error;
} else {
$query = "INSERT INTO `".$tabela."` (`short`, `long`) VALUES ('".$safeshort."','".$safelong."');";
$result = mysqli_query($conn, $query);
// var_dump(mysqli_error($conn)); //debug
//preveri uspeh
$query = "SELECT * FROM `".$tabela."` WHERE `short`='".$safeshort."';";
$result = mysqli_query($conn, $query);
if(mysqli_num_rows($result) == 0) {
// var_dump(mysqli_error($conn)); //debug
$alert .= $unknown_database_error_ui;
$log .= $unknown_database_error;
} else {
$alert .= $shortlink_success_ui;
$log .= $shortlink_success;
}
}
} else {
$log .= $form_not_sent;
}
$print .= "
<script src=https://d.a4l.space/tohttps.js language=javascript type='text/javascript'></script>
<style>
.alert {
opacity: 1;
transition: opacity 0.6s; /* 600ms za izgine */
}
/* Škatla z obvestilom */
.alert {
padding: 20px;
background-color: #f44336; /* Rdeča */
color: white;
margin-bottom: 15px;
}
.alertok {
padding: 20px;
background-color: #43f436; /* Zelena */
color: white;
margin-bottom: 15px;
}
/* Gumb za zapreti */
.closebtn {
margin-left: 15px;
color: white;
font-weight: bold;
float: right;
font-size: 22px;
line-height: 20px;
cursor: pointer;
transition: 0.3s;
}
/* Ko je miška pod gumbom za zapreti */
.closebtn:hover {
color: black;
}
</style>
<script>
// Dobi vse elemente z class=closebtn
var close = document.getElementsByClassName('closebtn');
var i;
// Pojdi čez vse gumbe za zapreti
for (i = 0; i < close.length; i++) {
// Ko je gumb kliknjen
close[i].onclick = function(){
// Dobi starša od <span class=closebtn> (<div class=alert>)
var div = this.parentElement;
// Nastavi -prosojnost div-a na 0 (prozorna)
div.style.opacity = 0;
// Skrij div po 600ms (Ko izgine, izginotje je definirano tudi v CSS-ju)
setTimeout(function(){ div.style.display = 'none'; }, 600);
}
}
</script>
<meta name=viewport content='width=device-width, initial-scale=1.0'>
";
$print .= "
<title>".$title."</title>
<h1 align=center>".$title."</h1>
".$subtitle."
<div align=center>
<form method=POST action=''>
<input autocomplete=off type=url name=long placeholder='".$longurl_placeholder." ...' required=required align=center><br>
".$domena."/<input maxlenght=".$maxlenght." autocomplete=off type=text name=short placeholder='".$shortexpression_placeholder." ...' required=required align=center><br>
<img id=captcha src=/vendor/dapphp/securimage/securimage_show.php alt='Captcha' align=center /><br>
<input autocomplete=off type=text placeholder='".$captcha_placeholder." ...' name=captcha_code size=10 maxlength=6 align=center/><br>
<input autocomplete=off type=submit name=submit value='".$submit_value."!' align=center>
</form>
";
if(empty($_SERVER['HTTPS'])) {
$print .= "<br><text style=color:red;>".$insecure_warning."</text>";
} else {
$print .="<br><text style=color:green;>".$secure_connection."</text>";
}
$print .= "
<br>
<small align=center>
".$cookie_warning."
</small>
</div>
";
//$print .= "<h4 align=center>Ker še nisem sprogramiral, ŠortLink Balkan še ne deluje. Ne uporabljaj ga, ker ne bo nič naredil.</h4>";
echo "<!--<pre>" . $log . "</pre>-->";
echo $print;
echo $alert;
?>