Jednoduchý zkracovač URL adres

Ahoj!

Fakt dlouho jsem tady nic nenapsal a celkem je mi to líto. Poslední dobou na to nemám moc času – nejdříve byly písemky ve škole a teď jsou prázdniny. Navíc byly poslední dobou úmorná horka (kolem 40°C ve stínu) a řeknu Vám, že v tom je psaní nějakého článku opravdu velmi těžké. Ale je to tak. Jo, je to celkem dost hloupá výmluva…

Ale teď už jsem zpět a píšu pro Vás tenhle článek. Ještě předtím bych Vám chtěl oznámit, že pro Vás chystám jednu bezvadnou novinku, snad ji oceníte. Ale o tom až někdy později – předpokládám během září 2015.

Dlouho jsem přemýšlel, jaký článek pro Vás napsat a napadlo mě, že bychom si mohli vytvořit vlastní zkracovač URL adres. Bude to mít velmi primitivní funkčnost a použijeme přitom databázi MySQL. Pusťme se do toho!

Takže, nejdříve (ostatně, jak tomu bývá zvykem u všech mých článků) si shrneme, co vlastně chceme programovat, co k tomu použijeme a hlavně – jak to bude fungovat (DB = databáze):

  • Na hlavní stránce bude možnost vytvořit novou zkrácenou adresu a zároveň přejít na tu již existující
  • PŘIDÁNÍ
    • Na hlavní stránce bude formulář pro přidání URL
    • Budou tam dvě políčka – původní a nová zkrácená verze
      • Zkrácená URL se nebude sama generovat, ale uživatel si ji musí sám vymyslet
    • Po kliknutí na přidávací button se provede následující
  • ODESLÁNÍ DO DB
    • Z klientského formuláře se vezmou dvě data
      • původní adresa (cíl)
      • nová adresa (alias)
    • Obě data se uloží do DB do dvou sloupců
      • alias
      • cil
  • POTVRZENÍ PŘIDÁNÍ
    • Uživateli pouze potvrdíme, že alias i cíl byl úspěšně uložen do DB
    • A zobrazíme mu klikatelný odkaz aliasu (zkrácené adresy)
  • ŽÁDOST O ZOBRAZENÍ ADRESY
    • Uživatel zašle požadavek na server s aliasem
    • A žádá nás o přesměrování na správnou adresu
    • My se podíváme do DB
      • A zjistíme, jestli je v DB ve sloupci alias shoda s aliasem, který nám uživatel poslal
      • Pokud ano, zjistíme si i ve stejném řádku cíl tohoto aliasu
      • A na tuto adresu ho přesměrujeme
    • Pokud v DB shodu nenalezneme, zobrazíme chybovou hlášku

A jdeme programovat 🙂

Nejprve si vytvoříme potřebnou tabulku a sloupce v MySQL. Tabulku nazveme url a budeme mít dva sloupce – alias a cil – omezenou délku nechávám na Vás, ale nezapomínejte, že se jedná o URL adresy a někdy mohou být pekelně dlouhé.

Dalším krokem bude vytvořit si konfigurační soubor pomocí kterého budeme komunikovat s databází. Nazveme ho config.inc.php. Uložíme do ní název databázového serveru, uživatele, heslo a databázi. Potom ještě nastavím správné a jednotné kódování, pomocí kterého budeme s databází komunikovat – UTF-8. Toto kódování doporučuji používat ve všech našich skriptech.

<?php  
$server = 'dbserver.koncovka'; //server, na kterém je DB 
$uzivatel= 'uzivatel'; //jméno uživatele 
$heslo = 'heslo'; //heslo uživatele 
$db = 'databaze'; //název databáze  

//pokusíme se připojit 
$link = mysql_connect($server, $uzivatel, $heslo) or die("Could not connect: " . mysql_error()); 

//vybereme databázi 
mysql_select_db($db, $link) or die ('Nemohu se pripojit ' . mysql_error());  

//a nakonec nastavíme jednotné kódování UTF-8 
mysql_query("SET NAMES UTF8");  
?>

No a potom už můžeme začít postupně skládat soubor vlozit.php, který bude sloužit pro vkládání nových záznamů do DB. Ještě dodám, že použijeme antispamovou ochranu už z minulého článku. Nejdříve jednoduchý formulář (to, že používám teď <center> je jenom proto, aby to nějak vypadalo):

