Autor Zpráva
Coompiik
Profil
Dobrý den,
Chtěl bych vytvořit dotazník(hádám že php) který po vyplnění zapíše napsaná data do nějakého souboru na webu nebo v databázi(na webu bych radši) popř. vygeneruje nový, vím že to de třeba přes Disk Google a podob. ale chtěl bych si vytvořit vlastní, kde si můžu upravovat vzhled a podob. Prostě zkrátka udělám si inputovej formulář kterej bude odkazovat na zpracuj.php , tam bude kód kterej zapíše do nějakýho souboru to co uživatel vyplnil, hledal sem to na internetu prolít sem 30 prvních stránek i tohle fórum sem prosvištěl ale tohle sem nikde neviděl, poradíte my prosím kde to najdu popř mi ten kód napíšete? budu moc rád za obojí
--
S pozdravem
Coompiik
Marschmallow
Profil
Coompiik:
A chtěl by jsi, aby se to ukázalo i ostatním? Nebo, aby ti to přišlo do mailu? Nebo aby se to ukládalo do nějakého souboru nebo do DB?
Coompiik
Profil
Marschmallow:
Do jakéhokoli souboru, soubor se může menovat třeba 854948646748746467464.php to je jedno, prostě ten kdo bude znát název ten ho otevře, s databází moc neumim, blbě se mi pak dostávala k tomu co lidi napsali, databázi používám zatim jen na napojení různých pluginů a webshopů(minecraft), ale hned jak se naučim php(což mi dost dlouho potrvá) kouknu na databázi.
Děkuju za reakci.
Coompiik
Coompiik
Profil
Tak sem rpjel JPW, google a spoustu dalších stránek ale furt jen že mě to hodí na stránku atd... fakt už si nevim rady
Kubo2
Profil
Coompiik:
ale hned jak se naučim php(což mi dost dlouho potrvá) kouknu na databázi
Skús potom mrknúť na našu učebnicu PHP.

K tomu dotazníku (PHP Manuál - Anglicky):
Superglobálne premenné, teba budú zaujímať polia $_GET a $_POST.
– Práca so súbormi (hlavne file_put_contents a občas sa ti zíde aj file_get_contents) a databázami (v aktuálnom kontexte hovorím o MySQL) v PHP.
– Na vygenerovanie náhodného názvu súboru ti zatiaľ postačí toto:
<?php
$nahodnyNazovSuboru = base64_encode(md5(time()));
+Plus na zistenie či taký súbor existuje ti bude užitočná funkcia file_exists.
– Ešte odporúčam naštudovať si podmienky a operátory.

Prajem príjemný večer, veľa zábavy a zápalu v učení! :-)
I'm sure, that you'll enjoy PHP language in its full range!
Coompiik
Profil
Kubo2:
Díky, kouknu na to, zejtra sobota celej den budu šprtat, víc neš matiku děják atd, ale ještě bych se chtěl zeptat na ten náhodnej soubor, já myslel jeden soubor se jménem cojávim 1js7f8f7r5.php kam se budou všechny ty vyplněný a odeslaný údaje zapisovat a ten kdo bude znát ten soubor(hádám že málo kdo by jentak skoušel napsat www.cz/448ddfd84.php) si normálně přečte co lidi napsaly, prostě se data napíšou do <table>. Děkuji moc za pomoc, a du šprtat.
Coompiik
Profil
Kubo2:
Koukl sem na to, echo include mi de to už sem si testnul na http://coompiik.jecool.net/chat ale get atd tam nikde nevidim. ale kouknu na ot na jinejch strankach např kdyš napíšeš cokoly z php tak se ti tam hodi odkaz, takze zadnej problem.


Ale na tom pehápku je to krásně popsaný pochopil sem ot napoprvý.
Coompiik
Profil
Tak sem si nekde vyhledal to get, jakštakš sem to pochopil ,skuil sem to, už to fachá, a jak sem proklíkával ty linyk co si mi poslal tak u toho file_put_contents sem trošku poupravil to první, napadlo mě jestli kdyš
<?php
$file = 'people.txt';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new person to the file
$current .= "John Smith\n";
// Write the contents back to the file
file_put_contents($file, $current);
?>
Vypíše vždycky další John Smith tak jestli by to vzalo kdybych do
file_put_contents($file, $current); dal misto $current $udaj1 $udaj2 atd ktery se zjistej pres get, skusim to a pak napisu, dik za pomoc moc si mi pomohl.
Update: Napsal sem to blbe, myslel sem
file_put_contents($file, $udaj1, $udaj2);
a pak bych to jeste dal oddeloval carkama. Get uz teda umim to zadnej problem, jak uz sem psal testnu to a napíšu.


Hmm.... tak
<?php
if(isset($_GET['send'])) {
$udaj1 = $_GET['udaj1'];  
$udaj2 = $_GET['udaj2'];  
$udaj3 = $_GET['udaj3'];  
$udaj4 = $_GET['udaj4'];  
$udaj5 = $_GET['udaj5'];  

$file = 'j4fs7de4sa.txt';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new person to the file
$current .= "John Smith\n";
// Write the contents back to the file
file_put_contents($file, $current, $udaj1, $udaj2, $udaj3, $udaj4, &udaj5);
?>
mi nevišlo... ještě na to blíš kouknu.
Coompiik
Profil
Coompiik:
Teď si tak všímám nezbarvenýho udaj5, neni to tim?
Davex
Profil
Coompiik:
Teď si tak všímám nezbarvenýho udaj5, neni to tim?
Částečně je to tím. Proměnné začínají znakem dolar a ne ampersand.

Když si klikneš na podtrženou funkci file_put_contents, tak se dostaneš na dokumentaci PHP, kde je napsané, jaké parametry tato fukce má a k čemu slouží. Po vymyšlení dalších parametrů to fungovat nebude. Všechny ukládané údaje se musí spojit do jednoho parametru operátorem pro spojování řetězců.
Coompiik
Profil
Davex:
Ajo překlepl sem se, a pochopil sme teda nějak že to co sem napsal je úplná blbost, a z operátora na JPW že by mohlo fachčit
$current .= $udaj1 + $udaj2 + $udaj3 + $udaj4 + $udaj5; chápu dobře?
Kubo2
Profil
Coompiik:
mi nevišlo...
To preto, že funkcia file_put_contents je definovaná asi takto:
function file_put_contents($filename, $data, $flags = 0, $context = null) { ... }
Z kontextu teda môžeš usúdiť, že jej základná funkčnosť je zapísať $data do súboru s názvom $filename (Samotný zápis a správanie funkcie ďalej ovplyvňujú $flags a $context.)
Z predchodzieho teda môžeš súdiť, že ak napíšeš file_put_contents($file, $current, $udaj1, $udaj2, $udaj3, ...), tak to zapíše $current do $file, a $udaj1 a $udaj2 sa budú brať ako flags a context. Ostatné argumenty budú ignorované + volanie skončí nejakou hláškou, predpokladám, že varovaním.

Osobne by som ti ten skript napísal takto jednoducho:
<?php
if (isset($_GET["send"])) {
  $udaje = "";
  for ($i = 1; $i <= 5; $i = $i + 1) { // prípadne namiesto $i = $i+1 použi $i++, je to kratšie
    $udaje .= !empty($udaje) ? "\n" : '';
    if (!isset($_GET["udaj" . $i]) || (empty($_GET["udaj" . $i]) && intval($_GET["udaj" . $i]) !== 0)) {
      $udaje .= "--";
      continue;
    }
    $udaje .= $_GET["udaj" . $i]
  }
}
Súbor potom spustíš takto:
http://www.example.com/subor.php?send&udaj1=hodnota%20udaju&udaj2=Kubo2&udaj3=DJPW&udaj5=Davex
Po vypísaní $udaje by ti mal vzniknúť takýto list:
hodnota udaju
Kubo2
DJPW
--
Davex


Edit:
Aha, všimol som si Davexov príspevok, takže len pre info [#10].

Coompiik:
chápu dobře?
Excelentne :-)
Nerozmýšľam<joke>, kde mám hlavu?</joke>.
Všimni si, že operátor + slúži na operáciu sčítavanie čísiel, zakiaľ operátor . na spájanie reťazcov.
To, čo si urobil by skončilo chybovou poznámkou kvôli nedefinovanej premennej. Správne teda takto:
$current = $udaj1 . $udaj2 . $udaj3 . $udaj4 . $udaj5;
Coompiik
Profil
Kubo2:
Tak sem skusil to tvoje, akorat na konec sem pridal jeste na radek 13 vlozil ?> a nejde mi to, a napada me ze sme tam nikde nenasel zadn text kam se to ma ulozit.
A ještě mě napadá, co kdybych těch údajů chtěl víc, např. 15, šlo by to taky tak?
Kubo2
Profil
Coompiik:
Samozrejme. Ale takto to spájať manuálne je príliš pracné, skôr by som použil pole a prechádzal ho cyklom (napr. foreach), ale ak ešte do toho nechceš ťahať polia, tak stačí použiť cyklus, asi takto:
<?php
// …
for($i = 1; $i <= 15; $i++) {
  $udaje .= ${"udaj" . ((string)$i)};
}
Kubo2
Profil
Teraz som si celé vlákno prešiel ešte raz a všimol som si môjho príspevku [#12], prečítaj si kód, čo je v ňom, stane sa univerzálnym, keď v gulatých zátvorkách zameníš
for($i = 1; $i <= 5; $i++) { … }
za
for($i = 1; isset($_GET["udaj$i"]) || isset($_GET["udaj" . (++$i)]); $i++) { … }
Potom si budeš môcť definovať nekonečne dlhý zoznam údajov, s podmienkou, že v postupnosti môžeš ďaľší člen navýšiť maximálne o 2, tzn. maximálne jeden člen prirodzenej postupnosti (tj. 1,2,3,4,5,6,7,8... až nekonečno) môžeš vynechať, tzn. postupnosť 1,2,4,5,6,7,9 je v poriadku, ale ak na koniec postupnosti pridáš dvanásť, dvanásty údaj do $udaje nebude zaradený (každý člen postupnosti reprezentuje postfix jednej GET premennej - napr. v udaj3 znak 3 je postfix).


Pýtal si sa, prečo ti skript nezapisuje do súboru. Správne si poznamenal, že tam nie je kód, ktorý by túto operáciu vykonával, tak ho teraz pridáme.
<?php
// do premennej si uložíme anonymnú funkciu
// vygeneruje názov súboru, overí či už neexistuje
// vytvorí ho a zapíše do neho dáta (ako text/plain, bohužiaľ, píšem z mobilu)
$ukladacDat = function($udajePreZapis) {
  static $generatorRetazcov = function($jedenZnak = false) {
    $rnd_str = base64_encode(md5(time()));
    return !$jedenZnak ? $rnd_str : $rnd_str[rand(0, strlen($rnd_str)-1)];
  }
  $fname = __DIR__ . "/adresarSoSubormi/" . $generatorRetazcov();
  while(file_exists($fname . ".dat")) {
  $fname .= $generatorRetazcov(true);
  }
  // vytvorit súbor
  @touch($fname);
  return (boolean)file_put_contents($fname, $udajePreZapis);
};

// sem hoď ten kód z [#12], ale uprav ho tak, 
// ako som ti to vysvetlil tu
// ...

// a nakoniec dáta uložíme
if(!$ukladacDat($udaje)) {
  // spracuj chybu
} else
  exit;
To by bolo asi tak všetko, až na jednu vec: ak budeš potrebovať hromadne prehľadať celý tento adresarSoSubormi (pred spustenim skriptu ho samozrejme musíš najprv vytvoriť ako priamy podadresár adresára, v ktorom spúšťaš script), môže sa ti hodiť funkcia glob() (v živote som ju nepoužil, takže neviem ako funguje, ale tebe by sa v tomto ohľade mohla hodiť).

Keď opäť zavítaš na DJPW, pošli spätnú väzbu a prípadne ti to v maili aj dopodrobna vysvetlím (ten kód), ak by si mal záujem.
Coompiik
Profil
Kubo2:
Dík moc, ale šlo by jak už sem psal nahoře udělat aby se to všechno psalu do souboru do <table>? jmeno soub oru bude třreba fd587gfss.php to je mi uplne jedno, ale aby se to vsechno zapisovalo donej, abych si ho ulozil do zalozek a moh to prohlizet z webu, nemyslim ze by nekdo jen tak uz nudy vyskousel vsechny mozny kombinacer nahodnej cisel a pismen a dostal se k tomu souboru, kazdopadne kdys jo, tak mi to ani tak neva, nebudu po nich chtit hesla ani nic podobnyho, kazdopadne dik, moc i tohle se hodi a na ten glob() se doma určitě podívam, sem ve škole, tady je většiná stránek bloklejch takže se divim že tu fachčí DJPW.
Dik moc fakt si mi hodne pomoh.¨
A řešit to na mailu taky není špatnej nápad, můj mail: coompiik@gmail.com
Kubo2
Profil
Coompiik:
To nestojí za reč, ani vlastne neviem, či si toľko vďaky naozaj zaslúžim :-)
Ja som tiež v škole, ale na večer, keď sa zase dostanem na PC, tak ti môžem poradiť vo väčšom rozsahu.
Ohľadom toho mailu, to som myslel tak, že informácie, ktoré by mohli byť nápomocné aj iným, napíšeme sem, aby boli ľahko dohľadateľné, a rozsiahle vysvetľujúce texty, ktoré DJPW nepožerie, pretože by pravdepodobne presahovali maximálny rozsah príspevku., budeme posielať cez mail.

Ale poďme k veci.
Samozrejme, že to pôjde zapisovať aj do tabuľky, a to hneď niekoľkými spôsobmi - predpokladám však, že to bude oveľa zložitejšie, ako keby si si tie súbory načítal cez PHP, parsoval ich a vytváral z nich tabuľku.
Ak ale naozaj chceš, môžem ti načrtnúť, ako asi sa to dá do tej tabuľky zapisovať - <(mimochodom)>potrebuješ to na nejakú rozsiahlu štatistiku alebo také niečo?</$1>
Coompiik
Profil
Kubo2:
Potřebuju to hned na tři věci:
Na takovej menší changelog do soukromí webovky pro 10 členů kterej budu jednou tejdě promazávat,
Pak v podstatě to stejný na jinou webkovku, akorát to už by byl takovej chat nebo jak to mam říct, promazávat to budu taky jednou tejdě, soukromej web cca 25 členů
A pak dotazník na web, moc lidí nepíše cca 1 příspěvek tejdně, promazával bych každej zkontrolovanej.
Předem dík moc, a ano zaslouží, každej kdo pomáhá nováčkům si to zaslouží ;)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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