Avatar billede hans01 Forsker
04. juli 2017 - 06:40 Der er 15 kommentarer

Formular Data vil ikke indsættes i mysql databasen

Jeg kan ikke få mine formular data indsat i mysql databasen.. Kan nogle hjælpe?

jeg har oprettet en database kaldet: sneppen med en tabel kaldet: username, idenne tabel har jeg oprettet: UserID, Username, Mail, Startdato, afrejsedato, antalperson, antalboern, og en timestamp.

min formular ligger i en bootstrap modal og ser sådan ud:
<form action="insert.php" method="POST" id="contact-form">
             
                <div class="form-group"> <!-- Date input -->
                  <div class="input-group input-group-sm">
                    <input type="text" id="from" name="from" class="form-control datepicker" placeholder="Ankomst dato..">
                    <span class="input-group-addon"><span class=" glyphicon glyphicon-calendar"></span></div>
                </div>
                <div class="form-group"> <!-- Date input -->
                  <div class="input-group input-group-sm">
                    <input type="text" id="to" name="to" class="form-control datepicker" placeholder="Afrejse dato..">
                    <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </div>
                </div>
                <div class="form-group"> <!-- Date input -->
                  <div class="input-group input-group-sm">
                    <select class="form-control" name="voksne" id="voksne">
                      <option value="0">-- Vælg antal personer --</option>
                      <option value="1">1</option>
                      <option value="2">2</option>
                    </select>
                  </div>
                </div>
                <div class="form-group"> <!-- Date input -->
                  <div class="input-group input-group-sm">
                    <select class="form-control" name="boern" id="boern">
                      <option value="0">0</option>
                      <option value="1">1</option>
                      <option value="2">2</option>
                    </select>
                  </div>
                </div>
                </div>
                <!--.list-group-->
                <button class="btn btn-primary" name="submit" data-toggle="modal" data-dismiss="modal" data-target="#test-modal-3" onclick="post();"> <span class="glyphicon glyphicon-star" aria-hidden="true"></span> Launch Modal 3</button>
              </form>

Min connection fil ser sådan ud:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_sneppen = "localhost";
$database_sneppen = "sneppen";
$username_sneppen = "root";
$password_sneppen = "";
$sneppen = mysqli_connect($hostname_sneppen, $username_sneppen, $password_sneppen, $database_sneppen) or trigger_error(mysql_error(),E_USER_ERROR);


?>

og min insert.php ser således ud:
<?php

if (isset($_POST['submit'])){

$from = $_POST['from'];
$to = $_POST['to'];
$voksne = $_POST['voksne'];
$boern = $_POST['boern'];
// indsæt data
mysql_query("INSERT INTO username (Startdato, afrejsedato, antalperson, antalboern) VALUES ('$from', '$to', '$voksne', '$boern')") OR DIE(mysql_error());
$resultat = mysql_query($mysql_query);
if($resultat) {
    echo "Succes";
   
}
else{
    echo "fejl";
}

}
mysql_close();
?>
Avatar billede acore Ekspert
04. juli 2017 - 08:27 #1
Blander du ikke to forskellige API'er sammen? Se http://php.net/manual/en/mysqlinfo.api.choosing.php.

Du skal enten bruge mysql eller mysqli til både connect og query. mysql er forældet, så jeg vil foreslå mysqli.

Dvs ret

mysql_query($mysql_query);

til

mysqli_query($sneppen, $mysql_query);

Hvis det ikke hjælper - hvilken fejl får du/hvad sker der, når du prøver?
Avatar billede acore Ekspert
04. juli 2017 - 08:28 #2
(...og måske mangler du at sørge for, at $sneppen er til rådighed i insert.php)
Avatar billede olsensweb.dk Ekspert
04. juli 2017 - 10:07 #3
#1
ikke nok med at de blandes sammen.

det gamle API (mysql_) er fjernet i PHP7, så at anvende dette vil da være dumt