<center>
  <h2>Zkracovač URL adres</h2> 
  <form method="post" action="#"> 
    URL ke zkrácení: <input type="text" value="http://" name="cil"><br> 
    http://url.mujskript.cz/<input type="text" name="alias"><br> 
    <p id="spamprotirobotum">Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: <input type="text" name="robot" value="" id="protirobotum"></p> 

<button type="submit">Zkratit!</button> </form>
</center>

<script> /* tento skript vloží do příslušného políčka  */ 
document.getElementById("protirobotum").value = 13 * 19; 
document.getElementById("spamprotirobotum").style.display = "none"; 
</script>

Jak jste i mohli všimnout, formulář už obsahuje JS ochranu před spamem. Teď si v PHP definujeme proměnné a připojíme se k databázi:

<?php  
require_once ("config.inc.php");     
$alias = $_POST['alias']; 
$cil = $_POST['cil']; 
$robot = $_POST['robot'];

//A ochráníme se před útoky

$alias = htmlspecialchars($alias); 
$cil = htmlspecialchars($cil); 
$alias = mysql_real_escape_string($alias); 
$cil = mysql_real_escape_string($cil);

Následně si vytvoříme podmínku pro antispamovou ochranu a poté budeme pokračovat ve skriptu:

if($robot == 247){ 
  $query = "INSERT INTO `url`(`alias`,`cil`) VALUES 
    ('$alias','$cil')";  
  $result = mysql_query($query);  

  if(!$result){ 
    echo  mysql_error() . " - " . mysql_errno();  
  }else{
    echo 'Nyní už můžete ostatní odkázat na adresu'; 
    echo '<a href="http://url.mujskript.cz/?u='.$alias.'">http://url.mujskript.cz/?u='.$alias; 
  }
} 
?>

A teď si skript rozebereme. Přidali jsme podmínku, že pokud v $robot je 247, tak se pokračuje dále to přesně: Vytvoří se SQL dotaz s daty a pošle se do DB. V další podmínce se ověřuje, zda nedošlo k chybě, pokud ano, tak se vypíše. V opačném případě (pokud nedošlo k chybě) se zobrazí odkaz na zkrácenou URL.

TIP! Doporučuji všechny řetězce escapovat před útoky pomocí htmlspecialchars (více).

No a nyní si vytvoříme poslední soubor a to index.php, ve kterém se bude ověřovat správnost krátké URL a přesměruje se na ni a také se tam includne soubor pro vložení adresy (vlozit.php), Soubor index.php tedy bude vypadat:

<?php 
  require_once ("config.inc.php");  
  $zadost = $_GET['u']; 
  $zadost = htmlspecialchars($zadost);

