MmanganMedlem sedan feb. 2003216 inlägg tjenare!
har en gästbok som består av en sida där man både postar mess och kollar i gästboken. När man skickar ngt ifrån formuläret till den egna sidan så går det alldeles utmärkt, men om jag sedan tar refresh i min browser så vill den skicka informationen igen vilket leder till att jag får ännu ett likadant inlägg i min gästbok.
Jag har testat att sätta mina skickade variabler till NULL efter det att dom lagrats i databasen men det hjälper inte, det frågas fortfarande om jag vill ta retry.....
Ska man "förstöra" värdena som skickats eller hur ska man göra?
Ngn som har en lösning?
MungoMedlem sedan jan. 2000372 inläggDet är troligen för att du submittat data via POST. Du kan lösa det genom att ha en separat PHP-sida för själva postningen till databasen som sen redirectar till gästbokssidan.
MatteMedlem sedan aug. 20002 975 inläggDet behövs ingen ny sida. Det räcker med att man laddar om sidan med header("Location: sida.php") efter att man sparat till databasen.
MmanganMedlem sedan feb. 2003216 inlägg det funka inte så bra.....
Warning: Cannot add header information - headers already sent by (output started at /customers/aptrut.com/aptrut.com/httpd.www/v3/gbtitta.php:8) in /customers/aptrut.com/aptrut.com/httpd.www/v3/gbtitta.php on line 48
fick jag istället......
jag kanske inte var tillräckligt tydlig så jag gör ett nytt försök:
sidan gbtitta.php laddas. ett inlägg görs och gbtitta.php laddas igen. inlägget skrivs till databasen och sedan skrivs alla inlägg ut. men det är sen det uppstår problem. om man tar refresh efter att man har gjort ett inlägg kommer det att postas igen och igen och igen så länge man gör refresh. någon slags tidsbegränsning av hur ofta man får posta nya meddelanden vill jag inte ha.
[php]
//----------skickar värden till databas om variabler tagits emot----------------
if ($namn != null && $text !=null){
$date = hamta_datum();
$tid = hamta_tid();
//skapar databaskoppling
$db = mysql_connect("localhost","XXXXXXX","XXXXXX") or die ("Databaskopplingen kuka ur!");
mysql_select_db("XXXXXX",$db);
//Skickar variablerna till databasen typer:datum=date,tid=string,namn=string,text=string
$sql="INSERT INTO aptrut_com.gastbok
(datum,tid,namn,text)
VALUES
('$date','$tid','$namn','$text')";
mysql_query($sql, $db);
}
//header("Location: gbtitta.php"); // denna raden gav felmeddelandet
//---------------skriver ut databasen-------------------------------
//-------formuläret------------
<form method="post" action="gbtitta.php" target="main">
Namn:<br>
<input type=text name="namn" size=30 maxlength=15><br>
Text:<br>
<textarea cols="28" rows="12" name="text">
MatteMedlem sedan aug. 20002 975 inläggFöre en header får man inte skicka något till webbläsaren. Ingen HTML, ingen echo eller print. Ej heller någon tomrad eller mellanslag före PHP-taggen.
Lägg din kod för att spara överst i skriptet, och se till att du inte skickar något till webbläsaren före headern.
MmanganMedlem sedan feb. 2003216 inlägg så du menar att jag ska lägga header() högst upp egentligen? blir det inte problem när jag skicka saker till sidan då från formuläret?
MatteMedlem sedan aug. 20002 975 inläggTvärtom.
Själv brukar jag försöka placera all kod som ska spara i databas mm överst i skriptet.
Endast det som hör ihop med utskrifter brukar jag lägga inne bland HTML-koden.
På så sätt får man ett bättre samlat grepp över koden när man samlar det som hör ihop med varandra.
MungoMedlem sedan jan. 2000372 inlägg...eller så gör man som jag föreslog och lägger det i olika filer. Det är mest en smaksak och alla programmerare har sina egna idéer och rutiner...
MmanganMedlem sedan feb. 2003216 inlägg jag får ingen ordning på det här.......
nu ser min kod ut så här rent tankemässigt:
1. php-block med kod för eventuella inlägg, avslutas med header("Location: gbhitta.php")
2. html-block med utskrift av formulär och gästbok(php/mysql)
snart så blir det väl en "mellansida" antagligen......
MatteMedlem sedan aug. 20002 975 inläggEn tomrad eller mellanslag före den inledande PHP-taggen resulterar i att något skickas till webbläsaren.
Inkluderar du en fil får du dessutom se till att det, i den inkluderade filen, inte finns något tomtecken efter den avslutande PHP-taggen.
Har du en inkluderad fil så sätt markören efter den avslutande PHP-taggen och tryck upprepade gånger på delete så du är säker på att där inte finns något.
Kan du visa hur din kod ser ut nu, fram till och med header() ?
MmanganMedlem sedan feb. 2003216 inlägg hade inga mellanslag eller tomma rader där du sa att jag skulle kolla. här kommer koden fram till header().
<?php
include("funkis.php");
//----------skickar värden till databas om variabler tagits emot----------------
if ($namn != null && $text !=null){
$date = hamta_datum();
$tid = hamta_tid();
//--------------formaterar texten-------------------------
$text = strip_tags($text); //strippar på html och php taggar
$text = str_replace("fanskap","kiss",$text);
$text = str_replace("fan","apa",$text);
$text = str_replace("hemma","i kojan",$text);
$text = str_replace("jäkla","nedrans",$text);
$text = str_replace("skit","guano",$text);
$text = nl2br($text);
//skapar databaskoppling
$db = mysql_connect("localhost","X","X") or die ("Databaskopplingen balla ur!");
mysql_select_db("X",$db);
//Skickar variablerna till databasen typer:datum=date,tid=string,namn=string,text=string
$sql="INSERT INTO X.gastbok
(datum,tid,namn,text)
VALUES
('$date','$tid','$namn','$text')";
mysql_query($sql, $db);
}
header("Location: gbtitta.php");
?>
sen är det bara utskriften som görs via html och php/mysql.
NnkrantzMedlem sedan apr. 2002830 inlägg hur ser det ut i funkis.php filen då? Kanske finns något där som skriver ut html
MmanganMedlem sedan feb. 2003216 inlägg ingen html i funkis men här e den:
<?php
//funktion som hämtar datum och formaterar den ex. 030103
function hamta_datum() {
$today = getdate();
if ($today['mon'] < 10) {
$mon = "0".$today['mon'];
} else {
$mon = $today['mon'];
}
if ($today['mday'] < 10){
$day = "0".$today['mday'];
} else {
$day = $today['mday'];
}
return $date = $today['year'].$mon.$day;
}
//funktion för att hämta aktuell tid och formatera den ex. 20:03:30
function hamta_tid(){
$todag = getdate();
if ($todag['seconds'] < 10) {
$sec = "0".$todag['seconds'];
} else {
$sec = $todag['seconds'];
}
if ($todag['minutes'] < 10) {
$min = "0".$todag['minutes'];
} else {
$min = $todag['minutes'];
}
if ($todag['hours'] < 10) {
$hour = "0".$todag['hours'];
} else {
$hour = $todag['hours'];
}
return $time = $hour.":".$min.":".$sec;
}
?>
MatteMedlem sedan aug. 20002 975 inläggHar du kollat upp så du inte har något mellanslag, tomrad eller dylikt, både före och efter PHP-taggarna i funkis.php ?
Hur ser felmeddelandet ut nu ?
MmanganMedlem sedan feb. 2003216 inlägg well....vad ska man säga. den laddar typ för alltid.... det kommer inte ngn sida alls. har dubbelkollat och trippelkollat alla inblandade scriptfiler. det finns inga mellanslag eller extra rader före eller efter php-taggarna.
MatteMedlem sedan aug. 20002 975 inläggFlytta in headern i if-satsen.
Istället för:
<?php
include("funkis.php");
//----------skickar värden till databas om variabler tagits emot----------------
if ($namn != null && $text !=null){
.
.
.
}
header("Location: gbtitta.php");
?>
Skriver du:
<?php
include("funkis.php");
//----------skickar värden till databas om variabler tagits emot----------------
if ($namn != null && $text !=null){
.
.
.
header("Location: gbtitta.php");
exit;
}
?>
Som det nu är så fastnar du i en slinga där sidan hela tiden laddas om.
MmanganMedlem sedan feb. 2003216 inlägg OK! nu funkar det men problemet med att om man bara fyllde i sitt namn och skickade och sen tog refresh kvarstod. fick löst det med en enkel else if-sats:
else if($namn != null || $text != null){
header("Location: gbtitta.php");
exit;
}
tack så jättemycket för hjälpen allihop! :birp