ref http://php.net/manual/en/mysqlinfo.api.choosing.php
Recommended API

It is recommended to use either the mysqli or PDO_MySQL extensions. It is not recommended to use the old mysql extension for new development, as it was deprecated in PHP 5.5.0 and was removed in PHP 7.
Avatar billede acore Ekspert
04. juli 2017 - 10:34 #4
#olsen - ja det er forældet (som jeg også skriver), men det er næppe derfor det ikke virker.
Avatar billede olsensweb.dk Ekspert
04. juli 2017 - 11:34 #5
#0
// her udførees insert
mysql_query("INSERT INTO username (Startdato, afrejsedato, antalperson, antalboern) VALUES ('$from', '$to', '$voksne', '$boern')") OR DIE(mysql_error());

// hvad vil du her
// hvad indeholder $mysql_query ?? hvor er den definered ??
$resultat = mysql_query($mysql_query);

OR DIE er da normalt med småt




#4
>men det er næppe derfor det ikke virker.
nej hovedårsagen er at man laver en mysqli connection, og resten er lavet i mysql.
om han også har lavet en mysql connection (som ikke er vist) vides ikke.

så vi er ikke uenige. #1, #2

---------------------

så skal man skrive ny / opdaterer existerende code, vil det være dumt at anvende det gamle mysql api
så spørgeren skal starte med at opdaterer sin code til mysqli eller pdo

men havde vi fået en fejlbeskrivelse (ikke bare "Data vil ikke indsættes" eller den klassiske  "det virker ikke"), kunne vi nok sige hvad fejlen er.
her burde mysql_error have fortalt fejlen
kunne også være en unknown command mysql_xx hvis det var php7


så under udvikling
php
hav altid slået error_reporting og display error til, og slå det fra i production
http://php.net/manual/en/function.error-reporting.php
http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors

sql
og anvend errno og / eller error ifm qyery
det gamle api
http://php.net/manual/en/function.mysql-errno.php
http://php.net/manual/en/function.mysql-error.php

mysqli
http://php.net/manual/en/mysqli.errno.php
http://php.net/manual/en/mysqli.error.php


man kan godt have flere database api'er kørende på sammen side, men det er ikke kønt
Avatar billede hans01 Forsker
05. juli 2017 - 08:05 #6
God morgen, jeg har rodet lidt videre med sagen, og har nu fået forbindelse til databasen, jeg kan du stadigt ikke få indsat data i denne, men php ser nu således ud.

if (isset($_POST['submit'])){

$from = $_POST['from'];
$to = $_POST['to'];
$voksne = $_POST['voksne'];
$boern = $_POST['boern'];
// indsæt data
$query = "INSERT INTO `username`(`Startdato`, `afrejsedato`, `antalperson`, `antalboern`) VALUES ('$from','$to','$voksne','$boern')";
    $result = mysqli_query($link, $query);
    if($result)
    {
        echo "Data indsat i databasen";
    }
   
    else{
        echo "data ikke indsat i databasen";
       
        }
       
        mysqli_free_result($result);
        mysqli_close($link);
}
Avatar billede acore Ekspert
05. juli 2017 - 08:54 #7
Hvilket resultat får du?

Indeholder $query det du forventer - prøv at udskrive den?

Skal du ikke have indsat userid og username i tabellen også?

Er userid din key for tabellen eller hvad?
Avatar billede hans01 Forsker
10. juli 2017 - 06:49 #8
Så har jeg arbejdet lidt videre med min php code, den vil dog stadigt ikke indsætte data i basen, jeg kan godt få den til til at indsætte hvis jeg bruger faste værdier, men ikke med variabler, hvad går jeg forkert? Min php ser nu sådan ud:

<?php
      if(isset($_POST["submit1"])&& !empty($_POST['submit1'])){
    //indsæt data i basen
$rawdate = htmlentities($_POST['from']);
$from = date('YYYY-MM-DD', strtotime($rawdate));
$rawdate = htmlentities($_POST['to']);
$to = date('YYYY-MM-DD', strtotime($rawdate));
$voksne = $_POST['voksne'];
$boern = $_POST['boern'];
$fname = $_POST['fname'];
$ename = $_POST['ename'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$specielle = $_POST['specielle'];
$sql->execute();
   
    $sql = ("INSERT INTO `username`(`ankomstdato` , `afrejsedato` , `antalperson` , `antalboern` , `fornavn` , `efternavn` , `email` , `telefon` , `specielle`) VALUES ('$from','$to','$voksne','$boern','$fname','$ename','$email','$telefon','$specielle')");

if (($result = $conn->query($sql)) !== FALSE) {
    echo "New record created successfully";
   
} else {
   
    echo "Error: " . $sql . "<br>" . $conn->error;
}

ini_set('error_reporting', E_ALL);


    }
?>
Avatar billede acore Ekspert
10. juli 2017 - 07:32 #9
Samme spm som i #7
Avatar billede hans01 Forsker
10. juli 2017 - 07:47 #10
Hej acore,

sp. Indeholder $query det du forventer - prøv at udskrive den? jeg modtager ingen fejl!

sp. Skal du ikke have indsat userid og username i tabellen også?, nej UserID er key for tabellen, og username er tabel navnet
Avatar billede olsensweb.dk Ekspert
10. juli 2017 - 08:01 #11
ja, ja lidt ny code
ændring af navne mv.



uddybning af #9
jeg kan godt få den til til at indsætte hvis jeg bruger faste værdier, men ikke med variabler, hvad går jeg forkert?

får du alle værdier over ??
er de i det format databaen forvendter ??
får du nogle sql fejl ??
hvad sker der i din if sætning ??
har du din connetion ??, og hedder den $conn ??, (tror jeg, hvis det får indsat med faste værdier)




$sql->execute(); // hvad udfører du her ?? det ligner noget fra noget prepare statement, der udfører et sql statement, indsat et forkert sted
$sql = ("INSERT INTO `username`(`ankomstdato` , `afrejsedato` , `antalperson` , `antalboern` , `fornavn` , `efternavn` , `email` , `telefon` , `specielle`) VALUES ('$from','$to','$voksne','$boern','$fname','$ename','$email','$telefon','$specielle')");
echo $sql; // test ser  dette ud som du forvendter ??
if (($result = $conn->query($sql)) !== FALSE) {
    echo "New record created successfully";
   
} else {
   
    echo "Error: " . $sql . "<br>" . $conn->error;
}

ini_set('error_reporting', E_ALL);
}


hvorfor slår du først error_reporting til efter ??, det skal stå i toppen af documentet



nb: mon ikke den tabel skal normaliceres ??,
en bruger kan vel godt bestille flere "rejser" ikk
hvis "hans hansen" rejser flere gange, har du alle hans stamoplysninger (`fornavn` , `efternavn` , `email` , `telefon` (,`specielle`)  ), flere gange, hvilke er imod principperne for en database
hint: du mangler en user tabel, og tabellen username burde nok være en rejse tabel,

jeg vil mene tabellerne skal se sådan ud
tbl_users
id, fornavn, efternavn , email , telefon , (specielle)
jeg ved ikke om speciale er en stamdata, eller en data relateret til rejsen


tbl_rejser
id, user_id, ankomstdato , afrejsedato , antalperson , antalboern

nbb:
hvis du vil læse en quick guide til prepare statement, under mysqli har OleBole lavet en guide her på E
www.computerworld.dk/uploads/eksperten-guider/1480-Prepared-Statements-under-MySQLI-kom-igang.pdf