Opět se připojíme k DB a definujeme si proměnné. Do proměnné $zadost se nám bude ukládat požadavek od uživatele (http://domena.cz/?u=neco) a to „neco“ je právě obsah proměnné $zadost. Následně tuto proměnnou ještě escapujeme.

A poté si už složíme dotaz, zda URL existuje (viz. začátek teorie nahoře). „Vyber z tabulky url všechny záznamy, kde se obsah sloupce alias rovná proměnné $zadost“. URL budeme předávat pomocí superglobální proměnné $GET (více). Dotaz pošleme do databáze a požádáme o výsledek:

$query_sel = "SELECT * FROM `url` WHERE `alias`='$zadost'";  
$result_sel = mysql_query($query_sel); 
$row = mysql_fetch_assoc($result_sel);

Nyní máme výsledek obsažený v proměnné $row[‚alias‘] (ta se nám vrátila z DB) a ještě ho porovnáme s proměnnou $zadost (tu jsme dostali od uživatele).

Takže vytvoříme podmínku, pokud se záznam našel a pokud ne:

if(isset($zadost)){
  if ($row['alias'] == $zadost){
    header("Location:".$row['cil']); 
  }else{
    echo "Tento záznam (".$zadost.") neexistuje!"; 
  }
}

Pokud se záznam v tabulce url našel, tak se rovnou přesměruje na cíl, pokud v záznam v tabulce neexistuje, upozorníme na to. Nakonec můžeme ještě includnou soubor pro vložení záznamu vlozit.php, ale nemusíme:

include "vlozit.php"; 
?>

V případě, že bychom si chtěli vypsat všechny záznamy z DB (tj. alias i cíl), můžeme:

<?php 
  require_once ("config.inc.php");   

//vybereme všechny záznamy z tabulky url a seřadíme je podle jejich id (1, 2, 3...) 
$query_sel = "SELECT * FROM `url` ORDER BY `id`";  

//řekneme, že toto je příkaz do DB 
$result_sel = mysql_query($query_sel);  

//pokud se příkaz z nějakého důvodu nevykonal 
if(!$result_sel){  

  //vypiš chybovou hlášku
  echo  mysql_error() . " - " . mysql_errno();      
  }  //pokud se žádná chyba nestala     
else{  
    //tak projdeme celou tabulku pomoci while a prok aždý záznam vytvoříme asociativní pole         
    while($row = mysql_fetch_assoc($result_sel)){  

      //a teď už jen vypíšeme každý řádek (generují se samy díky mysql_fetch_assoc)             
      echo "<p>";  //a v $row je vždy uložen obsah řádku konkrétního pole             
      echo "alias: " . $row['alias'] . "<br>";              
      echo "cil: " . $row['cil'];              
      echo "</p>";          
    }      
}  
?>

Shrnutí

Vytvořili jsme si opravdu jednoduchý zkracovač URL. Pokud si vše přenesete na Váš server, nebo vyzkoušíte živě tento zkracovač (odkaz níže), mohla by se Vám hodit nápověda:

Do prvního políčka se vkládá původní URL adresa – např. „http://seznam.cz“ a do druhého políčka se vkládá jen zkrácená adresa pro odkaz (szn). Po potvrzení se Vám vygeneruje link. Je delší, ale pomocí .htaccess si ten parametr $GET[‚u‘] můžete skrýt a rovnou i použít kratší a lepší doménu.

Nápady na vylepšení:

  • mohlo by to umět pomocí .htaccess odstranit ten $GET parametr
  • mohlo by to počítat počet kliků (třeba podle mého skriptu)
  • mělo by to mít ošetřené všechny vstupy pomocí htmlspecialchars – do DB, u už. části už je
  • mohlo by to umět samo generovat zkrácené url (aaa, aab, aac, aad… ….kbn, kbm)
  • mohlo by to zamezit vkládání stejných aliasů a vypsat třeba „Tento záznam už existuje!“

Pokud by Vás napadlo nějaké další vylepšení, klidně mi napište na mail, nebo do komentářů

To je vše. Snad jsem Vám pomohl. Celý skript je samozřejmě ke stažení a vyzkoušení zdarma:

Vyzkoušet živě zkracovač URL 

Stáhnout Zkracovač URL adres (.zip)

Zálohování databáze MySQL a uložení do souboru .sql

Dneska jsem na internetu narazil na zajímavý PHP skript, který Vám zazálohuje databázi MySQL a soubor ve formátu .sql uloží do souboru. Sám tento skript už používám.

Upravil jsem si ho tak, aby generoval název ve tvaru mysql-zaloha-21-03-2015_09-17-28_PM.sql. Takže přímo vím, ze kdy záloha DB pochází. Navíc tenhle skript spouštím pomocí cronu jednou za 12 hodin, takže se o nic nestarám a vše se mi zálohuje samo.

Bezva!

 

Stačí si v dolní části upravit jenom adresu serveru, název DB, jméno a heslo:

<?php
function zalohuj($db,$soubor=""){
 $text="";
 
 function keys($prefix,$array){
 $array=Array();
 $radky="";
 $pocet = count($array);
 $posledni = $pocet-1;
 if($pocet == 0)
 return;
 for($i = 0; $i<$pocet; $i++){
 if($i != $posledni)
 $carka = ",";
 else
 $carka = "";
 $radky .= "`$array[$i]`$carka";
 }
 return ",\n$prefix($radky)";
 }
 
 $sql = mysql_query("SHOW TABLE STATUS FROM $db");
 
 
 while($data = mysql_fetch_array($sql)){
 $PRI=$UNI=$MUL="";
 
 $text .= "--\n-- Struktura tabulky $data[0]\n--\n\n";
 $text .= "CREATE TABLE `$data[0]`(\n";
 $sqll = mysql_query("show columns from $data[0]") or die ("Nastala chyba: " . mysql_error());
 $e = true;
 while($dataa = mysql_fetch_array($sqll)){
 if($e){
 $e = false;
 }
 else
 $text .= ",\n";
 $null = ($dataa[2] == "NO")? "NOT NULL":"NULL";
 $default = !empty($dataa[4])? " DEFAULT '$dataa[4]'":false;
 
 
 if($default == " DEFAULT 'CURRENT_TIMESTAMP'") $default = " DEFAULT CURRENT_TIMESTAMP";
 if($dataa[3] == "PRI") $PRI[] = $dataa[0];
 if($dataa[3] == "UNI") $UNI[] = $dataa[0];
 if($dataa[3] == "MUL") $MUL[] = $dataa[0];
 $extra = !empty($dataa[5])? " ".$dataa[5]:false;
 $text .= "`$dataa[0]` $dataa[1] $null$default$extra";
 }
 $primary = keys("PRIMARY KEY",$PRI);
 $unique = keys("UNIQUE KEY",$UNI);
 $mul = keys("INDEX",$MUL);
 $text .= "$primary$unique$mul\n) ENGINE=$data[Engine] COLLATE=$data[Collation];\n\n";
 unset($PRI,$UNI,$MUL);
 #data
 $text .= "--\n-- Data tabulky $data[0]\n--\n\n";
 $query = mysql_query("SELECT * FROM $data[0]");
 while($fetch = mysql_fetch_array($query)){
 $values="";
 $pocet_sloupcu = count($fetch)/2;
 $i = 0;
 while($i < $pocet_sloupcu){
 if($i < $pocet_sloupcu-1)
 $carka = ",";
 else
 $carka = "";
 $values .= "'".mysql_escape_string($fetch[$i])."'$carka";
 $i++; 
 }
 $text .= "\nINSERT INTO `$data[0]` VALUES($values);";
 unset($values);
 }
 }
 
 if(!empty($soubor)){
 $fp = @fopen($soubor,"w+");
 $fw = @fwrite($fp,$text);
 @fclose($fp);
 }
 
 return $text;
}
 
$hostiteldb="server";
$jmenodb="uzivatel";
$heslodb="heslo";
$db="databaze";
 
mysql_connect($hostiteldb, $jmenodb, $heslodb);
mysql_query("SET NAMES 'utf8'");
mysql_select_db($db);
 
$text = zalohuj($db,"mysql-zaloha".date("-d-m-Y\_h-i-s\_A").".sql");
echo "<textarea>$text</textarea>";
?>

Jednoduché přihlášení v PHP a MySQL

Kapitoly:

Nejdříve si v databázi vytvoříme pomocí phpMyAdmin (nebo Adminer) tabulku, kterou pojmenujeme uzivatele. Bude obsahovat čtyři sloupce id, login, heslo, email:

  • id
    • INT(5)
  • login
    • VARCHAR(40)
  • heslo
    • VARCHAR(32)
  • emal
    • VARCHAR(50)

Databáze

Vykonejme tedy tento SQL dotaz, který nám vytvoří vše výše popisované:

CREATE TABLE IF NOT EXISTS `uzivatele` (
 `id` int(5) NOT NULL auto_increment,
 `login` varchar(40) NOT NULL,
 `heslo` varchar(32) NOT NULL,
 `email` varchar(50) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Tím jsme si vytvořili tabulku uzivatele se sloupci id, login, heslo a email.

registrace.php

Nyní si otevřeme textový editor (např. PSPad, Notepad++, Sublime text…), vytvoříme nový PHP dokument, který pojmenujeme registrace.php a vložíme do něj velmi jednoduchý skript pro registraci:

<?php
include "connect.php";/* připojení k databázi - budeme se tomu věnovat níže... */
if(isset($_POST['submit'])) {
 $nick = mysql_real_escape_string($_POST['nick']);
 $heslo = mysql_real_escape_string($_POST['heslo']);
 $over_heslo = mysql_real_escape_string($_POST['over_heslo']);
 $md5_heslo = md5($heslo);
 $email = mysql_real_escape_string($_POST['email']);
 /* Nyní ověříme, zda byly zadané všechny potřebné údaje (registračnímu formuláři se budeme věnovat níže) */
 $user_check = mysql_query("SELECT login FROM uzivatele WHERE login='".$nick."'");
 if($nick==""){echo"Nebyl vyplněn nick!";}
 else if(mysql_num_rows($user_check)){echo"Tento nick používá již jiný uživatel.";}
 else if($heslo==""){echo"Nebylo vyplněno heslo";}
 else if($over_heslo==""){echo"Nebylo vyplněno ověřovací heslo";}
 else if($heslo!=$over_heslo){echo"Vyplněná hesla se neshodují";}
 else if($email==""){echo"Nebyl vyplněn email";}
 else{
 $sql= mysql_query("INSERT INTO uzivatele VALUES ('','$nick','$md5_heslo','$email')") or die(mysql_error());
 echo"Registrace byla úspěšně dokončena!";
 }
}
?>

 

Do téhož souboru ještě připíšeme přihlašovací formulář (na konec souboru vložte):

<form action="#" method="post"> 
<table> 
<tr> <td>Přezdívka: </td> <td><input type="text" name="nick" value="<?php if(isset($_POST["nick"])){echo $_POST["nick"];}?>" size="25" tabindex="1" /></td> </tr>
<tr> <td>Heslo: </td> <td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td> </tr> 
<tr> <td>Ověření hesla: </td> <td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td> </tr> 
<tr> <td>Email: </td> <td><input type="text" name="email" value="<?php if(isset($_POST["email"])){echo $_POST["email"];}?>" size="25" tabindex="4" /></td> </tr> 
<tr> <td colspan="2"><input type="submit" name="submit" value="Registrovat se" /></td> </tr> 
</table> 
</form>

Nyní jsme si vytvořili skript, který se nám připojí k DB (= databáze), ověří, zda byly zadané všechny správné údaje (správnost e-mailu se dozvíte v tomto článku) a následně je zapíše do DB.

connect.php

Dále si vytvoříme soubor pro připojení k databázi. Nazveme ho connect.php a vložíme do něj:

<?php
$db_server = 'server'; /* Název serveru, ke kterému se budeme připojovat */
$db_login = 'uzivatel'; /* Jméno uživatele do DB */
$db_password = 'heslo'; /* Heslo uživatele do DB */
$db_name = 'databaze'; /* Název databáze, ve které jsme si vytvořili tabulku "uzivatele" */
$spojeni = @MySQL_Connect($db_server ,$db_login, $db_password);
@MySQL_Select_DB($db_name)or die('<p style="color: red">Nastala chyba v pripojeni k databazi');
mysql_query("set names utf8");
?>

index.php

Nyní si vytvoříme soubor index.php, který bude obsahovat přihlašovací formulář a do jeho obsahu vložíme tento kód:

<form action="login.php" method="post"> 
 <table>
 <tr>
 <td>Přezdívka: </td>
 <td><input type="text" name="nick" value="" size="17" tabindex="1" /></td>
 </tr>
 <tr>
 <td>Heslo: </td>
 <td><input type="password" name="heslo" value="" size="17" tabindex="2" /></td>
 </tr>
 <tr>
 <td colspan="2"><input type="submit" name="submit" value="Přihlásit se" /></td>
 </tr>
 <tr>
 <td colspan="2" align="right">Pokud nemáte účet, <a href="/registrace.php">registrujte se</a></td>
 </tr>
 </table>
 </form>

K tomuto formuláři není moc co psát…

login.php

Dále si tedy vytvoříme soubor login.php (na který jsme odkazovali ve formuláři). Tento soubor bude sloužit k ověření správnosti dat s databází a případně vytvoří SESSION ‚login‘, kterou se budeme prokazovat jako přihlášení. Po shodě dat z MySQL, se přesměrujeme na admin.php. Do souboru login.php vložte:

<?php
include "./connect.php";/* připojení k databázi */
$login = mysql_real_escape_string($_POST["nick"]);/* nick zadaný ve formuláři pro přihlašování */
$heslo = mysql_real_escape_string($_POST["heslo"]);/* heslo zadané ve formuláři pro přihlašování */
$md5heslo = md5($heslo);/* Pomocí funkce md5() heslo zahashujeme */
/* — SQL DOTAZ PRO OVĚŘENÍ PRAVOSTI PŘIHLAŠOVACÍH DAT V DATABÁZI A UŽIVATELEM ZADANÝCH — */
$dotaz = mysql_query("select * from uzivatele where login = '$login' and heslo = '$md5heslo'");
$overeni = mysql_num_rows($dotaz);
$row = mysql_fetch_array($dotaz);
if($overeni == 1) {
 session_start();
 $_SESSION['login'] = stripslashes($login); 
/* Zde se vytváří SESSION 'login', kterou se budeme prokazovat jako přihlášení */
 $_SESSION['id'] = $row["id"];
 header("Location: admin.php"); /* V případě správného přihlášení se přesměruje na admin.php */
 die();
} else {
 echo"Zadal jsi špatný login nebo heslo!";
}
?>

admin.php

Dále si vytvoříme soubor admin.php, který bude přístupný pouze registrovaným uživatelům. To zajistíme tak, že povolíme výpis tajných dat pouze, pokud má uživatel SESSION ‚login‘, pokud nemá, zobrazíme přihlašovací formulář a hlášku, že se musí příhlásit. Do souboru admin.php vložte:

<?php
session_start(); /* Všude, kde chceme, aby probíhala autorizace, vložíme session_start */
?>
</head>
<body>
<h2>TEXT PRO VŠECHNY UŽIVATELE (přihlášené+nepřihlášené)</h2> /* Text pro všechny */
<?php
 if($_SESSION['login']!=""){
 echo'TEXT POUZE PRO PŘIHLÁŠENÉ UŽIVATELE - JSI VÍTÁN!!!<br> /* Text pro přihlášené */
 <a href="/logout.php">Odhlásit se</a>'; /* Zde je možnost, odhlásit se, povíme si, jak... */
 } else {
 echo'TEXT PRO NEPŘIHLÁŠENÉ UŽIVATELE - Tato stránka je přístupná pouze přihlášeným uživatelům. Pokud nemáš účet, <a href="/registrace.php">zaregistruj se</a>!<br> /* Text pro nepřihlášené */
 <h2>Přihlásit se:</h2>
 <form action="login.php" method="post"> 
 <table>
 <tr>
 <td>Přezdívka: </td>
 <td><input type="text" name="nick" value="" size="17" tabindex="1" /></td>
 </tr>
 <tr>
 <td>Heslo: </td>
 <td><input type="password" name="heslo" value="" size="17" tabindex="2" /></td>
 </tr>
 <tr>
 <td colspan="2"><input type="submit" name="submit" value="Přihlásit se" /></td>
 </tr>
 </table>
 </form>';
 }
?>

logout.php

Nyní nám zbývá už poslední část – odhlášení! Vytvořme si tedy soubor logout.php a napište do něj:

<?php
session_start();// Zapneme session
session_destroy();// Smažeme všechna session 'login'
header("location: index.php"); // Přesměruje na přihlašovací stránku
?>

Upozornění

V době, kdy jsem tento skript psal (prosinec 2013) byl aktuální. Z důvodu, že skript už není nejaktuálnější, chci Vás upozornit, že:

  • používat hashování pomocí MD5 je již zastaralé
  • používat rozšíření mysql_ je již zastaralé – doporučuji mysqli_
  • by bylo dobré uživatelské vstupy ošetřovat před XSS útoky (článek).

Samozřejmě není problém, tento typ přihlašování používat. Jen je dobré, abyste to věděli.

Shrnutí

Vytvořili jsme si tedy celkem šest souborů (index.php, connect.php, login.php, logout.php, admin.php, registrace.php).

Vše si můžete zdarma stáhnout a použít na svém webu: http://ukazky.mujskript.cz/jednoduche-prihlaseni-pomoci-mysql/prihlaseni.zip

Uvítám Vaše připomínky níže v diskusi 🙂

Návštěvní kniha v PHP a MySQL

1.) Vytvoříme si tabulku kniha_navstev

2.) Do ní vložíme tyto sloupce s těmito parametry:

  • datum
    • DATETIME
  • jmeno
    • VARCHAR(30)
  • email
    • VARCHAR(200)
  • zapis
    • TEXT

