webForumDet fria alternativet

Förhindra att data skickas till databas vid uppdatering?

PHP

7 svar · 1 618 visningar · startad av kato

Medlem sedan juni 20115 inlägg
Frågan#1

Jag har gjort en sida där jag vill att användarna ska kunna göra inlägg och kommentarer. Kommentarerna skrivs in via ett formulär, som ligger på en egen sida och skickas till en databas, varifrån de hämtas och visas på index-sidan. Problemet är att varje gång man uppdaterar index-sidan, så skickas den senast inlagda kommentaren en gång till till databasen. Hur kommer jag runt detta problem? Jag har letat och tror att det har något med header()- eller isset()-funktionerna att göra. Stämmer det? Hur funkar det i så fall? Tacksam för hjälp!

Medlem sedan juni 20006 031 inlägg
#2

Koden som du nu har i index sidan som lägger till i databasen med flyttar du till en egen fil.
Sen lägger du till header koden nedan i den nya filen (efter att du har kört din insert).

header("Location: index.php");
exit;

/edit
Välkommen till wF :bire

Medlem sedan juni 20115 inlägg
#3

Pedda skrev:

Koden som du nu har i index sidan som lägger till i databasen med flyttar du till en egen fil.
Sen lägger du till header koden nedan i den nya filen (efter att du har kört din insert).

header("Location: index.php");
exit;

/edit
Välkommen till wF :bire

Tack! :) SÅ nu har jag skapat filen save_comment.php och lagt in följande kod i den:

<?php
$comment_author = $_POST['comment_author'];
$comment_head = $_POST['comment_head'];
$comment_post = $_POST['comment_post'];
$comment_date = $_POST['comment_date'];

$connection = mysql_connect ("*******.mysql.binero.se", "114577_nm35952", "******");
mysql_select_db("114577-*****", $connection);

mysql_query("SET NAMES 'utf8'", $connection);

$query = "INSERT INTO comment (comment_head, comment_author, comment_post, comment_date) VALUES ('$comment_head', '$comment_author', '$comment_post', '$comment_date');";
$result = mysql_query($query, $connection);

header("Location: index.php");
exit; 
?>

Nu får jag dock inte in något i databasen över huvud taget... :( Vet inte om det är fel i den här filen eller nån annanstans.

Medlem sedan mars 200986 inlägg
#4

Du har inte glömt att ändra adressen som datan skickas till i ditt formulär? Den ska ju inte längre skickas till index.php, utan till save_comment.php. Bara en snabb tanke från min sida, vilken kan vara enkel att missa =). För din PHP-kod fungerade väll innan?

<form action="save_comment.php" method="post">
....
</form>

----------------------------------------
Edit:
Annars är det bra att använda sig utav felhantering/spårutskrifter när man får fel t.ex. kontrollera så att det inte är några problem att skicka data till databasen (slutet av din kod):


if(mysql_query($query, $connection)) // Om allt går som det ska
{
     header("Location: index.php"); 
     exit;
}
else // Om det inte går att skriva till databasen
{
     echo "Det gick inte att skriva till databasen...";
}
Medlem sedan juni 20115 inlägg
#5

Ok. Nu funkar mitt ena kommentarsfält i alla fall, bara det att det postas dubbelt!

Medlem sedan juni 20115 inlägg
#6

Nån som fattar varför det blir dubbelt? Här är koden i save_comment.php:

<?php
$connection = mysql_connect ("***-***.mysql.binero.se", "***_nm35952", "***");
mysql_select_db("***-***", $connection);

mysql_query("SET NAMES 'utf8'", $connection);	

$comment_author = $_POST['comment_author'];
$comment_head = $_POST['comment_head'];
$comment_post = $_POST['comment_post'];

$query = "INSERT INTO comment (comment_post, comment_head, comment_author) VALUES ('$comment_post', '$comment_head', '$comment_author');";
$result = mysql_query($query, $connection);

if(mysql_query($query, $connection)) // Om allt går som det ska
{
     header("Location: index.php"); 
     exit;
}
else // Om det inte går att skriva till databasen
{
     echo "Det gick inte att skriva till databasen...";
}  
?>

Och här är koden i index.php:

<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>Titel</title>
		<link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<body>
<?php
$connection = mysql_connect ("***-***.mysql.binero.se", "***_nm35952", "***");
mysql_select_db("***-***", $connection);

mysql_query("SET NAMES 'utf8'", $connection);	

?>
		<div id="wrap">
			<div id="header">
					
			</div>
			<div id="content">
				<h1>Rubrik</h1>
				<p>... Texttexttext </p>
				
				<div id="blog">
					<h2>Rubrik:</h2>
					<a href="make_blogpost.html">Skriv inlägg</a>
<?php
	
$query = "SELECT * FROM blog ORDER BY id;";
$result = mysql_query($query, $connection);

while($array = mysql_fetch_array($result)) {
    echo "<h3>".$array["blog_head"]."</h1>";
    echo "<h4>".$array["blog_author"]."</h2>";
    echo "<p>".$array["blog_post"]."</p>";
}

?>
					</div>
				
				<div id="rightcol">
					
				<div id="comment">
					<h3>Senaste kommentarer:</h3>
					<a href="make_comment.html">Gör ett inlägg</a>
				
<?php

$query = "SELECT * FROM comment ORDER BY id;";
$result = mysql_query($query, $connection);

while($array = mysql_fetch_array($result)) {
    echo "<h3>".$array["comment_head"]."</h1>";
	echo "<h4>".$array["comment_author"]."</h2>";
    echo "<p>".$array["comment_post"]."</p>";
}

mysql_close($connection);
?>
				</div>
				</div>
			</div>
			
			<div class="clear">
			</div>
			<div id="sidfot">
				&copy blablabla
			</div>
		</div> 
	</body>
</html>
Medlem sedan juni 20006 031 inlägg
#7

I save_comment.php ändrar du raden:

if(mysql_query($query, $connection)) // Om allt går som det ska
{
     header("Location: index.php"); 
     exit;
}
else // Om det inte går att skriva till databasen
{
     echo "Det gick inte att skriva till databasen...";
}

till:

if(!result)) // Om allt inte går som det ska
{
     echo "Det gick inte att skriva till databasen...";
}
else // Om det går att skriva till databasen
{
     header("Location: index.php"); 
     exit;
}

Förklaring: mysql_query returnerar false om din insert misslyckas.

/edit
blev lite fel först

Medlem sedan juni 20115 inlägg
#8

Pedda skrev:

I save_comment.php ändrar du raden:

if(mysql_query($query, $connection)) // Om allt går som det ska
{
     header("Location: index.php"); 
     exit;
}
else // Om det inte går att skriva till databasen
{
     echo "Det gick inte att skriva till databasen...";
}

till:

if(!result)) // Om allt inte går som det ska
{
     echo "Det gick inte att skriva till databasen...";
}
else // Om det går att skriva till databasen
{
     header("Location: index.php"); 
     exit;
}

Förklaring: mysql_query returnerar false om din insert misslyckas.

/edit
blev lite fel först

Tack! Nu funkar det!

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)