Varför inte bara kolla i PHP-koden om något av formulären var ifyllt med en IF-sats?
Om ett var ifyllt så kör vi resten av koden, annars lämnar vi det, typ.
Kan inte PHP, men i ASP skulle jag nog gjort så.
12 svar · 405 visningar · startad av kobranturre
Hej!
Så här ser min databas ut:
CREATE TABLE `inlagg` (
`id` INT NOT NULL AUTO_INCREMENT ,
`datum` VARCHAR( 11 ) NOT NULL ,
`tid` VARCHAR( 6 ) NOT NULL ,
`namn` VARCHAR( 15 ) NOT NULL ,
`mail` VARCHAR( 25 ) NOT NULL ,
`meddelandet` VARCHAR( 200 ) NOT NULL ,
UNIQUE (
`id`
)
);
Så här ser formuläret ut:
<form name="form1" method="get" action="gastbok.php">
<p>
<input type="text" name="namn">
</p>
<p> </p>
<p>
<input type="text" name="mail">
</p>
<p> </p>
<p>
<textarea name="meddelandet" cols="30" rows="8"></textarea>
</p>
<p>
<input name="Submit" type="submit" class="style19" value="Skicka">
</p>
</form>
Och så här ser php-koden ut:
<?php
$namn = $_GET['namn'];
$mail = $_GET['mail'];
$meddelandet = $_GET['meddelandet'];
$monad = array('Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December');
$nummer = date("n");
$nummer1 = $nummer-1;
$datum = date(m)." ".$monad[$nummer1]." ".date(Y);
$tid = date("H:i");
$open = mysql_connect("localhost", "", "") or die("Kopplingen funkar inte!");
mysql_select_db("gastbok") or die("Kunde inte välja databasen");
if(isset($_GET['Submit'])) {
$sql = ("INSERT inlagg (datum, tid, namn, mail, meddelandet) VALUES ('$datum', '$tid', '$namn', '$mail', '$meddelandet')");
$resultat = mysql_query($sql) or die(mysql_error());
header("Location: gastbok.php");
}
$resultat = mysql_query($sql) or die(mysql_error());
$sql1 = ("SELECT * FROM inlagg");
$resultat1 = mysql_query($sql1) or die(mysql_error());
while ($res = mysql_fetch_object($resultat1)) {
echo ("<table><tr><td><b style='color:red'>".$res->namn."</b></td><td><b style='color:red'>".$res->datum." ".$res->tid."</b><br></td></tr><tr><td colspan='2'>".$res->meddelandet."</td></tr></table>");
}
?>
Problemet är att den postar även när man refreshar!
Jag skulle förut göra en "röstningssystem" men fick lägga ner allt pga detta problem! Hur fixar jag så att den ENDAST postar när man trycker på submit!
(Jag har även provat byta ut GET mot POST).
Tack på förhand
Varför inte bara kolla i PHP-koden om något av formulären var ifyllt med en IF-sats?
Om ett var ifyllt så kör vi resten av koden, annars lämnar vi det, typ.
Kan inte PHP, men i ASP skulle jag nog gjort så.
Nu är det så att jag bara hållt på med php och programmering i 1 vecka så jag förstod det inte.
Men kan det vara ngt fel på min dator eller webbläsare (i så fall både IE och FF). Första gången man går in så postar den inget å grund av att det inte finns ngt.
Sedan så postar man och refreshar, då postas förra inlägget igen. Så den postar inlägget innan. Fast jag går in och tömmer databasen så postar den förra inlägget
Länk till sidan?
Kan passa på att säga att jag ändrade
i koden...ändrade
if(isset($_POST['Submit'])) {
$sql = ("INSERT inlagg (datum, tid, namn, mail, meddelandet) VALUES ('$datum', '$tid', '$namn', '$mail', '$meddelandet')");
$resultat = mysql_query($sql) or die(mysql_error());
header("Location: gastbok.php");
}
till
$sql = ("INSERT inlagg (datum, tid, namn, mail, meddelandet) VALUES ('$datum', '$tid', '$namn', '$mail', '$meddelandet')");
$resultat = mysql_query($sql) or die(mysql_error());
eftersom annars så stod det bara
Frågan var tom
edit: ingen mer länk
Huh! Den postar ju två stycken när man uppdaterar...förbryllande.
Men testa med att göra en IF-sats som kollar om något formulärfält är ifyllt.
I ASP skulle det se ut typ
If Request.Form("guestbookNamn") = "" Then
'kör inte kod
Else
'kör kod
End If
Men som sagt, jag kan inte PHP Men jag kan inte tänka mig att koden för detta i PHP skulle vara såååå olik
Men du får nog invänta någon PHP-kunnig (eller ja, i alla fall någon som har koll på grunderna ) som kan besvara din fråga. Ledsen att jag inte kan hjälpa dig.
If koden kollar ju om något fält är ifyllt, OM det är är tomt så skall den göra detta, om INTE, gör det andra. Så lämpligast vore ju om du lade koden som lägger till datan i databasen där (Gästbokskoden alltså
)
/RED
PHP-kod då, förstås. Min kod är ASP och kommer ju inte fungera, men det förstod du kanske
jag provade det som du sa men det funka inte?!
Den verkar läsa fälten som fyllda fast de är tomma när man refreshar
Nu ser koden ut så här.
Problemet är att den inte "insertar" i databasen fast jag trycker på skicka!
<?php
$namn = $_POST['namn'];
$mail = $_POST['mail'];
$meddelandet = $_POST['meddelandet'];
$monad = array('Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December');
$nummer = date("n");
$nummer1 = $nummer-1;
$datum = date(m)." ".$monad[$nummer1]." ".date(Y);
$tid = date("H:i");
$open = mysql_connect("localhost", "", "") or die("Kopplingen funkar inte!");
mysql_select_db("gastbok") or die("Kunde inte välja databasen");
if(isset($_POST['Submit'])) {
$sql = ("INSERT inlagg (datum, tid, namn, mail, meddelandet) VALUES ('$datum', '$tid', '$namn', '$mail', '$meddelandet')");
$resultat = mysql_query($sql) or die(mysql_error());
header("Location: gastbok.php");
exit;
}
$sql1 = ("SELECT * FROM inlagg");
$resultat1 = mysql_query($sql1) or die(mysql_error());
while ($res = mysql_fetch_object($resultat1)) {
echo ("<table><tr><td><b style='color:red'>".$res->namn."</b></td><td><b style='color:red'>".$res->datum." ".$res->tid."</b><br></td></tr><tr><td colspan='2'>".$res->meddelandet."</td></tr></table>");
}
?>
Formulären:
<form name="form1" method="get" action="gastbok.php">
<p>
<input type="text" name="namn">
</p>
<p> </p>
<p>
<input type="text" name="mail">
</p>
<p> </p>
<p>
<textarea name="meddelandet" cols="30" rows="8"></textarea>
</p>
<p>
<input name="Submit" type="submit" class="style19" value="Skicka">
</p>
</form>
Prova att lägga in en unset($_POST["submit"]) så som jag har gjort nedan. Kan nämligen hända att den inte nollställs, eller vad man ska kalla det, när man skickar tillbaka användare till samma sida.
<?php
$namn = $_POST['namn'];
$mail = $_POST['mail'];
$meddelandet = $_POST['meddelandet'];
$monad = array('Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December');
$nummer = date("n");
$nummer1 = $nummer-1;
$datum = date(m)." ".$monad[$nummer1]." ".date(Y);
$tid = date("H:i");
$open = mysql_connect("localhost", "", "") or die("Kopplingen funkar inte!");
mysql_select_db("gastbok") or die("Kunde inte välja databasen");
if(isset($_POST['Submit'])) {
$sql = ("INSERT inlagg (datum, tid, namn, mail, meddelandet) VALUES ('$datum', '$tid', '$namn', '$mail', '$meddelandet')");
$resultat = mysql_query($sql) or die(mysql_error());
unset($_POST["submit"]); /// DENNA RAD LADE JAG TILL
header("Location: gastbok.php");
exit;
}
$sql1 = ("SELECT * FROM inlagg");
$resultat1 = mysql_query($sql1) or die(mysql_error());
while ($res = mysql_fetch_object($resultat1)) {
echo ("<table><tr><td><b style='color:red'>".$res->namn."</b></td><td><b style='color:red'>".$res->datum." ".$res->tid."</b><br></td></tr><tr><td colspan='2'>".$res->meddelandet."</td></tr></table>");
}
?>
Redigering
Nu gjorde jag bort mig igen. Var ju inte dubbelpostningen du hade problem med längre.
Men du, du har ju missat i din SQL-fråga?
if(isset($_POST['Submit'])) {
$sql = ("INSERT inlagg (datum, tid, namn, mail, meddelandet) VALUES ('$datum', '$tid', '$namn', '$mail', '$meddelandet')");
$resultat = mysql_query($sql) or die(mysql_error());
unset($_POST["submit"]); /// DENNA RAD LADE JAG TILL
header("Location: gastbok.php");
exit;
}
Ska vara
if(isset($_POST['Submit'])) {
$sql = ("INSERT INTO inlagg (datum, tid, namn, mail, meddelandet) VALUES ('$datum', '$tid', '$namn', '$mail', '$meddelandet')");
$resultat = mysql_query($sql) or die(mysql_error());
unset($_POST["submit"]); /// DENNA RAD LADE JAG TILL
header("Location: gastbok.php");
exit;
}
Lade alltså till "INTO" efter "insert" i sql-frågan. Kanske funkar.