Moi, taas uusi ongelma, edellinen jo ratkesi.
Mikä tässä on vikana?
Tallentaja (update_frontpage.php):
<?php try { $yhteys = new PDO("mysql:host=MYSQL-PALVELIN;dbname=TIETOKANNAN-NIMI", "TIETOKANNAN-KÄYTTÄJÄNIMI", "TIETOKANNAN-SALASANA"); } catch (PDOException $e) { header("Location: dashboard.php?error=1"); // Uudelleenohjataan käyttäjä sivulle, jossa sanotaan, että tietokantaan yhdistämisessä tapahtui virhe. } $yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $yhteys->exec("SET NAMES utf8"); // PDOn yhteydenmuodostus näytetään vain tässä, koska jos se on tästä kiinni. Ja oikesti tiedosto sijaitsee tiedostossa "mysql_conn.php" $kysely = $yhteys->prepare("UPDATE frontpage SET title = ? AND content = ?"); $kysely->execute(array(htmlspecialchars($_POST['title']), htmlspecialchars($_POST['content']))); header("Location: dashboard.php?done=1"); // Ohjataan käyttäjä sivulle, joka kertoo, että sisältö on vaihdettu ?>
Formi (dashboard.php):
<?php include("mysql_conn.php"); // Tiedoston sisältö on PDOohon yhteydenmuodostus, katso edellisestä. $frontpage_pdo = $yhteys->prepare("SELECT * FROM frontpage"); $frontpage_pdo->execute(); $row = $fronpage_pdo->fetch(); ?> <form action="update_frontpage.php" method="post"> Otsikko: <input type="text" value="<?php echo $row['title']; ?>" name="title"><br /> Sisältö: <textarea name="content"><?php echo nl2br($row['content']); ?></textarea><br /> <input type="submit" value="Päivitä"> </form>
Tietokannassa on vain yksi rivi, jota päivitetään koko ajan. Kun lomake lähetetään, pitäisi uusi teksti vaihtaa vanhan tekstin tilalle. Näin olen kuvitellut, että niin se toimisi. Tässä vielä tietokannasta teksitmuotoinen kuva:
title | content ------------------------- Otsikko! | Moi, hei!
Kun käyttäjä lähettää vaikka titleksi "heippa" ja contentiksi "tirppa" muuttuu taulu näin:
title | content ------------------------- 0 | Moi, hei!
Eli title muuttuu nollaksi ja content ei muutu. Missä vika?
Muuta kysely
UPDATE frontpage SET title = ? AND content = ?
muotoon
UPDATE frontpage SET title = ?, content = ?
niin pitäisi toimia.
Tällä hetkellä MySQL tulkitsee tuon jotenkin oudosti AND-operaationa.
Okei, kiitos!
muistan kun itsellä oli sama pilkku-ongelma WHERE-ehdoissa joskus :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.