| 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: 15 let
|
|||
0