Olen tallentanut lomakkeesta tiedoston palvelimelle ja tekstin tietokantaan. Nyt haluan poistaa tämän kyseisen tekstin ja stiä vastaavan tiedoston. Tiedosto kyllä poistuu, mutta teksti ei poistu tietokannasta. Nyt on >>
if ($_REQUEST[del]) {
$teksti_lomake = $_POST['teksti_lomake'];
$teksti2;
$sql_lauseke = "delete from XXX WHERE teksti='$teksti_lomake'";
if (!$kysely2 = mysql_query($sql_lauseke,$yhteys))
{
$teksti2 = "Epäonnistui";
}
else
{
$teksti2 = "Onnistui";
}
unlink($_REQUEST[del]);
}
Tietokannassa siis nimellä teksti.
if ($_REQUEST[del]) {
$teksti_lomake = $_POST['teksti_lomake'];
$teksti2;
$sql_lauseke = "delete from XXX WHERE teksti='$teksti_lomake'";
if (!$kysely2 = mysql_query($sql_lauseke,$yhteys))
{
$teksti2 = "Epäonnistui";
}
else
{
$teksti2 = "Onnistui";
}
unlink($_REQUEST[del]);
}
Tietokannassa siis nimellä teksti.
Vastaukset 9
Vanhimmat
"...mutta teksti ei poistu tietokannasta."
Tuleeko virhe ja minkälainen ?
Miksi $teksti2 on määritelty alussa ?
Onko yhteys muodostettu, missään sitä ei alusteta, miksi ?
Koitas laittaa $sql_lauseke - muuttujan jälkeen
echo $sql_lauseke;, mitä tulostuu ?
Ei tule minkäänlaista virhettä. Tai koska antamani koodi on osa pitempää koodia, niin tulee ilmoitus että tiedoston poisto onnistui. Tiedosto on poistunut, mutta teksti tietokannasta ei. On yhteys muodostettu, tuo on tosiaan vaan osa koodia. Periaatteessa en tarvitsisi ilmoitusta, onnistuuko tekstin poisto kannasta. Eli tuo $teksti2 ja ilmoitus ei lopullisessa tule jäämään, kunhan molemmat poistuisi.
Ei tulosta mitään echo $sql_lauseke; -lausekkeella. Tai edelleen tulostuu poisto onnistui.
tuo vertailu näin:
$kysely2 = mysql_query($sql_lauseke,$yhteys);
if ($kysely2)
{
$teksti2 = "Onnistui";
}
else
{
$teksti2 = "Epäonnistui";
}
Tuossa Ruussi koko koodi, jos löydät jotain häikkää. Tai varmasti löydät mut nimenomaan tärkeintä olis et sais ton poiston onnistumaan myös tietokannasta.
"$sql_lauseke = "delete from referenssit_internet WHERE teksti='$teksti_lomake'";"
Ei hyvä, käytä ennemmin id tunnusta jolla poistat.
"[poista]"
Tuossa se ongelma on urlencode($file) tuo koodaa $file sisällön ja koodatussahan muodossa tietokannassa tekstiä ei ole joten mitään ei voida poistaa. Käytä http://fi2.php.net/manual/fi/function.urldecode.php joka tekee saman muotoses kuin tietokannas on.
Eli id näinkö >
$sql_lauseke = "delete from referenssit_internet WHERE id='$id'";
Mutta osaako se id:n perusteella hakea kun lomakkeesta syötetään teksti ja tiedosto. Tiedosto siis tallennetaan palvelimelle ja teksti tietokantaan. Osaako sitten tiedostoa poistettaessa poistaa myös oikean tekstin?
Urldecode siis vain urlencode:n tilalle? Perhana ku on jumittanut nyt tähän koko projekti ja deadline pukkaa päälle.
"$sql_lauseke = "delete from referenssit_internet WHERE id='$id'";"
Kyl, tuo id tulee sit $_GET['id'] ja laitat sen varmuuden vuoks http://fi.php.net/manual/fi/function.mysql-real-escape-string.php kaut. Tämä sen takia ettei pysty tekee haitallista juttua tietokantaan.
"Mutta osaako se id:n perusteella hakea kun lomakkeesta syötetään teksti ja tiedosto."
Ei. Joudut syöttää myös id tunnisteen tai mielummin pelkästään sen.
"Osaako sitten tiedostoa poistettaessa poistaa myös oikean tekstin?"
Kyl kyl. Siis tulostat admin sivun josta saa tietoja poistaa?
sul on kannassa
ID | TEKSTI | JNE...
1 | teksti | jne...
2 | 222222 | jne...
Tulostat linkiksi poista.php?id=1 tai miten nyt haluatkin.
Sitten teet kyselyn
DELETE FROM referenssit_internet WHERE id = 1
Tämän jälkeen tietokannas on vain 2 | 222222 | jne...
"Urldecode siis vain urlencode:n tilalle? "
Ei. Kun tulostat selaimelle linkin niin käytät urlencode (koodaat siis erikoismerkit selaimen ymmärtämään muotoon). Kun taas käyttäjä klikkaa sitä niin laitat sen urldecode kautta ja lisäät sen kyselyysi (siis poistat tuon koodauksen). Tätähän et tartte jos teet tuol id jutul joka on parempa keino.
Älä välitä kun kirjoitin isol tuohon SQL lauseeseen, yleisen ohjeen mukaan tietokannan omat komennot kirjoitetaan isol jolloin ne on helppo erottaa.
ja tiesithän että linkkin
poista.php?id=1 tieto otetaan aina $_GET['id']
$_POST['id'] ainoostaan vain silloin jos tieto tulee lomakkeelta joka käyttää post metodia. Jos lomakkeen sisällä linkki niin se on $_GET koska se ei ole lomake vaan linkki. Jos käytät $_GET['id'] tilal $_POST['id'] niin se onkin tyhjä ei sisällä tarvittavaa tietoa. Sul on tuol koodis sekasin nämä.
Nyt on ensin:
$kysely = mysql_query("SELECT * FROM referenssit_internet",$yhteys);
for($i = 0; $i < mysql_num_rows($kysely); $i ){
$id = mysql_result($kysely,$i,0);
}
$filelist .= "[poista]";
Ja poisto:
$poisto = $_GET['id'];
mysql_query("delete from referenssit_internet WHERE id='$poisto'",$yhteys);
unlink($_REQUEST[del]);
Hakee id:n linkkiksi, mutta ei osaa nyt poistaa tiedostoa eikä tekstiä. Jotain häikkää?
"for($i = 0; $i < mysql_num_rows($kysely); $i ){
$id = mysql_result($kysely,$i,0);
}"
Tutustuppas http://fi.php.net/manual/fi/function.mysql-fetch-assoc.php tuota keinoa kannattaa ennemmin käyttää linkkien tulostamiseen selvemp. Ja tähteä EI kyselyssä käytetä muutakuin testivaihees, se hakee kaik sarakkeet vaik tarttetkin vain yhtä.
"$poisto = $_GET['id'];
mysql_query("delete from referenssit_internet WHERE id='$poisto'",$yhteys);"
Kyl tuon pitäisi poistaa. Muuta tuo SELECT kyselyksi ja katso mitä palauttaa.
"unlink($_REQUEST[del]);"
Ei toimi koska $_REQUEST[del] on tyhjä.
Teeppäs tämmönen linkki
poista_internet.php?id=$id&tiedosto=$tiedosto
Sit käytät $id tietokannast poistamiseen ja $tiedosto tiedoston poistamiseen.
Koodisi on kyl ihmeellistä. for-loopissa käyt kaik läpi mitä tietokannasta saat, mutta tulostatkin vain vikan rivin, kun $filelist loopin ulkopuolel.