Autor Zpráva
vodys
Profil *
Dobrý den, poptávám řešení pro vytvoření souboru ve složce /www/user/ a zapsání zadaného údaje do něj při odeslání formuláře.

Dejme tomu, že do formuláře zadám.
Jméno: Jan Novák
Email: novak@jan.cz

Chci aby se při odeslání vytvořil soubor /www/user/jan.novak.php a v něm bylo zapsané: novak@jan.cz

Myslím, že na to existuje nějaká jednoduchá funkce pomocí php nebo js, ale nedopátral jsem se jí.
Prosím o pomoc.

Díky
lionel messi
Profil
vodys:
Myslím, že na to existuje nějaká jednoduchá funkce pomocí php nebo js, ale nedopátral jsem se jí.
<form method="post">
  Meno: <input type="text" name="meno">
  E-mail: <input type="text" name="mail">
</form>
<?php
if (isset($_POST["meno"], $_POST["mail"]))
{
  $meno = $_POST["meno"];
  $mail = $_POST["mail"]; //priradenie do lokálnych premenných
  $meno = strtolower(str_replace(" ", "-", $meno)); //prevedie na malé písmená, nahradí medzeru za spojovník, bodku by som nepoužil, ale je to jedno
  //ešte by to v reáli chcelo odstrániť z mena diakritiku, napr. pomocou strtr a zvalidovať e-mailovú adresu, oboje pre prehľadnosť vynechávam
  //rovnako by som sa ešte vysporiadal so znakmi, kt. nemôžu byť v názve súboru, ale užívateľ ich môže nahádzať do inputu napr: \/: atď., tiež vynechávam, keby bolo treba, doplním
  if (!file_exists("/www/user/". $meno .".php") //ak súbor neexistuje, vytovríme ho
  {
    $subor = fopen("/www/user/". $meno .".php", "w"); //vytvoríme súbor
    fwrite($subor, htmlspecialchars($mail)); //zapíšeme do súboru mail
    fclose($subor);
    echo "Registrácia mailu prebehla v poriadku.";
   }
   else
   {
     echo "Zadané meno je už používané!";
   }
}
else
{
  echo "Vyplňte prosím všetky polia";
}
?>
bestik_63
Profil
Podle tvého dotazu usuzuji, že o programování nemáš ani páru, asi by bylo lepší si něco nastudovat. A s hledáním je to snad ještě horší.

tohle je první odkaz, který jsem našel na google :
http://www.tvorba-webu.cz/php/prace_se_soubory.php

klíčová slova byli : vytvoření souboru php

Takže ne jen že o tom nemáš ani páru, ale dokonce ani nejsi ochotný si něco vyhledat, však on ti někdo poradí že?
vodys
Profil *
bestik_63:

Slušně jsem se zeptal. Ano, nemám o tom ani páru, zvládám html a css. Php je mi cizí, potřebuji však občas nějaké funkce, které se svými schopnostmi nedovedu vytvořit. Vyhledání tohoto problému jsem věnoval skoro 2 hodiny a stránku, kterou jsi mi poslal jsem už pročítal, problém je, že když neznám základy, nedokážu sesmolit nic. Omlouvám se, že jsem zasáhl tvé povýšené sebevědomí a nějakým způsobem tě urazil.


lionel messi:

Moc děkuju! Opravdu jsi mi pomohl. :)
Kubo2
Profil
bestik_63:
však on ti někdo poradí že?
Niekto vodysovi možno rád poradí.

lionel messi:
V tvojom kóde by som zmenil dve tri veci (zoznam nižšie čítaj inverzne => tvoj stávajúci kód, moja zmena):

1\ použitie literálu namiesto konštantnej šablóny,

<?php

const PATH_PATTERN = '/www/user/%s.txt';
// ...
if(
  file_exists(
    sprintf(PATH_PATTERN, $meno)
  )
) {
  // do something
  // fopen() on the same principle, for example
}

2\ escapovanie na vstupe namiesto escapovania na výstupe (v závislosti na kontexte). Predstav si, že by ti niekto zadal emailovú adresu v tvare Kubo2 <admin@localhost>, ty by si si ho uložil escapovaný a priamo by si ho chcel použiť na odoslanie emailu (iným skriptom),

<?php
// ...
  fwrite($subor, $mail); // zapíšeme do súboru mail

presenter.php
<?php

echo(
  htmlspecialchars(
    file_get_contents(
      sprintf("/www/user/%s.txt", $_GET['meno'])
    )
  )
);

3\ pre overenie existencie súboru (regulárneho súboru!) použitie file_exists() namiesto is_file().

<?php

// môže to byť existujúci súbor alebo adresár
var_dump(file_exists($f));

// môže to byť iba existujúci regulárny súbor (= regular file)
var_dump(is_file($f));

K tomu poslednému doplním odkaz.


vodys:
Myslím, že na to existuje nějaká jednoduchá funkce pomocí php nebo js, ale nedopátral jsem se jí.
V JavaScripte nie, skript (alebo obecne program) manipulujúci so súborovým systémom tvojho servera musí bežať (aspoň virtuálne) na tomto serveri.

Mimochodom, mohol si o tom napísať aj sem. :-)
lionel messi
Profil
Kubo2:
Vďaka za doplnenie cenných pripomienok, opäť som sa niečo nové dozvedel, zaujal ma hlavne bod 3. Čo si však ani jeden z nás nevšimol, je, že môj kód obsahuje na r. 13 syntaktickú chybu (chýbajúca uzatváracia zátvorka), už sme to s vodysom vyriešili.
Kubo2
Profil
lionel messi:
Čo si však ani jeden z nás nevšimol, je, že môj kód obsahuje na r. 13 syntaktickú chybu (chýbajúca uzatváracia zátvorka), už sme to s vodysom vyriešili.
Ale všimol. :-) Preto som na to vlákno odkázal v poslednej vete, schválne som to tu nespomenul, a koniec koncov kvôli tomu vláknu som napísal tento príspevok. :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0