hvis du vil læse om nomalicering
https://www.computerworld.dk/uploads/eksperten-guider/55-Database-design-for-begyndere.pdf
https://www.computerworld.dk/uploads/eksperten-guider/234-Database-design-Normalisering.pdf
http://www.udvikleren.dk/artikler/146/normalformer-baseret-paa-primaernoegler/
Avatar billede hans01 Forsker
10. juli 2017 - 09:02 #12
jeg modtager følgende fejl:
Notice: Undefined variable: sql in C:\wamp65\www\www.sneppegaarden.com\multible-modals-test.php on line 462

linie 462 er her jeg echo fejlen ud!

her er min connect kode:

<?php
ini_set('error_reporting', E_ALL);

$servername = "localhost";
$username = "root";
$password = "";

try {
    $conn = new PDO("mysql:host=$servername;dbname=sneppen", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
   
   
?>
Avatar billede olsensweb.dk Ekspert
10. juli 2017 - 09:23 #13
javel du er skiftet til PDO, fornuftigt valg, minder meget om mysqli OOP style, men klart forbedret mht. prepare statement

>$sql->execute(); //
her er en fejl, slet den linje

>$sql = ("INSERT INTO `username`(`ankomstdato` , `afrejsedato` , `antalperson` , `antalboern` , `fornavn` , `efternavn` , `email` , `telefon` , `specielle`) VALUES ('$from','$to','$voksne','$boern','$fname','$ename','$email','$telefon','$specielle')");
hvad laver dine ydre paranteser ??
skal vel se sådan ud
$sql = "INSERT INTO `username`(`ankomstdato` , `afrejsedato` , `antalperson` , `antalboern` , `fornavn` , `efternavn` , `email` , `telefon` , `specielle`) VALUES ('$from','$to','$voksne','$boern','$fname','$ename','$email','$telefon','$specielle')";
Avatar billede hans01 Forsker
14. juli 2017 - 07:07 #14
God morgen, jeg har knoklet lidt videre med mit script, Nu opnår jeg kontakt med databasen, jeg kan igen indsætte faste værdier, men det kniber med formular værdierne, tilllige indsætter scriptet data straks, og ikke først når jeg klikker på send, min php ser således ud:

<?php
ini_set('error_reporting', E_ALL);
if(isset($_POST['submit1']) && !empty($_POST['submit1'])) {
    // there is something in the field, do stuff
} else {
    // trigger error
//variabler

$servername = "localhost";
$username = "root";
$password = "";

//connect to database
try {
    $conn = new PDO("mysql:host=$servername;dbname=sneppen", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    exit();
    }

//form variabler

$from = isset($_POST['from']);
$to = isset($_POST['to']);
$voksne = isset($POST['voksne']);
$boern = isset($POST['boern']);
$fname = isset($POST['fname']);
$ename = isset($POST['ename']);
$email = isset($POST['email']);
$telefon = isset($POST['telefon']);
$specielle = isset($POST['specielle']);

//indsæt data i databasen
 
$sql = "INSERT INTO `username`(`ankomstdato` , `afrejsedato` , `antalperson` , `antalboern` , `fornavn` , `efternavn` , `email` , `telefon` , `specielle`) VALUES ('$from','$to','$voksne','$boern','$fname','$ename','$email','$telefon','$specielle')";

$sqlresult = $conn->prepare($sql);
$sqlsend = $sqlresult->execute(array("ankomstdato"=>$from, "afrejsedato"=>$to, "antalperson"=>$voksne, "antalboern"=>$boern, "fornavn"=>$fname, "efternavn"=>$ename, "email"=>$email, "telefon"=>$telefon, "specielle"=>$specielle));
if($sqlsend)
{
    echo 'Data insat';
}else
{
echo 'Data ikke indsat';   
}
}

$conn = null;
?>
Avatar billede olsensweb.dk Ekspert
14. juli 2017 - 09:36 #15
>tilllige indsætter scriptet data straks, og ikke først når jeg klikker på send,
du skal pakke dette

//form variabler
....
echo 'Data ikke indsat';   
}
}


ind i en if( isset() ), hvor du tester på et name du sender med over
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

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