Živá ukázka

Hotové řešení níže:

<html> <head> <title>Kniha návštěv</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1205"> </head> <body> <h2>Přidat příspěvek:</h2> <form name="kniha" action="" method="post"> <b>Jméno:</b><br /> <input name="jmeno" size="40"><br /> <br /> <b>Mail:</b><br /> <input name="email" size="40"><br /> <br /> <b>Zpráva:</b><br /> <textarea name="zprava" rows="5" cols="30"></textarea><br /> <br /> <input type="submit" value="Odeslat zprávu"> </form> <?php   $jmeno = $_POST['jmeno']; $email = $_POST['email']; $zprava = $_POST['zprava'];  $jmeno = htmlspecialchars($jmeno); $email = htmlspecialchars($email); $zprava = htmlspecialchars($zprava); // -- Připojení k databázi a správné nastavení èeštiny --   // Připojení k databázi. $db_spojeni = mysqli_connect   ('databazovy-server', 'uzivatel', 'heslo', 'nazev-databaze', port-vetsinou-3306);   // Otestování, zda se pøipojení podaøilo. if (!$db_spojeni) {   echo 'Připojení se nepodařilo, sorry';   echo '<br />';   echo 'Popis chyby: ', mysqli_connect_error();   exit(); }   // Správné nastavení èeštiny. $objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'cp1250'"); if (!$objekt_vysledku) {   echo 'Poslání SQL pøíkazu se nepodaøilo, sorry';   echo '<br />';   echo 'Popis chyby: ', mysqli_error($db_spojeni);   exit(); }     // -- Vlož nový zápis, pokud byl odeslán formuláøem --   // Test, jestli pøišla data z formuláøe. if (isset($_POST['zprava'])) {   // Vytvoøení SQL pøíkazu typu INSERT.   $sql_prikaz =      "INSERT INTO kniha_navstev(datum,jmeno,email,zapis) "     ."VALUES(NOW(),'"     .mysqli_real_escape_string($db_spojeni,$jmeno)     ."','"     .mysqli_real_escape_string($db_spojeni,$email)     ."','"     .mysqli_real_escape_string($db_spojeni,$zprava)     ."')"     ;     // Zaslání SQL pøíkazu do databáze.   $objekt_vysledku = mysqli_query($db_spojeni, $sql_prikaz);     if (!$objekt_vysledku)   {     echo 'Poslání SQL pøíkazu se nepodaøilo, sorry';     echo '<br />';     echo 'Popis chyby: ', mysqli_error($db_spojeni);     exit();   }   echo 'Nový zápis do knihy návštìv pøidán.<br />'; }     // -- Vypiš všechny zápisy v knize návštìv --   // Zaslání SQL pøíkazu do databáze. $objekt_vysledku = mysqli_query($db_spojeni,   'SELECT * FROM kniha_navstev ORDER BY datum DESC'); if (!$objekt_vysledku) {   echo 'Poslání SQL pøíkazu se nepodaøilo, sorry';   echo '<br />';   echo 'Popis chyby: ', mysqli_error($db_spojeni);   exit(); }   echo '<h2>Odeslané pøíspěvky:</h2>'; // Zobrazení všech vrácených dat. while ($radek = mysqli_fetch_array($objekt_vysledku)) {   echo '<hr />';   echo 'Datum a èas: ',$radek['datum'],'<br />';   echo 'Napsal: ',$radek['jmeno'],' (',$radek['email'],')<br />';   echo 'Zápis: ',$radek['zapis'],'<br />';   echo '<br />'; } echo '<hr />';     // -- Odpojení od databáze --   // Zavøení objektu výsledku, protože už ho nebudeme používat. mysqli_free_result($objekt_vysledku);   // Odpojení od databáze. if ($db_spojeni)   mysqli_close($db_spojeni);   ?>   </body> </html>

 

