Autor | Zpráva | ||
---|---|---|---|
Obsi Profil |
#1 · Zasláno: 27. 2. 2011, 12:09:48 · Upravil/a: Obsi
Dobrý den,
Potřeboval bych udělat mazání příspěvků v mé jednoduché diskusi, udělané podle tohoto návodu. Pěkně dlouho jsem googlil, hledal a dělal všechno možné, ale došel jsem k závěru, že asi PHP neumí smazat jen část jednoho souboru. Proto mi došlo, že by se každá zpráva musela ukládat do samostatného souboru.. Takže jsem googlil a zjistil jsem, že unikátní název souboru se dá udělat pomocí time() <?php include "$nazevsouboru";?> a $nazevsouboru= Time() $id=$nazevsouboru <input type="text" name="smaz"> unlink("$smaz"); Prosil bych vás, jestli byste mi tuto metodu nějak neopravili, nebo nenavrhli úplně jinou, nebo mi prostě řekli, že to nejde. S PHP začínám, tak prosím žádné brutálnosti. :-) Doufám, že jsem vás pobavil. :-) |
||
panther Profil |
#2 · Zasláno: 27. 2. 2011, 12:19:14
Obsi:
obsah tohoto formulářového políčka bude $_GET['smaz'] nebo $_POST['smaz'] v závislosti na hodnotě atributu action u formuláře.
ad include: include $promenna . '.php';
„nebo nenavrhli úplně jinou“ já bych být tebou ukládal do DB, ale to je na tobě, jestli se chceš učit nebo ne. Nevím, odkud ty články chceš mazat, předpokládám, že z nějaké „administrace“, kam máš přístup jen ty. Pak bych volil ne formulář, ale u každého článku odkaz delete.php?id=1234 . V delete.php by pak byla kontrola, zda je vyplněné ID a podle toho smazal soubor. Pro vlastní potřebu to tobě možná postačí.
|
||
Obsi Profil |
#3 · Zasláno: 27. 2. 2011, 12:43:24
Jsem vůl, dal jsem špatný odkaz, je to jen velmi jednoduchá diskuse (příklad: http://www.jakdelatweby.cz/php/priklady/diskuse-2.php ), né žádné články..
Tím include si asi myslel to Time().. Takže by šlo Time() . '.php'; Je to soukromá diskuse s pár lidmi, hostovaná na freehostingu endora.cz a ten podporuje i MySQL databázi, ale s ní vůbec nic neumím. Nikdy nic nikde nijak jsem s ní nedělal. |
||
Chro Profil |
#4 · Zasláno: 27. 2. 2011, 13:39:17
Obsi:
Pro ID založené na času můžeš použít kód: $mikrocas = microtime(TRUE); //hodnota např. 1234567890.6543 $id = base_convert($mikrocas, 10, 36); //převod do 36. soustavy, znaky a-z 0-9 echo $id; //zobrazí např. w4o8qz Do jednoho souboru lze ukládat více příspěvků, jen si je musíš oddělit nějakým separátorem. Příklad obsahu souboru diskuse.txt: První příspěvek od Taťány text <{{{((([[[SEPARATOR:POST]]])))}}}> Druhý příspěvek od Borise text <{{{((([[[SEPARATOR:POST]]])))}}}> Třetí příspěvek od Voloďy text Ve skriptu je pak vytáhneš např. tímto kódem: if (file_exists('diskuse.txt')) { $prispevky = file_get_contents('diskuse.txt'); $pole_prispevky = explode('<{{{((([[[SEPARATOR:POST]]])))}}}>', $prispevky); foreach ($pole_prispevky as $prispevek) { list($nadpis, $autor, $text) = explode("\n", trim($prispevek)); echo $nadpis.'<br>'.$autor.'<br>'.$text."<hr>\n"; } //A jdem mazat.. $vymaz = 2; if (isset($pole_prispevky[$vymaz-1])) { unset($pole_prispevky[$vymaz-1]); //druhý příspěvek smazán } file_put_contents('diskuse.txt', implode('<{{{((([[[SEPARATOR:POST]]])))}}}>', $pole_prispevky)); //spojíme pole do řetězce a řetězec uložíme do souboru } |
||
Obsi Profil |
#5 · Zasláno: 27. 2. 2011, 15:57:20 · Upravil/a: Obsi
A tedy to vše v jednom souboru? Půjdou tedy takto jednoduše mazat příspěvky? Dalo by se to nějak přeložit? Moc tomu nerozumím.. Něco jsem vygooglil, ale tak trochu.. nechápu.
U toho času mě napadlo, že by šlo to udělat jak jsem psal v 1. příspěvku.. U každého příspěvku by bylo <span style="display: none;">$id</span>koukal bych se do zdroje. Mazal bych to tím formulářem.. To je taky možnost, ale ta Chroova druhá je lepší.. |
||
Chro Profil |
#6 · Zasláno: 27. 2. 2011, 17:17:42
Na mazání příspěvků musíš mít nějakou administraci (stránku), v ní formulář, kde zadáš heslo, ID a klikneš na OK. Tedy pokud nechceš mít např. odkaz Smaž teď hned u každého příspěvku a ponechat volnou ruku v mazání komukoli. Bez detailních podrobností jak by to celé mělo vypadat a fungovat, nebo bez ukázek již existujících kódů, bohužel neumím poradit.
|
||
Obsi Profil |
#7 · Zasláno: 27. 2. 2011, 19:54:45
Nenene, budu to obsluhovat sám... Co v tom tvém příspěvku nechápu, je proměnná $pole_prispevky a
unset($pole_prispevky[$vymaz-1]); //druhý příspěvek smazán } file_put_contents('diskuse.txt', implode('<{{{((([[[SEPARATOR:POST]]])))}}}>', $pole_prispevky)); //spojíme pole do řetězce a řetězec uložíme do souboru |
||
Chro Profil |
#8 · Zasláno: 27. 2. 2011, 20:36:02
Tuhle část
//A jdem mazat.. $vymaz = 2; if (isset($pole_prispevky[$vymaz-1])) { unset($pole_prispevky[$vymaz-1]); //druhý příspěvek smazán } můžeš klidně z kódu vymazat, ignorovat. Jde jen o příklad, jak lze z pole s příspěvky (které se následně spojí funkcí implode a uloží do souboru funkcí file_put_contents) vymazat příspěvek, pokud znáš jeho pořadí v souboru. |
||
Obsi Profil |
#9 · Zasláno: 28. 2. 2011, 16:02:45
Tak sem dávám kód, kterým zapisuji příspěvky...
<?php $jmeno = $_POST['jmeno']; $email = $_POST['email']; $web = $_POST['web']; $zprava = $_POST['zprava']; $timeDate = $_POST['timeDate']; $letapane = $_POS['letapane']; $jmeno=HTMLSpecialChars($jmeno); //převede některé znaky na enity $email=HTMLSpecialChars($email); $web=HTMLSpecialChars($web); $zprava=HTMLSpecialChars($zprava); $jmeno=stripslashes($jmeno); //odstraní lomítka $email=stripslashes($email); $web=stripslashes($web); $zprava=stripslashes($zprava); $zprava = str_replace("\n"," <br> ", $zprava); //nové řádky nahradí <br> $zprava = substr($zprava, 0, 10000);//zpráva bude mít maximálně 10000 znaků $email_celek=" | <a href='mailto:$email'>$email</a>"; $web_celek=" | <a href='$web'>$web</a>"; $timeDate = date('j.n H:i'); $letapane = date('Y'); if ($web=="http://"){$web_celek="";} //pokud se nevyplní nic se nevypíše if ($email==""){$email_celek="";} // -||- if ($zprava!="" and $jmeno!=""){ //provede se pokud není prázdná zpráva a jméno $celek="<p>Zprávu poslal/a <strong>$jmeno</strong>$email_celek $web_celek<br>|<i class='datum'>$timeDate léta Páně $letapane</i></p><p>$zprava</p><hr>"; $soubor = fopen ('./zpravy.php','a'); //otevře soubor pro doplňování fwrite ($soubor, $celek); //zapíše zprávu fclose ($soubor); //zavře soubor } ?> |
||
Časová prodleva: 10 dní
|
|||
Obsi Profil |
#10 · Zasláno: 10. 3. 2011, 10:04:59 · Upravil/a: Obsi
Napadla mě další věc, nejjednodušší (:D to je slovo). Do textovýho pole by se vypsal obsah souboru se zprávama (zpravy.php) a já bych to upravil a uložil.. Tím by se původní soubor přepsal, tím, co jsem upravil.. Otázky zní:
Jak načíst zpravy.php do textarey? #To už jsem jakž takž vyřešil <textarea><?php include "zpravy.php";></textarea> Jak přepsat původní soubor? #Po pokusu, tak $soubor = fopen('./zpravy.php','w'); //pokud kolem ./zpravy.php nedám ' a ' hlásí mi to chybu. fwrite ($soubor,$edit); fclose ($soubor); Díky a omlouvám se, jestli někoho obnovení vyrušilo. ///Další edit.. Ono to zprávy maže, ale všechny. :D S tím je teď co? |
||
Obsi Profil |
#11 · Zasláno: 12. 3. 2011, 18:47:59 · Upravil/a: Obsi
Takže vyřešeno!
Takto: //edit.php <!doctype html> <html> <body> <meta charset="UTF-8"> <form action="smaz.php" method="POST"> <textarea name="edit" cols="500" rows="600"><?php include "zpravy.php";?></textarea> <input type="submit" value=Edituj> </form> .. //smaz.php <?php $edit=$_POST['edit']; $po_editaci=$_POST['po_editaci']; $po_editaci=$edit; echo "<strong>PŘÍSPĚVEK BYL SMAZÁN</strong>"; $soubor = fopen('./zpravy.php','w'); fwrite ($soubor,$po_editaci); fclose ($soubor); ?> |
||
Časová prodleva: 13 let
|
0