Eli pikku-ongelma on tiedoston avaaminen linkistä muokkausta/poistamista varten.
Skripti on tämän tapainen:
<a href="admin.php?muokkaa=<?php echo $rivi[0]">
Tuohon $rivi[0] tulee teksti "palat/jokin_satunnainen_tiedosto.txt".
Myöhemmässä skriptissä tuo ei virkkanut mitään eli tuon $rivi[0] tiedot kai ei pysynyt perässä. Miten tuo tulisi mennä? Tartteeko jonkinlaista whileä?
Jos tuo on noin koodissakin niin kokeilepa muuttaa se:
<a href="admin.php?muokkaa=<?php echo $rivi[0]; ?>">
Jollei auta niin pistäpä vähän enemmän koodia tänne, kuten esim. se kohta jossa tiedostot luetaan $rivi taulukkoon
Katos, ei se noin ole koodissa, on siinä tuo puolipiste. Olen sen jälkeen muuttanut koodia määrittämällä muuttujan $rivi[0] nimeksi $tiedot, niin on sitä helpompi kirjoitella...
Tässä linkki:
<a href="admin.php?muokkaa=<?php echo $tiedot; ?>">
Tässä luku;
if ($_GET['muokkaa']=='tiedot') { $df=file($tiedot); echo "Käsitellään: ".$tiedot." Huom: Älä käytä muokatessa rivinvaihtoa!<br>"; echo "<form action='admin.php?muokkaa=vaikea_merkkijono2&tiedot=".$tiedot."' method='post'>"; echo "<textarea name='data' rows=20 cols=90>"; for ($i=0;$i<count($df);$i++) { echo $df[$i];} } echo "</textarea><br>"; echo "<input type='submit' value='tallenna'>"; echo "</form>";
Ei sano mitään... Haittaako tuo "/" kauttaviiva tuossa if-lauseessa, joka tulee $tiedot muuttujan mukana?
Kyse on samankaltaisesta toiminnosta kuin täällä tuo muokkaa (jossa tällä hetkellä ei ole linkkiä noissa ylemmissä (tähän tuli linkki, kun tallensin viestin)), mutta ilman Mysqliä.
Tuo If-lause ei tule toteutumaan koskaan, jos linkin osoitteeksi tulee esim:
admin.php?muokkaa=satunnainen_tiedosto.txt
Nyt kun mennään lukurutiiniin, niin If-lauseessa tarkistetaan onko muokkaa-parametrin sisältö merkkijono "tiedot" vaikka sen sisältönä on tiedostonnimi. Oletin tässä että $tiedot muuttujan sisällöksi tulee jonkin tiedoston nimi (kuten olet 1. viestissä kertonut)
Nyt sain sen tuon iffin sisään, kun muutin linkin yläpuolelle näin;
$tiedot=str_replace("lat/","latX",$tiedot); $tiedot=str_replace(".txt","_txt",$tiedot);
Iffissä olen muuttanut takaisin tiedostonimeksi
Tulostaa pelkän submit nappulan, ei avaa textareaan.
lainaus:
Tulostaa pelkän submit nappulan, ei avaa textareaan.
Oikeastaan ei tulosta ollenkaan textareaa.
Löysin itse yhden ylimääräisen } sulun:
echo $df[$i];}
Mutta nyt se taas ei pääse sisään iffiin.
Tuolla on näkyvissä tämän hetkinen koodi, joka liityy tuohon muokaamiseen:
http://www.pm-netti.com/testi/projekti/admin.php
Toistaiseksi sen tulisi avata muokkausikkuna viestien alle.
lainaus:
Tuolla on näkyvissä tämän hetkinen koodi, joka liityy tuohon muokaamiseen:
http://www.pm-netti.com/testi/projekti/admin.php
Tuon koodin toiminnan perusteella katselin, että osoitteen mukana välitettävä $muokkaa parametri sisältää viestin ajan ja tiedoston nimen - otetaan nyt esimerkiksi se 1. viesti ja sen Muokkaa-linkki:
admin.php?muokkaa=palatX03453480503pekka_mansikka_txt
Nyt siis $muokkaa muuttujassa on sisältönä "palatX03453480503pekka_mansikka_txt" merkkijono. Kuitenkin ensimmäisessä If-lauseessa
if ($_GET['muokkaa']=="tiedot")
tarkistetaan löytyy em. $muokkaa muuttujasta merkkijonoa "tiedot". Ja sitähän siellä ei ole koska siellä on se "palatX03453480503pekka_mansikka_txt" merkkijono. Tämän takia If-lause ei koskaan toteudu eikä sitä ajeta.
Näin sen koodin toiminnan olen em. osoitteessa ymmärtänyt toimivan.
PS.
Niin ja rivi
if ($muokkaus=='vaikea_merkkijono2')
kannattaa muuttaa muotoon
if ($_GET['muokkaus']=="vaikea_merkkijono2")
koska $muokkaus muuttuja tulee GET-metodilla lomakkeen (form) lähetyksen aikana.
Kiitoksia! Keksin tuossa yhden homman; Laitoin tuon iffin ulkopuolelle komennon echo $muokkaa $tiedot;
Arvaas mikä oli tulos.
Tuo muokkaa sisälsi alkuperäisen linkissä olevan tiedoston nimen, sen sijaan $tiedot oli ottanut jostakin syystä tuon $max_indexin eli rivillä 10 olevan tiedoston nimen.
Tein tälläaisen yksinkertaisen lisäyksen linkkiin:
<a href="admin.php?id=edit&muokkaa=<?php echo $tiedot; ?>">
ja if-lauseen muutin :
if ($_GET['id']=="edit")
samoin tallennukseen muutin $tiedot =>$muokkaa, niin alkoi toimimaan.
Vielä on tuon kanssa pikku hommia tuon replacen kanssa. Nimittäin kun muuttaa esim. tuollaista koodi-viestiä, on hankala saada se tallentumaan alkuperäisesnä, varsinkin jos koodiviesti itsessään sisältää <br> -merkkijonon, joka täytyy säilyttää tallennuksessa htmlspecialcharsin avulla, mutta ne <br> -merkit, jotka on lisätty koodiin str_replacella, tulisi säilyttää muuttumattomina.
Vähän taisin sekoilla eilisiltana. Eihän tuossa taida olla mitään ongelmaa tuon suhteen. Str-replace vaan samoin kuin ennenkin:
$data=str_replace("\n","£&G",$data);
ja tuo £&G muutetaan htmlspecialcharsin jälkeen <br>:ksi.
Sitten siinä alkaakin tuo poiston suunnittelu. Se voi olla vielä hankalampi...
Aihe on jo aika vanha, joten et voi enää vastata siihen.