Avatar billede mibu Nybegynder
26. januar 2006 - 10:53 Der er 18 kommentarer og
1 løsning

INSERT INTO virker ikke!

Hej eksperter
Jeg er for første gang, ved at forsøge med en db. Jeg er ikke noget jern til det endnu. Mit problem er en medlemdb som jeg godt kan oprette medlemmer i hvis jeg gør det via phpMyAdmin, jeg kan også godt hente, disse ud via hjemmesiden.
Men jeg kan ikke via hjemmesiden putte noget ind.

Min kode:

<font face="Verdana"><form name="indtast" method="post" action="indtast.php">
<P>&nbsp;Fornavn:&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="fornavn" size="50" maxlength="50"></P>
<P>&nbsp;Efternavn:&nbsp;&nbsp;<input type="text" name="efternavn" size="50" maxlength="50"></P>
<P>&nbsp;Adresse:&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="adresse" size="50" maxlength="50"></P>
<P>&nbsp;Adresse2:&nbsp;&nbsp;<input type="text" name="adresse2" size="50" maxlength="50"></P>
<P>&nbsp;Postnr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="postnr" size="4" maxlength="4">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By:&nbsp;&nbsp;&nbsp;<input type="text" name="by" size="35" maxlength="35"></P>
<P>&nbsp;Telefon:&nbsp;&nbsp;&nbsp;<input type="text" name="tlf" size="8" maxlength="8"></p
<p>&nbsp;Oprettet af&nbsp;<input type="text" name="vet" size="5" maxlength="5"></P>
<p align="center"><input type="submit" name="send" value="Opret Dårlig betaler">
</form>
</font>                <div align="center">

<?php
//henter formularfelter
$fornavn = $_REQUEST["fornavn"];
$efternavn = $_REQUEST["efternavn"];
$adresse = $_REQUEST["adresse"];
$adresse2 = $_REQUEST["adresse2"];
$postnr = $_REQUEST["postnr"];
$by = $_REQUEST["by"];
$tlf = $_REQUEST["tlf"];
$vet = $_REQUEST["vet"];

//kontakt base
mysql_connect ("xxx.xxx.xxx.xxx", "xxxxxx", "xxxxxx")
or die (mysql_error());
mysql_select_db ("min_db")
or die (mysql_error());

//indsæt indholdet i database
mysql_query("INSERT INTO klienter(id, fornavn, efternavn, adresse, adresse2, postnr, by, tlf, rki, vet, dato) values(0, '$fornavn','$efternavn','$adresse','$adresse2','$postnr','$by','$tlf','$vet')");
?>

Kan nogen se min fejl

Michael
Avatar billede ldanielsen Nybegynder
26. januar 2006 - 11:20 #1
INSERT INTO klienter
(id, fornavn, efternavn, adresse, adresse2, postnr, by, tlf, rki, vet, dato)
values(0, '$fornavn','$efternavn','$adresse','$adresse2','$postnr','$by','$tlf','$vet')

Der er 11 felter i den første parentes, men kun 9 i den anden
Avatar billede mibu Nybegynder
26. januar 2006 - 11:29 #2
OK der er godt nok kun 8 felter i den anden (jeg har $rki med i den originale version)Jeg har udeladt id og dato. id er i basen sat auto_increment og dato er timestamp, så den skal vel heller ikke med? Eller hvad?
Avatar billede mibu Nybegynder
26. januar 2006 - 11:52 #3
Nå nu har jeg prøvet at rette så der står:
INSERT INTO klienter
(id, fornavn, efternavn, adresse, adresse2, postnr, by, tlf, rki, vet, dato)
values(0, '$id','$fornavn','$efternavn','$adresse','$adresse2','$postnr','$by','$tlf','$rki','$vet','$dato')