Přejmenování databáze s nadefinovanými views nelze provést

Pokud člověk potřebuje přejmenovat databázi a má nadefinované views, tak přejmenování např. v Admineru selže (právě kvůli těm views, protože pomocí RENAME TABLE se sice view dá přejmenovat, ale jen v rámci jedné databáze). 
Kdyby se to někdy někomu hodilo (jako mně dneska), tady je na to utilitka: http://projekty.vize.name/renameDb.zip (záloha na MůjSkript.cz zde)

Funguje takto: 
– vytvoří databázi s novým jménem 
– přesune do ní normální tabulky 
– views zkopíruje do nové DB 
Stará databáze zůstane včetně views. Dá se to spustit nasucho, kdy se jen vypíší SQL dotazy, které by se provedly. Neumí to zkopírovat nadefinované procedury, možná někdy příště.

Napsané to je pro PHP 5.4, je potřeba si přilinkovat dibi (buď uložit dibi.min.php do stejné složky, anebo se dají ve skriptu nastavit nějaké výchozí hodnoty včetně cesty k dibi). Kód je výsledkem postupu „rychle naprasit aby to fungovalo a nebylo s tím moc práce“ a „trochu to pak uklidit, aby se neřeklo“, tak to podle toho berte.

 

Autor: Tori

Zdroj: http://diskuse.jakpsatweb.cz/?action=vthread&forum=18&topic=158559#4