Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Evästeongelma

punppis [11.07.2007 18:07:00]

#

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.

tsuriga [11.07.2007 18:14:33]

#

<?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.

Antti Laaksonen [11.07.2007 19:44:13]

#

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.

punppis [14.07.2007 18:42:56]

#

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?

Blaze [14.07.2007 19:07:05]

#

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ö.

punppis [14.07.2007 19:41:01]

#

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!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta