| Autor | Zpráva | ||
|---|---|---|---|
| leorond Profil |
#1 · Zasláno: 25. 10. 2015, 20:16:27
Dobrý večer, chtěl bych se zeptat na něco ohledně MySQL databáze a _utf8, jsem zvyklí na MSSQL databázi v které pracuji již dlouho ale ted bych potřeboval udělat instalaci MySQL databáze pomocí php scriptu. Není to nic těžkého a vše funguje jak má.
Když chci udělat input do DB s diakritikou, například takto mysql_query("INSERT INTO tabulka (id,text) values ('1','test ěščřžýáíé')") or print ("Již se zapsalo do DB");Tak výsledek je takový že se do DB zapíše pouze část textu bez diakritiky a ostatní se ustřihne. Případně když použiji kódování _utf8 při zápisu do DB tak se do databáze zapíše text stejně jako je vložen ale jak ošetřit výstup aby se neukazovalo jen "??????". Děkuji za odpověd. |
||
| juriad Profil |
Diskuse JPW: Některé časteji řešené dotazy pro MySQL - FAQ » MySQL a čeština. Stačí jako první příkaz po připojení nastavit správné kódování.
Mimochodem, funkce rodiny mysql_* jsou zavržené a budou za nedlouho odstraněné, pro nové priojekty použij mysqli_* (liší se jen drobnostmi jako je povinný argument navíc). |
||
| leorond Profil |
Ještě bych potřeboval v tomto scriptu udělat kontrolu zda je vybrán soubor. Nebo nahodit na správnou cestu :)
<?php
if(isset($_FILES['files'])){
$errors= array();
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
$file_name = $key.$_FILES['files']['name'][$key];
$file_size =$_FILES['files']['size'][$key];
$file_tmp =$_FILES['files']['tmp_name'][$key];
$file_type=$_FILES['files']['type'][$key];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
$query="INSERT into upload_foto_1 (`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`) VALUES('$file_name','$file_size','$file_type'); ";
$desired_dir= "galerie/".$test_db_1["user"];
if(empty($errors)==true){
if(is_dir($desired_dir)==false){
mkdir("$desired_dir", 0700); // Create directory if it does not exist
}
if(is_dir("$desired_dir/".$file_name)==false){
move_uploaded_file($file_tmp,"galerie/".$test_db_1["user"]."/".$file_name);
}else{ //rename the file if another one exist
$new_dir="galerie/".$test_db_1["user"]."/".$file_name.time();
rename($file_tmp,$new_dir) ;
}
mysql_query($query);
}else{
print_r($errors);
}
}
if(empty($error)){
echo "Success";
}
}
?>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="files[]" />
<input type="submit"/>
</form>Script funguje perfektně ale pokud stisknu tlačítko -> funguje Děkuji juriad to znamená učit se zase něco nového? :-D Super :-) Nemáš prosím někde nějaký článek o MySQLi? Vlastně takový příklad zápisu MySQLi mohl by vypadat takto? mysqli->query("SELECT * FROM tabulka"); |
||
| juriad Profil |
leorond:
A tu kontrolu chceš na klientovi v prohlížeči? Pak stačí přidat atribut required k inputu (není to stoprocentní, ale kontrolu stejně vždy musíš provádě i na serveru - tam stačí ve smyčce spočítat počet úspěšně nahraných souborů a podle toho se zařídit). Nezapomínej na to, že po POSTovém requestu musíš přesměrovat, viz en.wikipedia.org/wiki/Post/Redirect/Get.
Ten rozdíl je opravdu nepatrný - www.fisir.tk/itblog/mysql_ Umíš-li s objekty, tak ano, jinak mysqli_* má i procedurální API, v dokumentaci je vždy zmíněno. Pozor také na SQL Injection - nevěř uživateli ani nos mezi očima, natož že název soboru nebude obsahovat znaky jako je apostrof. Všechny řetězce, které vkládáš do SQL dotazu musíš escapovat. A když už začínáš s MySQL, můžeš se také podívat na knihovnu dibi, která je příjemnější na používání. |
||
| leorond Profil |
To kódování by stačilo nějak takto?
function connect() {
mysql_connect("server", "user", "pass"); //pripojime k serveru
mysql_select_db("db"); //vybereme databazi
mysql_set_charset("utf8");
}Ano required mne také napadl, nemohu to pustit až k SUCCESS pokud nechci aby se to zapsalo do databáze a nahrál se obrázek na server.
Myslel jsem přidat něco jako elseif ($_FILES['files'] < 1) echo "Nebyl vybrán soubor"; Co se týká dibi, mysql, mysqli vše mi to přijde skoro stejné, jen mne mrzí že to neumí vše jako mssql protože to by byla bomba :)
|
||
| juriad Profil |
#6 · Zasláno: 25. 10. 2015, 21:05:49
leorond:
Tam je problém, ty nechceš kontrolovat, zda uživatel vybral nějaký soubor. Ale že vybral alespoň jeden a že ten jeden splňuje požadavky. Přidej tedy za 3. řádek $uploaded_files = 0; a za mysql_query přidej $uploaded_files++; a do podmínky na 29. řadku přidej && $uploaded_files > 0. Možná bys mohl po úspěšném uploadu za mysql_query provést break, ať se vloží maximálně jeden soubor a ne víc.
Ano, takto by mělo stačit nastavit to kódování. Co ti u těch knihoven chybí? Třeba to umí a tys to jen nenašel... |
||
| leorond Profil |
#7 · Zasláno: 25. 10. 2015, 21:13:22
No vše je defakto stejné ale přechod na MySQL byl pro mne něco nového, hlavně v trošku jiných příkazech na DB jako je změna
mssql_query("select top 10... na mysql_query("...limit 10");. Ale pravda je že pravděpodobně je jen jiná forma zápisu nebo je třeba udělat funkci která poslouží stejně dobře, v php jde prostě skoro vše :).
|
||
| juriad Profil |
leorond:
Zrovna omezení počtu vrácených záznamů ve stadardu tuším není. Proto si to každá databáze řeší po svém. Toto není věc knihoven, ale samotného dialektu SQL. Časem přijdeš i na další odlišnosti. MySQL je taková příjemná v tom, že ji vytvořili lidi pro sebe, hodně toho snese (třeba v GROUP BY je hodně benevolentní), má užitečné klauzule IF EXIST, není potřeba karakiri s IF OBJECT_ID('dbo.JMENO', 'U') IS NOT NULL DROP TABLE dbo.JMENO, ale má i spoustu much.
|
||
| leorond Profil |
No popravdě jsem celkem úspěšně použil několik scriptu z mého webu pro mssql, sice jsem musel přidat
mysql_real_escape_string a udělat několik úprav pro připojení k DB ale jinak vše OK.Nevím proč mi to stále nechce fungovat a jde to až do databáze. Vše jsem udělal jak jsi řekl a stejně to na mne háže ignor :D a to těžkej :D Ale dostal jsem lepší nápad co když dodám omezení na velikost a upravím podmínku na 9. řádku asi takto if(($file_size > 2097152) | ($file_size < 1)){
$errors[]='Soubor nebyl vybrán nebo má více než 2MB!';
} to by mohlo fungovat jako ochrana ne? Vím jak udělat ochranu před výpisem článků bez obrázku v DB ale zde když vložím podmínku která určuje minimální velikost obrázku tak dostanu chybovou hlášku a hned za ní success |
||
| mimochodec Profil |
#10 · Zasláno: 25. 10. 2015, 22:38:05
Ty roury dvě.
|
||
| lionel messi Profil |
Správne musí byť podmienka zapísaná takto:
if(($file_size > 2097152) || ($file_size < 1)){Operátor | znamená bitové alebo, ty potrebuješ logické.
Pardon, v podstate som len ukecanejšou podobou zopakoval mimochodcov príspevok, ktorý som prehliadol. |
||
| leorond Profil |
Děkuji za radu mimochodec ale vymyslel jsem to jinak, proč určovat velikost nebo kontrolovat počet souborů? Udělal jsem to takto
elseif (strlen ($file_name) < 1)
{
echo "Ouha!";
}vím že je to amatérské ale ani název by neměl být menší než než 1 znak :D funguje 100%. Jen mi přibliž co jsi myslel těmi rourami? :) lionel 2 roury nefungují To mě podržte :D fungovalo to jen 2x a teď zase úspěšně uploaduju :D Pánové zkusil jsem skoro všechno a popravdě jsem nedosáhl úspěchu. Pomozte mi nějak přidat podmínku po minimální velikost, minimální počet souborů nebo minimální počet znaků v názvu obrázku. Děkuji za pomoc Ok 10x jsem to otestoval a mělo by to být OK elseif(($file_size > 2097152) || ($file_size < 1)) Pomohlo, jen jsem to trochu upravil a uložil na správné místo. |
||
| mimochodec Profil |
Mně se trochu líp než || a && pamatuje a píše or a and.
|
||
| leorond Profil |
#14 · Zasláno: 26. 10. 2015, 01:46:50
Mne taky ale jelikož jsem chtěl ke každému obrázku přidat nadpis, text, podpis a datum tak jsem script trochu vylepšil a mám z toho perfektní systém na přidávání novinek pro web. :)
|
||
|
Časová prodleva: 11 let
|
|||
0