08. maj 2012 - 19:58Der er
28 kommentarer og 1 løsning
Medlemsdatabase
Jeg kan ikke få databasen til at fungere. Jeg har en indmeldelsesside, opret_medlem.html samt en side, der skal lægge data fra formularen ind i databasen (opret_medlem.php). -------------------------------------------------------- opret_medlem.html:
<!DOCTYPE HTML SYSTEM> <head> <meta http-equiv="Content-Type" content="text/html"> <LINK REL="STYLESHEET" HREF="sk.css" TYPE="text/css"> <title>Indmeldelse i personaleforeningen</title> </head> <body>
// Skab forbindelse til databasen her include("connect.php"); //Inkluder filen der connecter til min database //Indsæt indholdet af formularfelterne i databasen mysql_query("INSERT INTO medlemmer (fornavn, efternavn, arb_sted, mobil, email,udd, ansat_sted, postnr, by, foedselsaar, foedselsmd, foedselsdag')"); or die(mysql_error()); ?>
Tak for din indmeldelse! -------------------------------------------------------------
Et oplagt problem er, at du ikke fortæller mysql hvad du vil have indsat i tabellen medlemmer. I feltet fornavn vil du have indsat indholdet af $fornavn, i feltet efternavn $efternavn, o.s.v. Med andre ord:
mysql_query("INSERT INTO medlemmer (fornavn, efternavn, arb_sted, mobil, email,udd, ansat_sted, postnr, by, foedselsaar, foedselsmd, foedselsdag') $fornavn, $efternavn, $arb_sted, $mobil, $email, $udd, $ansat_sted, $postnr, $by, $foedselsaar, $foedselsmd, $foedselsdag"); or die(mysql_error());
Ebbebaek, du siger "Jeg kan ikke få databasen til at fungere." Men du præciserer ikke hvad der går galt, hvad det er du forventede som ikke sker.
Du viser i opret_medlem.html koden for en formular til at indføre data. Efter klik på 'Send oplysninger' kaldes filen opret_medlem.php, og denne fil kalder databasen og forsøger at indføre oplysningerne fra formularen i tabellen medlemmer.
Så hvad sker der, når formularen er udfyldt og der er klikket på 'Send oplysninger'? Får du en fejlmelding fra databasen eller får du en blank side eller hvad?
Jeg får en blank side og kan ikke se medlemmer på en visningsside, som jeg har lavet sådan: --------------------------------------------- vis_medlemmer.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <LINK REL="STYLESHEET" HREF="sk.css" TYPE="text/css"> <title>Medlemmer af Personaleforening for Psykiatriansatte i Silkeborg</title> </head> <body> <H3 align=center>Medlemmer</h3> <center>
<p> Pt. er der <?php $query = mysql_query("SELECT id FROM medlemmer"); $numb = mysql_num_rows($query); echo $numb; ?> medlemmer i personaleforeningen.
<p>
<?php // Skab forbindelse til databasen her include("connect.php"); //Inkluder filen der connecter til databasen
//Laver en forespørgsel i tabellen min_tabel $svar = mysql_query("SELECT * FROM medlemmer ORDER BY fornavn ASC") or die(mysql_error());
Hvis du, efter at have udfyldt og afsendt formularen i opret_medlem.html, får en blank side og ingen fejlmelding fra mysql, så er det muligt, at filen opret_medlem.php af en eller anden årsag ikke kaldes. Du kunne jo prøve at undersøge det ved i opret_medlem.php at udskrive variablerne. Du kan, midlertidigt for test, ændre koden i opret_medlem.php således:
Jeg har nu lagt formular samt kald af database og indsætning af data i tabel i samme fil, 'opret_medlem.php'
Jeg har ændret REQUEST-kommando til POST-kommando samt tilført VALUES. Jeg har lagt yderligere testning ind i form af udskrivning af varibler. Disse bliver udskrivet på skærmen, når jeg klikke på Send. MEN - de kommer ikke i databasen! Kigger jeg via phpAdmin MySQL, kan jeg også se der ikke er tilføjet nogen "rækker". Mystisk ...!
Så du får disse variable udskrevet. Så der er forbindelse mellem formularen og filen opret_medlem.php. Når du alligevel ikke får dataerne indført i database tabellen OG IKKE FÅR FEJLMELDING på trods af, at du i mysql queryen bruger ..or die(mysql_error(), så tyder det på, at du ikke har forbindelse til databasen. Hvad har du stående i filen 'connect.php'? Er det 100% sikkert, at det forbinder til den rigtige database?
Nu har jeg prøvet at oprette en tabel på et andet webhotel, jeg også har MySQL på (bare for at checke). ---------------------------- Indhold af 'connect.php': <?php mysql_connect("localhost", "brugernavn", "password") or die(mysql_error()); mysql_select_db("databasenavn"); ?> ---------------------------- Brugernavn, pw samt databasenavn er korrekte (naturligvis ikke anført i dette offentlige forum ;-))
Måske er det tabellen, der er oprettet i databasen, der ikke er korrekt? Jeg har valgt 'id' til typen 'tinyint', 4 karakterer og er valgt som primær nøgle. De øvrige felter er af typen 'varchar' og på 25 karakterer Hvad skal der stå i parametrene attributes, null, default og extra?
Hvis der er noget galt med tabellen, så burde du få en mysql_error skrevet ud. Men her er et par ting du kan gøre:
Hvis der er VARCHAR som datatype i felterne, så skal variablerne velsagtens stå mellem anførselstegn. En korrigeret query:
mysql_query("INSERT INTO medlemmer (fornavn, efternavn, arb_sted, mobil, email,udd, ansat_sted, postnr, by, foedselsaar, foedselsmd, foedselsdag') VALUES ('$fornavn', '$efternavn', '$arb_sted', '$mobil', '$email', '$udd', '$ansat_sted', '$postnr', '$by', '$foedselsaar', '$foedselsmd', '$foedselsdag')"); or die(mysql_error());
Det er her vigtigt, at du bruger enkelt anførselstegn, apostrof, omkring variablerne, så de ikke konflikter med de dobbelte anførselstegn der omrammer hele queryen.
Og du kan teste tabellen ved at indføre dataerne direkte i phpMyAdmin. Hvis du i en formular har indført, for eksempel, Jens Jensen Birkeparken 065724398 abc@de.fg o.s.v., så skriv i sql vindue for medlemmer tabellen:
INSERT INTO medlemmer (fornavn, efternavn, arb_sted, mobil, email, ....) VALUES('Jens', 'Jensen', 'Birkeparken', '065724398', 'abc@de.fg , ....)
Så skulle du meget gerne enten få disse data indsat i tabellen eller få en fejlmelding.
Jeg går ud fra, at id er nøglefeltet for tabellen. Ved at bruge tinyint begrænser du tabellen til 256 rækker, hvilket måske er nok i dit tilfælde, men det er mere gængs at bruge INT.
Og eftersom du i din query ikke indfører en værdi for id går jeg ud fra, at den er AUTO_INCREMENT. Det skal så stå som Extra, og der må ikke være andre AUTO_INCREMENT felter. Attributes kan du lade stå blank, Null skal for id være No hvis den er AUTO_INCREMENT, for resten af felterne skal du beslutte, om de må være blanke, om du for eksempel vil acceptere medlemmer der ikke har email eller mobil. For de felter der må stå blanke skal Null være Yes, ellers No. Default kan du lade være Null for varchar felter og None for id.
Herefter får jeg desværre en fejl-melding: #1064 - 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 'by, foedselsaar, foedselsmd, foedselsdag) VALUES('Ebbe', 'Bæk', 'PH-Akut Døgn'' at line 1
Jamen hvor der er liv er det håb. Du fik mysql til at give en fejlmelding.
by er åbenbart et reserveret ord i mysql, et ord med en special betydning for programmet. For at bruge et reserveret ord skal man placere det mellem `` altså baglæns apostroffer. Prøv med:
INSERT INTO medlemmer (fornavn, efternavn, arb_sted, mobil, email,udd, ansat_sted, adresse, postnr, `by`, foedselsaar, .... o.s.v.
Hvis du så får værdierne indsat i tabellen, så ved du, at tabellen og database delen er gode nok. Du har allerede, ved at udskrive på skærmen de variable du fylder i formularen, checket at formularen er ok og at der er forbindelse mellem formularen og opret_medlem.php filen.
Hvis du stadig ikke ud fra programmet hverken får dataerne indsat i tabellen eller får en mysql_error fejlmelding, så kan det næsten kun være, fordi php programmet ikke har forbindelse med mysql. Af en eller anden årsag. Kan der være en eller anden tyrkfejl i 'connect.php? Du kunne jo prøve, i stedet for at skrive
// Skab forbindelse til databasen her include("connect.php"); //Inkluder filen der connecter til min database
så at skrive
// Skab forbindelse til databasen her mysql_connect("localhost", "abcde", "fghij") or die(mysql_error()); mysql_select_db("klmno"); ...
eller hvad brugernavn, adgangskode, og database nu er.
Hvis det heller ikke virker, kan det så tænkes, at der er noget med en tilladelse du ikke har eller en aktivering af mysql der mangler? Den slags ved jeg mindre om. Hvis du kommer så langt, ved at have udelukket alle andre muligheder, at der må være blokkader mellem php programmet og mysql, så var det måske et emne for et nyt spørgsmål som så vil få frisk opmærksomhed fra ekspertens medlemmer. I et sådan spørgsmål skal du nok inkludere tekniske detaljer såsom computerens operativsystem og din localhost setup (bruger du for eksempel xampp?).
Siger du, at (1) du nu kan indsætte dataerne i tabellen i phpmyadmin, og (2) derefter kan du i vis_medlemmer.php se de indsatte data? Prima.
Du kan ikke se opret_medlem.php i browseren. I den kode du viser i dit oprindelige spørgsmål skulle der udskrives 'Tak for henvendelsen' uanset om det lykkedes at indføre dataerne eller ej, så det burde du kunne se. Jeg foreslog i #8 at du i koden til opret_medlem.php skulle indsætte "echo "<br>Fornavn = $fornavn";" o.s.v. Jeg forstod på #9, at du havde gjort det, og at du så kunne se fornavn o.s.v. udskrevet. Altså se opret_medlem.php i browseren. Havde jeg forstået det rigtigt? Så er situationen, at du tidligere kunne se opret_medlem.php (de udskrevne variabler) men nu ikke kan se noget mere? Eller har du aldrig kunnet se noget fra opret_medlem.php?
Jeg har rettet lidt i de to filer: ----------------------------------- 'opret_medlem.html':
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <meta http-equiv="Content-Type" content="text/html"> <LINK REL="STYLESHEET" HREF="sk.css" TYPE="text/css"> <title>Indmeldelse i personaleforeningen</title> </head> <body> <center><h3>Indmeldelse i "Personaleforeningen for Psykiatriansatte i Silkeborg kommune"</h3> Rettelser? skriv til <a href="mailto:eb@silkeborg.dk">os</a>!<p>
// Skab forbindelse til databasen her include("connect.php"); //Inkluder filen der connecter til min database //Indsæt indholdet af formularfelterne i databasen mysql_query("INSERT INTO medlemmer (fornavn, efternavn, arb_sted, mobil, email, udd, ansat_sted, adresse, postnr, town, foedselsaar, foedselsmd, foedselsdag') VALUES ('$fornavn', '$efternavn', '$arb_sted', '$mobil', '$email', '$udd', '$ansat_sted', '$adresse','$postnr', '$town', '$foedselsaar', '$foedselsmd', '$foedselsdag')"); or die(mysql_error()); ?> </body> </html> --------------------- 'opret_medlem.php': <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <title>Tak for indmeldelsen!</title> <meta http-equiv="Content-Type" content="text/html"> <LINK REL="STYLESHEET" HREF="sk.css" TYPE="text/css"> <body> Tak for indmeldelsen!<br> Du har indskrevet flg. data:<p>
STOP! Alt tyder på, at problemets kærne er manglende forbindelse mellem php koden og databasen, og min mistanke har længe været, at det du har i connect.php ikke er det rigtige, for eksempel at password ikke (længere) er rigtigt. Så få det rigtigt undersøgt, og lad i mellemtiden alt det andet hvile.
Jeg har checket password og databasenavn, som er korrekt i php-koden. Og jeg får ingen fejlmeddelse, når jeg kalder 'connect.php' via 'opret_medlem.php' For sjov skyld har jeg prøvet at skrive noget andet som password, hvilken øjeblikkeligt giver en fejlkode:
Access denied for user 'socialpsykiatri'@'srv5.one.com' (using password: YES)
Ok, jeg reagerede på din bemærkning om, at der muligvis var ændret et password for databasen. Det er et godt tegn, at du får fejlmeldingen, når du bevidst bruger et forkert password.
Men den kode du viser i #17 vil ikke virke, af to grunde:
(1) I filen opret_medlem.html er de sidste godt 20 linjer php kode. PHP kode bliver ikke forstået i en fil med html 'efternavn'.
(2) Filen opet_medlem.html kalder filen opret_medlem.php som så skal sende dataerne til databasen, men opret_medlem.php indeholder ingen kode der kommunikerer med databasen. Hvis du tager php afsnittet i opret_medlem.html og flytter over i opret_medlem.php, så har du en chance.
Slagets gang er, at opret_medlem.html filen viser formularen på skærmen. Fordi formularen har <form .... action="opret_medlem.php"> , så kaldes filen opret_medlem.php, når der trykkes på submit knappen 'Send oplysninger!'
Fordi formularen har <form ... method="post"...> får du så i opret_medlem.php de indfyldte data leveret i form af $_POST['..'] variable som du kan pakke ud og sende til databasen. (Du har ret i, at formens navn ikke bruges til noget her.)
Jeg har nedenfor taget den kode du viser i #17 og flyttet rundt på den. Så skulle der meget gerne ske følgende:
(1) Du fårformularen på skærmen, og du fylder felterne ud.
(2) Når du trykker på 'Send oplysninger' skulle du se
'Tak for indmeldelsen! Du har indskrevet flg. data: Fornavn: Jens Efternavn: Jensen .... ....
(3) Dataerne sendes til databasen og bevares i tabellen.
Hvis det ikke sker, så forstår jeg det ikke og må nok give op.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <meta http-equiv="Content-Type" content="text/html"> <LINK REL="STYLESHEET" HREF="sk.css" TYPE="text/css"> <title>Indmeldelse i personaleforeningen</title> </head> <body> <center><h3>Indmeldelse i "Personaleforeningen for Psykiatriansatte i Silkeborg kommune"</h3> Rettelser? skriv til <a href="mailto:eb@silkeborg.dk">os</a>!<p>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <title>Tak for indmeldelsen!</title> <meta http-equiv="Content-Type" content="text/html"> <LINK REL="STYLESHEET" HREF="sk.css" TYPE="text/css"> <body> Tak for indmeldelsen!<br> Du har indskrevet flg. data:<p>
// Skab forbindelse til databasen her include("connect.php"); //Inkluder filen der connecter til min database //Indsæt indholdet af formularfelterne i databasen mysql_query("INSERT INTO medlemmer (fornavn, efternavn, arb_sted, mobil, email, udd, ansat_sted, adresse, postnr, town, foedselsaar, foedselsmd, foedselsdag') VALUES ('$fornavn', '$efternavn', '$arb_sted', '$mobil', '$email', '$udd', '$ansat_sted', '$adresse','$postnr', '$town', '$foedselsaar', '$foedselsmd', '$foedselsdag')"); or die(mysql_error());
Med min kodeversion i #22 får du en blank side når du i opret_medlem.html trykker på 'Send Oplysninger!' Er det hvad du siger?
Jamen så må problemet ligge i, at der ikke er forbindelse mellem opret_medlem.html og opret_medlem.php. Hvordan er din fil struktur? Filen opret_medlem.php skal ligge i samme mappe, samme directory, som filen opret_medlem.html. For eksempel, hvis opret_medlem.html ligger i mappen MinSide som igen ligger i mappen Root, således:
Ja så forstår jeg ikke et kuk, for så skulle opret_medlem.html kalde opret_medlem.php. Jeg må bøje mig for kendsgerningen, at det kan jeg ikke gennemskue.
Du har den mulighed at oprette et nyt spørgsmål som så får frisk opmærksomhed fra medlemsskaren. Jeg foreslår, at du i dit nye spørgsmål holder dig til, at opret_medlem.html ikke kalder opret_medlem.php (på trods af at filerne ligger i samme mappe.) Hvis du kan få det løst, så vil problemet med databasen med det samme blive løst.
Jamen vi opnåede da noget, nemlig at identificere problemet bedre. Så er chancen større for at det kan blive løst (ikke af mig.)
Jeg forstod på dig, at du ville lukke spørgsmålet og give points. For at gøre det skal du i mit svar #27 sætte 'flueben' ved 'Accepter dette svar' og derefter klikke på feltet 'Accepter svar og afgiv points.'
Jeg noterede mig, at du oprettede et nyt spørgsmål 'points til christian_belgien', men det er ikke måden at gøre det på. (Den metode bruges i andre tilfælde.)
(Spam mailen #28 skal naturligvis ignoreres.)
Synes godt om
Ny brugerNybegynder
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.