Avatar billede wanthai Nybegynder
06. marts 2014 - 10:45 Der er 10 kommentarer

indsæt formulardat fra php i mysql

Jeg har et problem med at indsætte formulardata fra php i mysql.

Min formular ser sådan ud:

<html>
<head>
<title>Opret bruger</title>
    <link href="CSS/Slaegt.css" rel="stylesheet" type="text/css">
</head>

    <link href="CSS/Slaegt.css" rel="stylesheet" type="text/css">
</head>

<body id="body">

<div id="container">

<div id="top"></div>

  <div id="venstre"> </div>
 
  <div id="center">

    <h1 class="style2">Opret bruger</h1>
   
    <div id="formfelt">
   
    <form action="indsaet.php" method="post">

        <div align="left">
    Fornavn:
      <input name="fornavn" type="text" maxlength="15">         
      <br>
          <br>
   
    Efternavn:
        <input name="efternavn" type="text" maxlength="15">
        <br>
        <br>
   
    Alder:
        <input type="number" maxlength="3" name="alder" />
        <br>
        <br>
   
    Adresse:
        <input type="text" maxlength="75" name="adresse" />
        <br>
        <br>
   
        <input type="submit" value="Opret dig">
        </div>
    </form>
   
</div>
</div>
</div>

</body>
    </html>


og min indsæt del ser sådan ud:

<body id="body">

<div id="container">

<div id="venstre">

<div id="center">

    <?php
    $fornavn = $_POST["fornavn"];
    $efternavn = $_POST["efternavn"];
    $alder = $_POST["alder"];
    $adresse = $_POST["adresse"];

$errorCount = 0;
    if($fornavn == "")
    {
    echo "Du skal indtaste dit fornavn.<br>";
    $errorCount++;
    }
    if($efternavn== "")
    {
    echo "Du skal indtaste dit efternavn.<br>";
    $errorCount++;
    }
 
    if($alder == "")
    {
    echo "Du skal indtaste din alder.<br>";
    $errorCount++;
    }
    if($adresse== "")
    {
    echo "Du skal indtaste din adresse.<br>";
    $errorCount++;
    }
   
    mysql_connect("localhost","root","");
    mysql_select_db("mydatabase") or die ("kan ikke kontakte databasen");
   
    if($errorCount == 0)
   
    {
    mysql_query("INSERT INTO nykunder * ('$_POST[fornavn]', '$_POST[efternavn]', '$_POST[alder]', '$_POST[adresse]')") OR DIE(mysql_error());
    if(!$insert)
    echo "Der skete en fejl. Pr&oslash;v igen. <a href=\"java script:history.back(-1)\">Tilbage</a><br>";
    else
    echo "Brugeren blev oprettet. <a href=\"default.php\">Forside</a><br>";
    }?>
   
</div>


</div>

</div>

</body>

Men den kan ikke indsætte noget. den returnerer flg.:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* ('tage', 'valdemar', '62', 'her')' at line 1
Avatar billede jakobdo Ekspert
06. marts 2014 - 11:23 #1
prøv at ret din query til:

mysql_query("INSERT INTO nykunder VALUES ('$_POST[fornavn]', '$_POST[efternavn]', '$_POST[alder]', '$_POST[adresse]')") OR DIE(mysql_error());

Et lille trick jeg gerne bruger, er at indsætte en række direkte i phpmyadmin og så kopiere den sql den viser efterfølgende.
Så skal du "bare" erstatte værdierne med dine $_POST-variabler.
Avatar billede arne_v Ekspert
06. marts 2014 - 19:34 #2
Og efter at programmert virker men foer det smides paa internettet saa tilfoej lidt beskyttelse mod SQL injection.
Avatar billede jakobdo Ekspert
06. marts 2014 - 20:14 #3
Det arne_v mener, kig på mysqli eller pdo. :o)
Avatar billede arne_v Ekspert
07. marts 2014 - 01:30 #4
Hvis man absolut vil opretholde den rigtige 2002-2004 stemning (dengang web sider havde en "Virker bedst i IE 6" nederst paa siden) kan man ogsaa bruge mysql_real_escape_string.

:-)
Avatar billede wanthai Nybegynder
08. marts 2014 - 15:20 #5
Hej jakobdo

Er ked af min langsomme reaktion, men er i øjeblikket i udlandet, og var uden netværk i et par dage.

Det var lige det der skulle til. Nu sender den det til db. Men dog med det problem a fornavnet ikke kommer med.

Jeg prøvede så det rick du foreslog med at lave en indsæt i db'en, og så kopiere koden fra sql/fremstil phpkode, det gav dette:

$sql = "INSERT INTO `mydatabase`.`nykunder` (`K_Id`, `fornavn`, `efternavn`, `alder`, `adresse`) VALUES (NULL, \'$_POST[fornavn]\', \'$_POST[efternavn]\', \'$_POST[alder]\', \'$_POST[adresse]\');";

som jeg så ændrede til:

    mysql_query("INSERT INTO nykunder  VALUES (NULL ,'$_POST[fornavn]', '$_POST[efternavn]', '$_POST[alder]', '$_POST[adresse]')") OR DIE(mysql_error());

Nu sender den det hele til db, men den brokker sig over denne linje i indsæt:

Notice: Undefined variable: insert in C:\wamp\www\mydatabase\indsaet.php on line 46

if(!$insert)

er det forkert at bruge det? eller er det koden der er forkert?

Til arne_v:

Jeg skal nok forsøge at få lidt mere sikkerhed ind inden jeg smider det på nettet.

Til jer begge to: mysqli har jeg aktiveret, pdo ved jeg intet om.
Det er helt på selvlært niveau dette her, derfor også så mange faldgruber.
Af samme grund er jeg dybt taknemlig for at der er nogen der har overskud til at hjælpe mig og andre med samme (manglende) indsigt i formularhåndtering.
Avatar billede jakobdo Ekspert
10. marts 2014 - 10:11 #6
At fornavn mangler, virker underligt.
Et trick jeg altid bruger, når jeg laver disse forms og er lidt usikker på hvilke data jeg rent faktisk får med videre fra min form, er at skrive denne kode øverst i min "form-handler" kode.

Hos dig vil det være i toppen af din indsaet.php fil.

echo '<pre>';
print_r($_POST);
echo '</pre>';

Så kan du præcist se hvilke data du får med og hvad deres "navne" er.
Avatar billede wanthai Nybegynder
11. marts 2014 - 16:03 #7
Ja, det med fornavnet forstår jeg heller ikke rigtigt. Har tænkt på om det kan være forårsaget af at jeg ikke skriver NULL for ID, men blot fornavn, efternavn osv. har ikke prøvet det af.
Men nu virker det, blot brikker den sig over if(!$insert). Håber at jeg finder løsningen.
Vil tilføje de tre linier i min indsaet.php.
Avatar billede jakobdo Ekspert
12. marts 2014 - 09:00 #8
Test følgende:

$sql = "INSERT INTO `mydatabase`.`nykunder` (`K_Id`, `fornavn`, `efternavn`, `alder`, `adresse`) VALUES (NULL, '".$_POST['fornavn']."', '".$_POST['efternavn']."', '".$_POST['alder']."', '".$_POST['adresse']."');";
mysql_query($sql);
Avatar billede wanthai Nybegynder
12. marts 2014 - 14:29 #9
Det er lige det der skal til, så nu må det være på tide at du smider et svar.
Tak for hjælpen.
Jeg roder mig helt sikkert ind i flere problemer undervejs, så jeg er nok at finde her igen.
:)
Avatar billede jakobdo Ekspert
12. marts 2014 - 20:48 #10
Svar!
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