Mulla on tässä nyt nettisivun koodaus vaiheessa ja tuli sitten eteen seuraavanlainen ongelma, kun koitan tehdä cookieta, niin saan errorin. Errori on
Warning: Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Pumppaaja\Desktop\sidor\uutiset-vasen.php:72) in C:\Documents and Settings\Pumppaaja\Desktop\sidor\edit_user_profile.php on line 33
Tässä vielä koodi
<?php function edituserprofile() { $username = $_COOKIE['username']; echo "<div class=\"keskiteksti\"><img src=\"images/uutinen_yla.jpg\" /><div class=\"leipateksti\"> Here you can edit your user information. <br /><br /> <form action=\"index.php\"> <input type=\"hidden\" name=\"page\" value=\"edituserdetails\" /> <input type=\"hidden\" name=\"tarkistus\" value=\"true\" /> <table> <tr><td>New Password:</td><td><input class=\"inputti\" type=\"password\" name=\"newpass\"/> (Leave these fields empty if you</td></tr> <tr><td>Retry New Password:</td><td><input class=\"inputti\" type=\"password\" name=\"newpass2\"/> don't want to change password)</td></tr> <tr><td></td><td><input type=\"submit\" value=\"Change\"/></td></tr> </table> </form>"; if($_GET['tarkistus'] == "true") { if($_GET['newpass'] == $_GET['newpass2']) { if(!strlen($_GET['newpass']) < 1) { $password = md5($_GET['newpass']); $username = $_COOKIE['username']; $yhteys = mysql_connect("localhost", "root", "") or die("Yhdistäminen ei onnistunut!"); mysql_select_db("neftum", $yhteys) or die("Tietokantaa ei löytynyt!"); $kysely = "UPDATE users SET password='$password' WHERE username='$username'"; mysql_query($kysely, $yhteys); mysql_close($yhteys); echo "<br />"; echo "User information updated!"; setcookie('password', $password, time()+31536000); } else { echo "<span class=\"error\">Password is too short</span>"; } } else { echo "<span class=\"error\">Passwords doesn't match!</span>"; } } echo "</div><img src=\"images/uutinen_ala.jpg\" /><br /></div>"; } ?>
Googlettelin, mutta ainoat ratkaisut jota tuohon on löytynyt, että olisi php tagien edessä tai takana "white spacea" jota ei ole. Tiedostossa ei ole muuta tekstiä kuin tuo koodi, joka on tuohon listattu.
WAMP5 default asetuksilla.
<?php echo "<div class=\..."; // tämä on sitä virheviestissä mainittua outputtia ?>
Funktiollesi voisit heittää parametrina käyttäjänimen, ja heittää tuon tarkistuksen ihan omaan funktioonsa. Tulostuksessa olisi helpompaa käyttää heittomerkkejä lainausmerkkien sijaan, ja kaikista helpoin olisi jättää HTML:n vieminen PHP-tulkin läpi pois. Ne, mitä pitää ajaa tulkin läpi, voi heittää omiin tulostusfunktioihinsa.
punppis kirjoitti:
Tiedostossa ei ole muuta tekstiä kuin tuo koodi, joka on tuohon listattu.
Mutta ennen evästeen asetusta koodissa on lukuisia echo-komentoja. Sivulle ei saa tälläkään tavalla tulostaa mitään ennen evästeen asetusta.
Tämähän tuottaa ongelmia.
Kun koodini on seuraavanlainen:
<?php include('ekasivu)'; ..... include('kaheksassivu)'; ?> <html> <body> <!-- Mainos alkaa --> Osta tietokone <!-- Mainos loppuu --> <?php if($_GET['page'] == "seittemäs") { $sivu = seittemas(); } else { $sivu = ekasivu(); } echo $sivu; ?> </body> </html>
Miten tämä sitten pitäisi toteuttaa kun käytän tuota setcookie()-funktiota yhdessä incluudatussa tieodostossa?
Sen sijaan, että echottelet tuota HTML:ää pitkin skriptiä, kerää se HTML johonkin muuttujaan, ja vasta kun kaikki PHP on suoritettu, tulosta tuon muuttujan sisältö.
Koska sivuni on tehty kuten on, niin sain ongelman ratkaistua sillä, että tein tuon samaisen if-sarjan ennen includeja index.php:hen, jonne sitten laitoin sen setcookien. Kiitos teille!
Aihe on jo aika vanha, joten et voi enää vastata siihen.