Det virker heller ikke
Avatar billede morhan Novice
26. januar 2006 - 12:02 #4
mysql vil gerne have ` rundt om reserverede navne

INSERT INTO klienter
(id, fornavn, efternavn, adresse, adresse2, postnr, `by`, tlf, rki, vet, dato)
values(0, '$id','$fornavn','$efternavn','$adresse','$adresse2','$postnr','$by','$tlf','$rki','$vet','$dato')
Avatar billede mibu Nybegynder
26. januar 2006 - 12:11 #5
Undskyld jeg sprøg dumt! "reserverede navne" er der alle felter? eller er det kun `by` og i så fald for så kun der?
Michael
Avatar billede mibu Nybegynder
26. januar 2006 - 12:12 #6
Ups! Læs "hvorfor så kun der"
Avatar billede mkjaer Nybegynder
26. januar 2006 - 13:19 #7
Prøv:

INSERT INTO klienter
(id, fornavn, efternavn, adresse, adresse2, postnr, 'by', tlf, rki, vet, dato)
values(NULL, '$fornavn','$efternavn','$adresse','$adresse2','$postnr','$by','$tlf','$rki','$vet',NULL)
Avatar billede ldanielsen Nybegynder
26. januar 2006 - 13:22 #8
Hvis du vil kalde dine kolonner for if, limit, password, by eller andet der har en betydning i programmeringen, så skal du have ` omkring. Også hvis du vil have mellemrum eller danske bogstaver i feltnavnene.

Det er en god ide at have nogle faste regler for hvordan man navngiver felter og andet. Ofte vælger man at give navnene et prefix der angiver datatypen, så bliver det lettere at huske hvilken datatype man har brugt og man undgår også de reserverde ord:

Navn skal være strNavn
Dato skal være dtmDato

Endvidere bruger man b for Bit, i for integer, flt for float

(Jeg husker ikke datatyperne i MySql, bruger selv MSSQL)
Avatar billede ldanielsen Nybegynder
26. januar 2006 - 13:25 #9
Normen er også at kalde primærnøglen for TabelnavnID, så dit id skulle have heddet KlienterID. Endvidere er det normalt ikke at bruge flertal i tabelnavne, så selvom det er en liste over klienter vil man kalde tabellen for Klient, og id'et for KlientID. Det kommer hurtigt til at virke logisk, og du vil have lettere ved på et tidspunkt at samarbejde med andre programmører/databasedesignere
Avatar billede mibu Nybegynder
26. januar 2006 - 13:44 #10
Tak for de gode råd til dig Ida jeg tror faktisk at vil rette min database til efter dine anvisninger. Men desværre har jeg også prøvet mkjaer's råd og det virker heller ikke, så det problem tager jeg først.
Avatar billede mkjaer Nybegynder
26. januar 2006 - 13:57 #11
Prøv at rette feltnavnet 'by' til 'byen' i din tabel, og så efterfølgende:

INSERT INTO klienter
(id, fornavn, efternavn, adresse, adresse2, postnr, byen, tlf, rki, vet, dato)
values(NULL, '$fornavn','$efternavn','$adresse','$adresse2','$postnr','$byen','$tlf','$rki','$vet',NULL)

Så skulle den vist være der :-)
Avatar billede mibu Nybegynder
26. januar 2006 - 15:22 #12
YES! Tak til "mkjaer" Fejlen var ( values(0, NULL, etc. etc.  ) Jeg havde glemt at fjerne "0".
Hvis mkjaer vil være så venlig at lægge et svar, der venter nogle velfortjente point.
Og iøvrigt tak til alle, det er dejligt at at der er nogle hårdt arbejdende mennesker der gider hjælpe en dum amatør :-)
Michael
Avatar billede mkjaer Nybegynder
26. januar 2006 - 15:25 #13
Selv tak,
Martin
Avatar billede mibu Nybegynder
26. januar 2006 - 15:49 #14
Et lille tillægsspørgsmål!
Nu kan jeg oprette via hjemmesiden, men for hvert medlem der oprettes laves der en ekstra tom, dvs. der dannes kun et id og en dato? Hvad har jeg gjort galt. hvis en af jer kan "knække" den, lægger jeg gerne 50p i puljen.
Michael
Avatar billede mkjaer Nybegynder
26. januar 2006 - 15:51 #15
Læg lige en kopi af din kode, så kigger jeg på det.
Avatar billede mibu Nybegynder
26. januar 2006 - 16:14 #16
<td width="70%" valign="top" bgcolor="#DDDDDD" height="300" style="border-style: inset; border-width: 2"><br>

<font face="Verdana"><form name="indtast" method="post" action="indtast.php">
<P>&nbsp;Fornavn:&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="fornavn" size="50" maxlength="50"></P>
<P>&nbsp;Efternavn:&nbsp;&nbsp;<input type="text" name="efternavn" size="50" maxlength="50"></P>
<P>&nbsp;Adresse:&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="adresse" size="50" maxlength="50"></P>
<P>&nbsp;Adresse2:&nbsp;&nbsp;<input type="text" name="adresse2" size="50" maxlength="50"></P>
<P>&nbsp;Postnr:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="postnr" size="4" maxlength="4">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bynavn:&nbsp;<input type="text" name="byen" size="35" maxlength="35"></P>
<P>&nbsp;Telefon:&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="tlf" size="8" maxlength="8">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Anmeldt til RKI&nbsp;&nbsp;ja/nej:&nbsp;<input type="text" name="rki" size="3" maxlength="3"></p
<p>&nbsp;Oprettet af dyrlæge&nbsp;<input type="text" name="vet" size="5" maxlength="5"></P>
<p align="center"><input type="submit" name="send" value="Opret Dårlig betaler">
</form>
</font>                <div align="center">

<?php
//henter formularfelter
$fornavn = $_REQUEST["fornavn"];
$efternavn = $_REQUEST["efternavn"];
$adresse = $_REQUEST["adresse"];
$adresse2 = $_REQUEST["adresse2"];
$postnr = $_REQUEST["postnr"];
$byen = $_REQUEST["byen"];
$tlf = $_REQUEST["tlf"];
$rki = $_REQUEST["rki"];
$vet = $_REQUEST["vet"];

//kontakt base
mysql_connect ("xxx.xxx.xxx.xxx", "xxxxxxx", "xxxxxxx")
or die (mysql_error());
mysql_select_db ("db_navn")
or die (mysql_error());

//indsæt indholdet i database
mysql_query("INSERT INTO klienter(id, fornavn, efternavn, adresse, adresse2, postnr, byen, tlf, rki, vet, dato) values(NULL,'$fornavn','$efternavn','$adresse','$adresse2','$postnr','$byen','$tlf','$rki','$vet',NULL)");

?>
   
                </div>
                </td>
Avatar billede mibu Nybegynder
26. januar 2006 - 20:37 #17
Okay jeg har rodet lidt mere med det, det der sker er at det "tomme skema" åbentbart "submitter" sig selv når siden kaldes via menuen.
Hvis jeg trykker et antal gange på sidemenuknappen, resulterer det et lig antal tomme medlemkort. Menu knappen er bare en simpel <a href="xxx.php" target="_self">Indtast</a> så det er vel ikke der den ligger.
Avatar billede mkjaer Nybegynder
26. januar 2006 - 21:43 #18
Indsæt dette i din form: <input type=hidden name=action value=send>

Og dette omkring din PHP-kode:

if ($action=="send")
{
PHP Koden her
}

Så skriver dit script først i databasen, når formen bliver submittet.

hilsen
Martin
Avatar billede mibu Nybegynder
27. januar 2006 - 19:59 #19
Tusind tak! desværre så jeg ikke dit sidste svar før sidst på eftermiddagen, så jeg fandt selv på en anden løsning. Som, indrømmet, er noget mere besværlig end din lille fikse sag :-)
Jeg bad "submit" sende til en anden side. Her havde jeg så lagt php-koden.
BESVÆRLIGT? JA! Men det virker da!
Michael
PS. Mellem os i dette lille forum så tror jeg nok jeg retter det til dit forslag :-)

Og så lægger jeg lige et 50p spørgsmål til "mjkaer", som du lige kan svare på.
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