WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP - Problem (https://www.wn.se/forum/showthread.php?t=27413)

Martin™ 2008-02-23 15:08

På min förstasida.php har jag en form som skickar vidare data med hjälp av "post" till en annansida.php. På annansida.php skrivs datan in i min databas, samtidigt som jag skriver ut datan på skärmen.

Hur ska jag göra så att inte informationen skrivs in i databasen igen när man trycker Refresh?

sasserdude 2008-02-23 15:15

måste väl gå med en vanlig submit knapp? att när det skall in i en databas så klickar man, klickar man inte så ska de inte in något..

jag är inte så duktig så du vet.

lunarmys 2008-02-23 15:18

på annansida.php så kör du nånting i stil med

if (count($_POST) > 0)
{
// släng in datan i databasen
header("Location: annansida.php");
exit;
}

så insert'ar den bara när sidan submittas å det gör den endast ifrån framsidan

kers 2008-02-23 15:18

Fyll i ett gömt-fält med ett random unikt värde som du lagrar i databasen som en kontrollnyckel vid en sparing. Vid var sparning kollar du om det värdet redan finns i databasen - om det gör det avbryter du procesen och skriver ut ett meddelande om att användarna inte ska refresha efter post :)

Adam 2008-02-23 15:26

Jag brukar sätta att submitknappen heter skicka, och på processidan så gör jag en if sats i stil med if(isset($_POST["skicka"])) {..}. Gillar detta lite bättre än lunarmys förslag då det gör att koden blir mer lättläslig.

MVH

Martin™ 2008-02-23 15:38

Jag sitter och jobbar lite med lunarmys förslag men det går inte så bra. Så jag ska testa adams variant.

Martin™ 2008-02-23 15:57

Kod:

if(isset($_POST["skicka"])) {..}
Det fungerade inte, sidan matar in datan i databasen varje gång man trycker refresh.

gsoc 2008-02-23 16:05

Kolla om datan redan finns i databasen?

tartareandesire 2008-02-23 16:11

Citat:

Originally posted by gsoc@Feb 23 2008, 17:05
Kolla om datan redan finns i databasen?

Förutsatt att unik data krävs då... Annars måste man kunna identifiera en post och då får du köra ett random-id som följer med formuläret som kers föreslog ovan.

Martin™ 2008-02-23 16:24

Citat:

Originally posted by gsoc@Feb 23 2008, 17:05
Kolla om datan redan finns i databasen?

Ja det hade fungerat men i min databas får det finnas samma data flera gånger.

Så här vill jag att sida ska fungera:

Besökaren anger sin längd i min form sen när man trycker skicka så kommer man till en ny sida där datan läggs in i en databas.

Hämta: $allas-totala-längd från databas.

Räkna fram nytt värde: $allas-totala-längd = $allas-totala-längd + $_POST['längd']

Uppdatera: $allas-totala-längd i databasen.

Visa den nya: $allas-totala-längd på hemsidan tillsammans med den datan som matades in i formen.

MMC 2008-02-23 17:00

Du gör helt enkelt så här:
formuläret postar till annansida
if ( isset($_POST[variabel]) ) {
stoppa in i databasen
header("location: annansida")
}
visa annansida

Martin™ 2008-02-23 17:33

Citat:

Originally posted by MMC@Feb 23 2008, 18:00
Du gör helt enkelt så här:
formuläret postar till annansida
if ( isset(_POST[variabel]) ) {
stoppa in i databasen
header(location: annansida)
}
visa annansida

Problemet med den varianten är att jag inte får behålla $_POST['längd'] eller är det jag som gjort fel?

MMC 2008-02-23 17:36

Citat:

Ursprungligen postat av Martin™
Citat:

Ursprungligen postat av MMC
Du gör helt enkelt så här:
formuläret postar till annansida
if ( isset(_POST[variabel]) ) {
stoppa in i databasen
header(location: annansida)
}
visa annansida

Problemet med den varianten är att jag inte får behålla _POST[längd] eller är det jag som gjort fel?

Nej, det är klart du inte får det. Det är liksom hela poängen :)

lunarmys 2008-02-23 23:18

OM du behöver ha längd på "nästa" sida, ja, då får du väl ha med det i header("Location: ...");
glöm inte ett exit efter header, annars kan det bli lite galet

SimonP 2008-02-23 23:47

Jag föredrar denna variant:

förstasida.php:

sätt $_SESSION['formpost']=0;


annansida.php:

if ($_SESSION['formpost']==0)
{
$_SESSION['formpost']=1;
lägg_in_data();
}

Martin™ 2008-02-24 11:55

Nej inte ens $_SESSION får jag att fungera.

Längst upp på förstasidan.php lägger jag in:
Kod:

<?php
session_start();
$_SESSION['formpost']=0;
?>



Sen lägger jag in den här koden i annansida.php
Kod:

if ($_SESSION['formpost']==0)
{
$_SESSION['formpost']=1;

//data -> databas

}

Då får jag det här felmeddelandet:

Notice: Undefined variable: _SESSION in D:\Server\test\annansida.php on line 38

SimonP 2008-02-24 12:14

Sen lägger jag in den här koden i annansida.php
Kod:

if ($_SESSION['formpost']==0)
{
$_SESSION['formpost']=1;

//data -> databas

}

Du har väl inte glömt att lägga in session_start() överst i annansida.php?

Martin™ 2008-02-24 12:22

Citat:

Originally posted by SimonP@Feb 24 2008, 13:14

Du har väl inte glömt att lägga in session_start() överst i annansida.php?

Jo det hade jag missat, jag trode det räckte att man gjorde det på förstasidan. Nu fungerar det perfekt! Tack!


Ett stort tack till alla er andra som också har postat i tråden, grymt kul att så många har hjälpt till!


Alla tider är GMT +2. Klockan är nu 21:50.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson