Autor | Zpráva | ||
---|---|---|---|
Nezkušený Profil * |
Šel by udělat formulář, který po vyplnění vytvoří php soubor a zapíše ty informace?
Moderátor Chamurappi: Titulek „Formulář trocu jinak.“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
|
||
Nox Profil |
#2 · Zasláno: 1. 6. 2010, 14:30:54 · Upravil/a: Nox
Tohle formulář sám neudělá... prostě pošleš formulářem text a v php uděláš php soubor a vpíšeš to do něj...
Každopádně je to bezpečnostní megadíra :) |
||
Beavis Profil |
#3 · Zasláno: 1. 6. 2010, 14:31:11
Nezkušený:
Ano, šel. |
||
Nezkušený Profil * |
#4 · Zasláno: 1. 6. 2010, 14:40:13
Bych potřeboval, že uživatel by vyplnil formulář, který by odeslal informace, do připravený šablony. Tam by se ty informace uložily a vytvořil se php soubor číslem.
Nevíte o nějakým tutorialů nebo nějaký řešíní. Hledal jsem na googlu a nic takového jsem nenašel. |
||
SpotRudloff Profil |
#5 · Zasláno: 1. 6. 2010, 16:48:36 · Upravil/a: SpotRudloff
<form action="" method="post"> Jméno: <input type="text" name="jmeno" /> <br /> Povolání: <input type="text" name="povolani" /> <br /> <input type="submit" value="Odeslat" /> </form> <?php if(IsSet($_POST['jmeno']) AND IsSet($_POST['povolani']) AND !empty($_POST['jmeno']) AND !empty($_POST['povolani'])) //Pokud příjdou všechna data a nejsou prázdná { $doSouboru = "jmeno_souboru.txt"; //Název souboru, kam se data uloží $obsah = "Jmenuji se ".$_POST['jmeno']." a pracuji jako ".$_POST['povolani']."."; //Př. Jmenuji se Jaroslav a pracuji jako dělník. $vytvorit = file_put_contents($doSouboru, $obsah); if($vytvorit) //Pokud se vytvoří { echo "Soubor byl v pořádku uložen!"; } else { //Pokud ovšem ne die("Nastala chyba při ukládání! <a href=\"\">Zkusit znovu</a>."); } } else { die("Musíte vyplnit všechny údaje! <a href=\"\">Zkusit znovu</a>."); } ?> Toto je malý příklad, snad to pochopíš. Ovšem jak udělat unikátní číslo souboru mě nenapadá, leda nějáká práce s date, kde by to bylo opravdu jedinečné. |
||
Kcko Profil |
#6 · Zasláno: 1. 6. 2010, 16:52:55
SpotRudloff:
„Toto je malý příklad, snad to pochopíš. Ovšem jak udělat unikátní číslo souboru mě nenapadá, leda nějáká práce s date, kde by to bylo opravdu jedinečné.“ napr. time() + rand(1,999) |
||
SpotRudloff Profil |
#7 · Zasláno: 1. 6. 2010, 17:09:47
Jak říkám jde to tou prácí s časem. :)
|
||
Nox Profil |
#8 · Zasláno: 1. 6. 2010, 17:16:52
http://cz.php.net/manual/en/function.uniqid.php
případně ještě zkontrolovat jestli tam takový soubor už fakt není, člověk ni skript nikdy neví |
||
SpotRudloff Profil |
#9 · Zasláno: 1. 6. 2010, 17:21:00
Nox:
Taky mě napadlo to v cyklu testovat pomocí podmínky, zda už toto ID existuje, ale bylo by to zdlouhavé. Pokud by ovšem chtěl, určitě bychom mu zde nějáké řešení ukázali. :) |
||
Nox Profil |
#10 · Zasláno: 1. 6. 2010, 18:15:04
SpotRudloff:
Zato jste mu napsali to stejné, akorát bez kontroly duplicity ;) Zdlouhavý to není, práce s filesystémem je velmi rychlá a s tím uniqid to stejně skoro vždy vyjde napoprvé... víc jak 1 iterace bude velmi výjimečně, ale i tak je dobrý to tam mít |
||
Nezkušený Profil * |
#11 · Zasláno: 1. 6. 2010, 18:46:43
Já myslel tím, že ten soubor se bude ukládát do určené složky a tomu souboru bude ten script přiřazovat číslo třeba budu mít v tý složce už soubory 1.php , 2.php..................20.php tak mu přiřadí číslo 21 a to bude název toho souboru.
Děkuju vám rady. |
||
Chro Profil |
#12 · Zasláno: 2. 6. 2010, 02:28:22
Nezkušený:
PHP skript umí zjistit název souboru ve složce, který má být vytvořen, má následovat podle čísla a do něho být zapsán obsah: <?php $slozka = opendir('soubory/'); $cisla_seznam = "0"; while ($soubor = readdir($slozka)) { $cislo_souboru = str_replace(".php", "", $soubor); $cisla_seznam.= " ".$cislo_souboru; } $cisla_pole = explode(" ", $cisla_seznam); $cislo = max($cisla_pole); $cislo++; $soubor_k_zapisu = $cislo.".php"; file_put_contents("soubory/".$soubor_k_zapisu, "obsah"); ?> |
||
Majkl578 Profil |
#13 · Zasláno: 2. 6. 2010, 02:50:40 · Upravil/a: Majkl578
[#12] Chro:
To je dost neohrabaný kód. Mohu nabídnout lepší a rychlejší: $max = 0; foreach (new RegexIterator(new DirectoryIterator($dir = '/tmp/_test_'), '~^(\d+)\.php$~', RegexIterator::GET_MATCH) as $item) { if ($item[1] > $max) $max = $item[1]; } $max++; //o jedno vyšší než poslední file_put_contents("$dir/$max.php", 'blah blah'); |
||
Chro Profil |
#14 · Zasláno: 2. 6. 2010, 11:51:27
Majkl578:
Tvůj kód je perfektní. To už je OOP? A ten vytuněný regulár... Obdiv, závist, 100:0. :-) |
||
Nezkušený Profil * |
#15 · Zasláno: 3. 6. 2010, 13:06:09
Jak do kódu od SpotRudloff místo toho
$vytvorit = file_put_contents($doSouboru, $obsah); |
||
Nezkušený Profil * |
#16 · Zasláno: 3. 6. 2010, 14:20:23
Když jsem to zkoušel nahradit tak to furt hází chybu
<?php if(IsSet($_POST['jmeno']) AND IsSet($_POST['povolani']) AND !empty($_POST['jmeno']) AND !empty($_POST['povolani'])) //Pokud příjdou všechna data a nejsou prázdná { $doSouboru = "up/new.php"; //Název souboru, kam se data uloží $obsah = "Jmenuji se ".$_POST['jmeno']." a pracuji jako ".$_POST['povolani']."."; //Př. Jmenuji se Jaroslav a pracuji jako dělník. $vytvorit = file_put_contents($doSouboru, $obsah); $max = 0; foreach (new RegexIterator(new DirectoryIterator($dir = '/up'), '~^(\d+)\.php$~', RegexIterator::GET_MATCH) as $item) { if ($item[1] > $max) $max = $item[1]; } $max++; //o jedno vyšší než poslední file_put_contents("$dir/$max.php", 'blah blah'); if($max) //Pokud se vytvoří { echo "Soubor byl v pořádku uložen!"; } else { //Pokud ovšem ne die("Soubor byl v pořádku uložen!"); } } else { die("Musíte vyplnit všechny údaje! <a href=\"\">Zkusit znovu</a>."); } ?> |
||
Majkl578 Profil |
#17 · Zasláno: 3. 6. 2010, 14:24:17
Jakou chybu?
|
||
Nezkušený Profil * |
#18 · Zasláno: 3. 6. 2010, 14:27:05
Už to mám fungu je to
<form action="" method="post"> Jméno: <input type="text" name="jmeno" /> <br /> Povolání: <input type="text" name="povolani" /> <br /> <input type="submit" value="Odeslat" /> </form> <?php if(IsSet($_POST['jmeno']) AND IsSet($_POST['povolani']) AND !empty($_POST['jmeno']) AND !empty($_POST['povolani'])) //Pokud příjdou všechna data a nejsou prázdná { $doSouboru = "jmeno_souboru.txt"; //Název souboru, kam se data uloží $obsah = "Jmenuji se ".$_POST['jmeno']." a pracuji jako ".$_POST['povolani']."."; //Př. Jmenuji se Jaroslav a pracuji jako dělník. $max = 0; foreach (new RegexIterator(new DirectoryIterator($dir = 'up/'), '~^(\d+)\.php$~', RegexIterator::GET_MATCH) as $item) { if ($item[1] > $max) $max = $item[1]; } $max++; //o jedno vyšší než poslední file_put_contents("$dir/$max.php", $obsah); if($vytvorit) //Pokud se vytvoří { echo "Soubor byl v pořádku uložen!"; } else { //Pokud ovšem ne die("Nastala chyba při ukládání! <a href=\"\">Zkusit znovu</a>."); } } else { die("Musíte vyplnit všechny údaje! <a href=\"\">Zkusit znovu</a>."); } ?> |
||
Nezkušený Profil * |
#19 · Zasláno: 4. 6. 2010, 10:35:42
Šlo by udělat, když ten soubor se uloží tak, aby se v tom obsahu ješte uložil datum a čas?
|
||
Časová prodleva: 14 let
|
0