Autor Zpráva
tos94
Profil *
Omlouvám se že obtěžuji, ale hledám to už dlouho i na tomto fóru, ale nepčicházím na to.:(
$smazne = $_POST["smazat"];
if (file_exists("zapis.html")) {
                $soubor=fopen("zapis.html", "a++");    
                $zaklad = "<p>Obrázek s názvem $smazne</p>";
                if($soubor){
                    while (!feof($soubor)){
                        $radek = fgets($soubor,5000);
                        if ($zaklad == $radek){
                          $novy_obsah = str_replace("<p>Obrázek s názvem $smazne</p>","",$soubor);
                        }
                        else{
                       print("nejde<br>");
                        }            
                    }
                } 
                else 
                {
                    print("Soubor se nepodařilo otevřít");
                }
           } 
           else 
           {
           print("Soubor neexistuje.");
           }
Jan Tvrdík
Profil
tos94:
A kde je otázka, problém?
tos94
Profil *
Omlouvám se, Otázka zní, Podmínka mi nikdy nevyjde True..


v souboru na prvním řádku je:
<p>Obrázek s názvem Auto</p>
zatímco "Auto" je proměnná generovaná z formuláře..
Davex
Profil
tos94:
$soubor=fopen("zapis.html", "a++");
Co je to za režim to a++?

Podmínka mi nikdy nevyjde True..
Pokud myslíš podmínku
 if ($zaklad == $radek){
tak je pravděpodobně na konci proměnné $radek ještě znak konce řádku.
tos94
Profil *
a+ nebo a++ by mělo být otevření souboru por čtení a zápis najednou, a pokud soubor neexistuje tak jej vytvoří => je to buď špatný režim nebo zbytečná podmínka.
myslím že by mohl být problém v tom koncovém znaku. Dá se nějak ošetřit tento problém?
Davex
Profil
tos94:
a+ nebo a++
Myslím, že druhé plus je zbytečné.

myslím že by mohl být problém v tom koncovém znaku. Dá se nějak ošetřit tento problém?
To by mohl vyřešit trim().
tos94
Profil *
mělo by být pouze a+ ale jsem zvyklý z C++ psát rovnou dvě + automaticky.


Výborně mockrát děkuji :) Konečně to funguje. :)
Kubo2
Profil
tos94:
Pre tento prípad je podľa mňa vhodnejšie použiť režim r+ (čítanie a zápis), a+ je zápis na koniec a čítanie (všimni si to poradie).
a++ - taký režim neexistuje, alebo o tom aspoň neviem (ale viď. to C++).
tos94
Profil *
Dobrá, máte pravdu, asi to bude lepší. Děkuji
Tos94
Profil *
Zdravím, mám opět problém, to samé. Předělal jsem to a naučil jsem se už i dělat popisky, zatím testovací fáze. Buď to smaže vše a nebo nic. Můžete prosím poradit? nevím si rady.
<!DOCTYPE html>
<html>
    <head>
        <title>Files</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <?php
        $akcion = 'delete'; // akce delete nebo write
        $name = $_POST["smazne"]; //id záznamu
        $radku = 12; //počet řádků, které se nebudou kopírovat
        //vkládání
        //if ($akcion == 'write') {
        //    $file = fopen('zapis.html', 'a');
        //    fwrite($file, '<h3>Picture ' . $name . '</h3>' . "\n");
        //    fwrite($file, '<img src="img/' . $name . '.jpg" alt="' . $name . '">' . "\n");
        //   fclose($file);
        //}

        //mazání
        //if ($akcion == 'delete') {
            $file = fopen('zapis.html', 'r');
            $content = '';
            $flag = 0;
            while (($buffer = fgets($file, 4096)) !== false) {
            
                //test prvního klíčového řádku
                if (strpos($buffer, '<p>Obrázek s názvem' . $name . '</p>') === 0)
                    //nastavení flagu na 1 - nebude se kopírovat    
                    $flag = 1;
                //když je nula, tak se obsah kopíruje, jinak ne
                if ($flag == 0)
                    $content .= $buffer;
                //když je větší než 0, tak inkrementuj
                if ($flag > 0)
                    $flag++;
                //když už je dostatek řádků, tak zase vynuluj
                if ($flag > $radku)
                    $flag = 0;  
                                 
            }
            var_dump($content);
            fclose($file);
            //zapíšeme nová obsah
            $file = fopen('zapis.html', 'w');
            fwrite($file, $content);
            fclose($file);
        //}
        ?>
    </body>
</html>

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: