Avatar billede ny89 Nybegynder
21. august 2012 - 17:02 Der er 19 kommentarer og
1 løsning

Database

Hej,

Jeg er i gang med min hjemmeside, hvor det skal være muligt at kunne skrive en kommentar.

Det består af et navn, email og besked. Men hver gang jeg indtaster informationerne og trykker på refresh dobbeltregistrerer den. Hvordan kan jeg løse problemet?

Jeg anvender html, php og phpMyadmin som min database.

På forhånd tak for hjælpen.
Avatar billede arne_v Ekspert
21. august 2012 - 17:12 #1
proev at vis noget kode
Avatar billede ny89 Nybegynder
21. august 2012 - 17:18 #2
Her kommer min php og html kode :)

insert.php:

<html>
    <head>
        <!-- Siden skal gaa tilbage til blog.php paa nul sekunder -->
        <meta http-equiv="refresh" content="0; url=index.html" />
        <title>Klaudia</title>
    </head>
    <body>

<?php
$DBhost = "localhost";
$DBuser = "besked";
$DBpass = "sebeskeder";
$DBname = "beskeder";
$table = "besked";

// Opretter forbindelse til databasen
mysql_connect($DBhost, $DBuser, $DBpass) or die ("Ingen forbindelse");
@mysql_select_db("beskeder") or die ("Fandt ikke DB");

// variabler der henviser til tabel besked
$navn = $_GET['navn'];
$email = $_GET['email'];
$sendbesked = $_GET['sendbesked'];

// Saetter data ind i databasen
$sqlquery = "INSERT INTO ". $table ." (navn, email, sendbesked) VALUES (' " .$navn. "', ' ".$email."', '".$sendbesked."')";
$results = mysql_query("$sqlquery");

mysql_close();
?>

    </body>
</html>




kontakt.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
    <head>
        <meta content="text/html; charset=ISO-8859-1"
        http-equiv="content-type">

        <link rel="stylesheet" href="styles.css" type="text/css" />

    <title></title>
    </head>
    <body>
        <div id="container"> <!-- Container start -->
            <div id="header">
                <h1></h1>
                <ul id="nav">
                    <li><a href="Kontakt.html">Kontakt</a></li>
                    <li><a href="Profil.html">Profil</a></li>
                    <li><a href="Nyheder.html">Nyheder</a></li>
                    <li><a href="index.html">Forside</a></li>
                </ul>
            </div>

            <hr width="90%" align="center" color="#cccccc" size="small"> </hr>

        <div id="content2"> <!-- Content start -->
           
            </p>
           
            <p>Hvis du har nogle sp&oslash;rgsm&aring;l, er du velkommen til at kontakte mig. </p>
        <form id="form" method="get" action="insert.php">
           
            <label>Navn: *</label>
            <br>
            <input type="text" value="" name="navn">
            </p>
           
           
            <label>Email: *</label>
            <br>
            <input type="text" value="" name="email">
            </p>
           
            <label>Besked: *</label>
            <br>
            <textarea width="1%" rows="20" cols="50%" name="sendbesked"></textarea>
            </p>
            <input type="submit" value="Send">
           
        </form>   
           
        </div>
       
        <hr width="90%" align="center" color="#cccccc" size="small"> </hr>
       
        <div id="footeren">
            <p><small>
Avatar billede KHHP Juniormester
21. august 2012 - 18:03 #3
Kiggede lige i den kode du postede og man indsætter ikke php-kode til den brug, som du skal, inde i et dokument med "normal" HTML-struktur, medmindre den sidder før <html> og er lavet som en funktion. Her ville jeg nok fjerne strukturen, så du kun har:

<?php
$DBhost = "localhost";
$DBuser = "besked";
$DBpass = "sebeskeder";
$DBname = "beskeder";
$table = "besked";

// Opretter forbindelse til databasen
mysql_connect($DBhost, $DBuser, $DBpass) or die ("Ingen forbindelse");
@mysql_select_db("beskeder") or die ("Fandt ikke DB");

// variabler der henviser til tabel besked
$navn = $_POST['navn'];
$email = $_POST['email'];
$sendbesked = $_POST['sendbesked'];

// Saetter data ind i databasen
$sqlquery = "INSERT INTO ". $table ." (navn, email, sendbesked) VALUES (' " .$navn. "', ' ".$email."', '".$sendbesked."')";
$results = mysql_query("$sqlquery");

mysql_close();
?>

Så skal du ændre method="get" til method="post". Ellers ser din kode fin ud.
Avatar billede ny89 Nybegynder
21. august 2012 - 19:09 #4
Okay tak :) Det vil jeg lige prøve at ændre.
Avatar billede ny89 Nybegynder
21. august 2012 - 19:15 #5
Ved du hvordan man forhindrer dobbeltregistrering når man klikker på refresh?
Avatar billede KHHP Juniormester
21. august 2012 - 19:46 #6
hvis du har ændret det som jeg sagde og holder dit php-script i en separat fil, så skulle det ikke ske.
Avatar billede langkiller Nybegynder
21. august 2012 - 20:42 #7
en anden måde at undgå dobbelregistrering ved refresh er en header der sender brugeren videre med det samme. Sæt f.eks. følgende i bunden af din kode i insert.php:

header('location: kontakt.html');

eller til den side du nu ønsker, så kan brugeren i hvert fald ikke nå at refreshe :)
Avatar billede ny89 Nybegynder
21. august 2012 - 22:22 #8
KHHP: Jeg har sat php-scriptet i en separat fil, men det hjalp ikke ?

Langkiller: den videresender ikke til den samme eller en anden side?
Avatar billede langkiller Nybegynder
21. august 2012 - 22:29 #9
det er muligvis fordi du har udskrevet html i toppen.. hvorfor har du egentlig det overhovedet?

prøv at ændre insert.php så det ser sådan her ud:



<?php
$DBhost = "localhost";
$DBuser = "besked";
$DBpass = "sebeskeder";
$DBname = "beskeder";
$table = "besked";

// Opretter forbindelse til databasen
mysql_connect($DBhost, $DBuser, $DBpass) or die ("Ingen forbindelse");
@mysql_select_db("beskeder") or die ("Fandt ikke DB");

// variabler der henviser til tabel besked
$navn = $_GET['navn'];
$email = $_GET['email'];
$sendbesked = $_GET['sendbesked'];

// Saetter data ind i databasen
$sqlquery = "INSERT INTO ". $table ." (navn, email, sendbesked) VALUES (' " .$navn. "', ' ".$email."', '".$sendbesked."')";
$results = mysql_query("$sqlquery");

mysql_close();

header('location: kontakt.html');

?>


den skal sende tilbage til kontakt.html ikke?
Avatar billede ny89 Nybegynder
21. august 2012 - 22:31 #10
Jeg har slettet html i toppen, men det virker stadige ikke :S

Jo, til kontakt.html :)
Avatar billede langkiller Nybegynder
21. august 2012 - 22:37 #11
hvad er det der ikke virker.. det med at blive sendt videre eller bliver data slet ikke sat ind i databasen?
Avatar billede ny89 Nybegynder
21. august 2012 - 22:41 #12
at den ikke bliver sendt videre og den bliver ved med at dobbeltregistrere.
Avatar billede langkiller Nybegynder
21. august 2012 - 22:58 #13
Ændrede et par småting og det virker fint her. ved ikke præcis hvor din fejl var. prøv med dette i insert.php:

<?php
$DBhost = "localhost";
$DBuser = "besked";
$DBpass = "sebeskeder";
$DBname = "beskeder";
$table = "besked";

$conn = mysql_connect("$DBhost","$DBuser","$DBpass", true);
if (! $conn ) die( 'Kunne ikke forbinde: ' . mysql_error ());
mysql_select_db("$DBname")or die('Kunne ikke finde database');


// variabler der henviser til tabel besked
$navn = $_GET['navn'];
$email = $_GET['email'];
$sendbesked = $_GET['sendbesked'];

// Saetter data ind i databasen
$sqlquery = "INSERT INTO ". $table ." (navn, email, sendbesked) VALUES (' " .$navn. "', ' ".$email."', '".$sendbesked."')";
$results = mysql_query("$sqlquery");

header('location: kontakt.html?besked=sendt');


mysql_close();

?>
Avatar billede ny89 Nybegynder
21. august 2012 - 23:05 #14
Har kopiet det ind i mit dokument og får stadige dobbeltregistreringer i min tabel.
Avatar billede langkiller Nybegynder
21. august 2012 - 23:15 #15
så må fejlen ligge et andet sted jo..
det er lidt svært at gennemskue når man ikke har hele koden foran sig
Avatar billede KHHP Juniormester
22. august 2012 - 07:35 #16
Bare for at være helt sikker på at det ikke kan være php-scriptet prøvede I jo med langkiller's rettelser af din kode, men hvad nu hvis du forsøger at udskifte indholdet i din insert.php med dette:
<?php
session_start();
//Tjekker brugerrettigheder
if(isset($_SESSION['username']) && $_SESSION['gruppe'] == "admin" ? true : header("Location: ../index.php?msg=ACCESS_DENIED"));
$server = "localhost";
$brugernavn = "besked";
$kode = "sebeskeder";
$db = "beskeder";

mysql_connect($server , $brugernavn , $kode) or die(mysql_error());
mysql_select_db($db)or die(mysql_error());
mysql_set_charset('utf8');
$data = mysql_query("SELECT * FROM besked" ) or die(mysql_error());

//Henter indhold fra formular
$navn = mysql_real_escape_string($_POST['navn']);
$epost = mysql_real_escape_string($_POST['email']);
$sendbesked = mysql_real_escape_string($_POST['besked']);

// Indsæt i tabel

  if (isset($_POST['submit'])) {
      $tabeldata = "INSERT INTO content(navn, email, sendbesked)VALUES ('$navn', '$epost', '$sendbesked')";
      $resultat = mysql_query($tabeldata);
if($resultat) {
    header ('Location: ../index.php?msg=PAGE_CREATED');
  }
else {
    header ('Location: ../index.php?msg=CREATION_FAILED');
}
}
else {
    header ('Location: ../index.php?msg=ACCESS_DENIED');

}
mysql_close();
?>

Det er den kode jeg altid selv har brugt til at indsætte nye ting i en database med. Så prøv med denne og se om den ikke holder op med at dobbeltregistrere.
Avatar billede ny89 Nybegynder
22. august 2012 - 20:05 #17
Virker desværre heller ikke. Er ikke kommet frem til hvorfor. Derfor har jeg valgt at ændre koden til nedenstående. Kan I hjælpe med at indsætte forbindelsen til min database?




<?php
function printform($data, $errors) {
    ?>
    <form action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
   
    <? if($errors['navn']) print '<b>'.$errors['navn'].'</b><br>'; ?>
    Navn: <input type="text" name="navn" value="<?=$data['navn'];?>"><br><br>


    <? if($errors['email']) print '<b>'.$errors['email'].'</b><br>'; ?>
    E-mail: <input type="text" name="email" value="<?=$data['email'];?>"><br><br>

 

    <? if($errors['bbesked']) print '<b>'.$errors['bbesked'].'</b><br>'; ?>
   
    Besked:<br> <textarea width="1%" rows="20" cols="50%" name="bbesked" value="<?=$data['bbesked'];?>"></textarea>

    <input type="submit" name="submitted" value="Send">

    </form>
    <?
}


function _send($to, $data) {
    //$subject = $data['emne'];
    $headers = 'From: '.$data['navn'].' <'.$data['email'].'>';
    $message = 'Besked fra kontakt formularen

Navn:    '.$data['navn'].'
E-mail:  '.$data['email'].'

'.$data['bbesked'];

    mail($to, $message, $headers);
}

function _data() {
    return array(
        'navn' => $_POST['navn'],
        'email' => $_POST['email'],
        'bbesked' => $_POST['bbesked']
    );
}

function _validate($data) {
    $errors = array();
    if(!$data['navn']) $errors['navn'] = 'Navn skal udfyldes';
    if(!$data['email']) $errors['email'] = 'E-mail skal udfyldes';
    if(!$data['bbesked']) $errors['bbesked'] = 'Besked skal udfyldes';
    return $errors;
}

if($_POST['submitted']) {
    $data = _data();
    $errors = _validate($data);
    if(count($errors)) {
        printform($data, $errors);
    } else {
        _send('mail@mail.dk', $data);
        print 'Tak for din henvendelse, jeg har modtaget din besked!';
    }
} else {
    printform(array(), array());
}

?>
Avatar billede ny89 Nybegynder
22. august 2012 - 20:19 #18
kunne man ikke bruge noget i retning af then statement? således at hvis man klikker på "submitted" bliver beskeden både sendt til ens mail og til databasen? :)
Avatar billede ny89 Nybegynder
22. august 2012 - 20:40 #19
Nu ser min kode således ud. Der er ingen forbindelse til db :S




<?php

$DBhost = "localhost";
$DBuser = "besked";
$DBpass = "sebeskeder";
$DBname = "beskeder";
$table = "besked";


$conn = mysql_connect("$DBhost","$DBuser","$DBpass", true);
if (! $conn ) die( 'Kunne ikke forbinde: ' . mysql_error ());
mysql_select_db("$DBname")or die('Kunne ikke finde database');


$navn = $_GET['navn'];
$email = $_GET['email'];
$bbesked = $_GET['bbesked'];




function printform($data, $errors) {
    ?>
    <form action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
   
    <? if($errors['navn']) print '<b>'.$errors['navn'].'</b><br>'; ?>
    Navn: <input type="text" name="navn" value="<?=$data['navn'];?>"><br><br>


    <? if($errors['email']) print '<b>'.$errors['email'].'</b><br>'; ?>
    E-mail: <input type="text" name="email" value="<?=$data['email'];?>"><br><br>

 

    <? if($errors['bbesked']) print '<b>'.$errors['bbesked'].'</b><br>'; ?>
    Besked:<br> <textarea width="1%" rows="20" cols="50%" name="bbesked" value="<?=$data['bbesked'];?>"></textarea>

    <input type="submit" name="submitted" value="Send">
    </form>
    <?
}




// Saetter data ind i databasen
$sqlquery = "INSERT INTO ". $table ." (navn, email, bbesked) VALUES (' " .$navn. "', '".$email."', ' ".$bbesked."')";
$results = mysql_query("$sqlquery");
mysql_close();





function _send($to, $data) {
    //$subject = $data['emne'];
    $headers = 'From: '.$data['navn'].' <'.$data['email'].'>';
    $message = 'Besked fra kontakt formularen

Navn:    '.$data['navn'].'
E-mail:  '.$data['email'].'

'.$data['bbesked'];

    mail($to, $message, $headers);
}




function _data() {
    return array(
        'navn' => $_POST['navn'],
        'email' => $_POST['email'],
        'bbesked' => $_POST['bbesked']
    );
}




function _validate($data) {
    $errors = array();
    if(!$data['navn']) $errors['navn'] = 'Navn skal udfyldes';
    if(!$data['email']) $errors['email'] = 'E-mail skal udfyldes';
    if(!$data['bbesked']) $errors['bbesked'] = 'Besked skal udfyldes';
    return $errors;
}

if($_POST['submitted']) {
    $data = _data();
    $errors = _validate($data);
    if(count($errors)) {
        printform($data, $errors);
    } else {
        _send('mail@mail.dk', $data);
        print 'Tak for din henvendelse, jeg har modtaget din besked!';
    }
} else {
    printform(array(), array());
}


?>
Avatar billede ny89 Nybegynder
24. august 2012 - 18:06 #20
Jeg lukker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester