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: 9 let
|
0