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
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
Nezkušený:
Ano, šel.
Nezkušený
Profil *
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
<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
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
Jak říkám jde to tou prácí s časem. :)
Nox
Profil
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
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
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 *
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
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
[#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
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 *
Jak do kódu od SpotRudloff místo toho
$vytvorit = file_put_contents($doSouboru, $obsah);
vložím ten kód od Majkl578. Když jsem to zkoušel tak mi to psalo fatal error.
Nezkušený
Profil *
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
Jakou chybu?
Nezkušený
Profil *
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 *
Šlo by udělat, když ten soubor se uloží tak, aby se v tom obsahu ješte uložil datum a čas?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0