webForumDet fria alternativet

postar helatiden

12 svar · 403 visningar · startad av kobranturre

kobranturreMedlem sedan maj 2004693 inlägg
#1

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>&nbsp;</p>
    <p>
      <input type="text" name="mail">
</p>
    <p>&nbsp;</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."&nbsp;&nbsp;&nbsp;".$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 :)

magnusfernstromMedlem sedan mars 20033 686 inlägg
#2

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

kobranturreMedlem sedan maj 2004693 inlägg
#3

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

magnusfernstromMedlem sedan mars 20033 686 inlägg
#4

Länk till sidan?

kobranturreMedlem sedan maj 2004693 inlägg
#5

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

magnusfernstromMedlem sedan mars 20033 686 inlägg
#6

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.

kobranturreMedlem sedan maj 2004693 inlägg
#7

hehe glömde säga att den även dubbelpostar.

min unika egna kod ;) :p

kobranturreMedlem sedan maj 2004693 inlägg
#8

vad ska den göra i Else tycker du?

Editr: inte i else, det första alternativet :)

magnusfernstromMedlem sedan mars 20033 686 inlägg
#9

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 :)

kobranturreMedlem sedan maj 2004693 inlägg
#10

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 :(

kobranturreMedlem sedan maj 2004693 inlägg
#11

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."&nbsp;&nbsp;&nbsp;".$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>&nbsp;</p>
    <p>
      <input type="text" name="mail">
</p>
    <p>&nbsp;</p>
    <p>
      <textarea name="meddelandet" cols="30" rows="8"></textarea>
</p>
    <p>
      <input name="Submit" type="submit" class="style19" value="Skicka">
    </p>
  </form>
BäckmanMedlem sedan nov. 2001274 inlägg
#12

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."&nbsp;&nbsp;&nbsp;".$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. :)

BäckmanMedlem sedan nov. 2001274 inlägg
#13

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. :)

145 ms totalt · 3 externa anrop · v20260731065814-full.30151723
142 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)