Avatar billede zeniamar5 Nybegynder
24. juli 2015 - 10:05 Der er 18 kommentarer og
1 løsning

Lagring af data fra kontaktformular

Jeg har lavet en kontaktformular i Dreamweaver CS6 i php-format. Data fra kontaktformularen skal sendes til en anden side på hjemmesiden: "koebelog(dk).php"

Problemet er, at når jeg tester den, kommer der ikke data ind på log-siden. Der kommer heller ikke fejlmeddelelser.

Websiden hedder www.zeniamar5.es Fjernserveren er forberedt til php.

Jeg har tidligere lavet det samme i FrontPage 2003, hvor man skulle definere, hvad de enkelte dele af kontaktformularen skal vise, men det er jeg ikke stødt på i Dreamweaver.

Jeg tror problemet måske kan have noget at gøre med
1)enten URL-adressen til siden koebelog (men så skulleder vel komme en fejlmeddelelse), eller
2)at siden koebelog skal konfigureres på en særlig måde for at modtage data fra formularen, eller
3)siderne "indsaet_koebeannonce.php" og "koebelog(dk).php" oprindelig er lavet i html, og så ændret til php ved blot at omdøbe.
Avatar billede tvilling53 Seniormester
24. juli 2015 - 11:19 #1
hej
På siden

http://www.zeniamar5.es/Dansk/KoebeSaelge/Saelge/indsaet_saelgeannonce(dk).html

ser det ud til at der mangler en submit-knap.
ligger
http://zeniamar5.es/Dansk/KoebeSaelge/Koebe/koebelog(dk).html"> i samme dir?

Thomas V
Avatar billede zeniamar5 Nybegynder
24. juli 2015 - 14:07 #2
Ja det er rigtigt. Det eneste, som er "færdigt" er købesiden, dvs. siden hvor købeannoncer skal indsættes, og siden hvor købeannoncer skal lagres.

Sælge-delen laver jeg først færdig, når jeg får det til at virke.
Avatar billede tvilling53 Seniormester
24. juli 2015 - 16:43 #3
Hej kan du ikke skrive koden hvor kontaktoplysninger skrives for bare et felt og koden fra siden der modtager de indsatte data eller de 2 sider det helt specifikt drejer sig om (url).

Thomas V
Avatar billede zeniamar5 Nybegynder
24. juli 2015 - 17:24 #4
Jo det kan jeg godt, men da jeg stort set ikke ved noget om koder, skal jeg være sikker på, at jeg gør det rigtige. Jeg har kopieret koderne for begge de 2 sider, som det drejer sig om, men de fylder hver for sig flere sider, og der er vel for meget at sætte ind i svaret her.

Er det det der menes? - og kan der vedhæftes filer til  svaret? (kan ikke finde det) - og hvad betyder "(url)"?, som står til sidst.
Avatar billede zeniamar5 Nybegynder
24. juli 2015 - 17:36 #5
Jeg har lige et supplerende spørgsmål:
Domænet zeniamar5.es  er i sin tid købt med servicetype: ASP/ASP NET. Alle siderne indtil nu - inkl. "index.html" er lavet i html.

På grund af ønsket om en kontaktformular har jeg fået det lavet om, så domæret nu er med servicetype PHP.

Jeg bliver i tvivl, om de hidtidige sider - specielt "index.html" -  fortsat kan være i html.

Ved oprettelse af en ny side i php kommer der en meddelelse om at være opmærksom på dynamiske effekter, og senere (hvis jeg klikker OK, kommer der en dialogboks, hvor inddex.html ser ud til at være et problem.
Avatar billede tvilling53 Seniormester
24. juli 2015 - 17:46 #6
Hej url er en web-adresse f.eks.
http://www.zeniamar5.es/Dansk/KoebeSaelge/Saelge/indsaet_saelgeannonce(dk).html

De 2 url som du skal sende er så siden med kontaktformular og siden som modtager data og behandler dem.

Thomas V
Avatar billede zeniamar5 Nybegynder
24. juli 2015 - 19:45 #7
Avatar billede olsensweb.dk Ekspert
24. juli 2015 - 20:37 #8
i http://www.zeniamar5.es/Dansk/KoebeSaelge/Koebe/indsaet_koebeannonce%28dk%29.php
ret din form action
fra
  
<form id="koebsannonce" action="zeniamar5@zeniamar5.es" method="post" name="koebsannonce">

til
  
<form id="koebsannonce" action="http://www.zeniamar5.es/Dansk/KoebeSaelge/Koebe/koebelog%28dk%29.php" method="post" name="koebsannonce">

du kan så i koebelog%28dk%29.php aflæse det sendte, validere det og sende en mail vha php

eller måske dette (bruger ikke selv mailto)
   
<form id="koebsannonce" action="mailto:zeniamar5@zeniamar5.es" method="post" enctype="text/plain name="koebsannonce">



ref https://www.google.com/search?q=html+form+action+email
http://stackoverflow.com/questions/7449767/how-do-i-send-an-html-form-in-an-email-not-just-mailto
http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_mail



det er iøvrigt ikke særligt smart at bruge parateser i URL'en

man er gået bort fra tabeller til desigt i år 2000.
Avatar billede zeniamar5 Nybegynder
25. juli 2015 - 11:12 #9
Jeg har nu prøvet at rette som beskrevet, og har også slettet parenteser i URL-adresser. Men der kommer stadig ikke noget ind i "koebelogdk.php"

Jeg har så prøvet med mailfunktionen, som jeg godt kan bruge i stedet, og når jeg gør det, så sker der følgende:

Når jeg trykker på "Send" i formularen kommer følgende meddelelse: "Der er ikke installeret nogen apps, som kan åbne denne type link (mailto)"

Når jeg så klikker på "Find app" kommer der følgende meddelelse: "Windows kan ikke finde ms-windows-store: Assoc? protokol=mailto. Kontrollér at du skrev navnet korrekt, og forsøg derefter igen.
Avatar billede olsensweb.dk Ekspert
25. juli 2015 - 12:23 #10
>Når jeg trykker på "Send" i formularen kommer følgende meddelelse: "Der er ikke installeret nogen apps, som kan åbne denne type link (mailto)"
en af årsagerne til det normalt ikke bruges, men så du ville anvende det i din action.
den vil anvende brugerens eget default mail program (outlook, thunderbird, osv), hvis det er i brugerens profil på maskinen

i http://www.zeniamar5.es/Dansk/KoebeSaelge/Koebe/indsaet_koebeannoncedk.php
ret din form action til

<form id="koebsannonce" action="http://www.zeniamar5.es/Dansk/KoebeSaelge/Koebe/koebelogdk.php" method="post" name="koebsannonce">


i toppen af koebelogdk.php insættes dette
(utested)

<?php
    print_r($_POST); // test   
?>


du skulle nu gerne få udskrevet alle de felter der har et name i formen der submittes
hvis du få dine data over erstatter du ovenstående med
(utested)

<?php
    // her hentes de posted felter, data skal valideres, og sikres der ikke sendes mail uønsket, ikke lavet
    $email = $_POST['email'];
    $koebstekst = $_POST['koebstekst'];
    $dato = $_POST['dato'];

    // bare for at vise data på skærmen
    echo "den " . $dato . " har " . $email . " skrevet<br>" . $koebstekst;
       
    // hvis data er OK skal mailen sendes med php
    // http://php.net/manual/en/function.mail.php Example #2 Sending mail with extra headers.
    $to      = 'zeniamar5@zeniamar5.es';
    $subject = 'mail fra kontakt formular';
    $message = "den " . $dato . " blev denne tekst skrevet \r\n";
    $message .= $koebstekst; // læg mærke til punktummet før ligheds tegnet, hvilke concatenerer stringe   
    $headers = 'From: ' . $email . "\r\n" .
    'Reply-To: ' . $email . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
?>

kig på functionerne
http://php.net/isset
http://php.net/empty
Avatar billede zeniamar5 Nybegynder
25. juli 2015 - 13:09 #11
Hej
Tak for det. Jeg skal have en bekendt til at hjælpe mig med at indsætte dette, så det må vente til mandag.

Men jeg har 2 spørgsmål:
1)Hvis jeg indsætter de data, der er oplyst, er det så til brug for at formresultaterne kommer i mail til zeniamar5@zeniamar5.es  ??

2) Hvad betyder: (utested)  ??
Avatar billede olsensweb.dk Ekspert
25. juli 2015 - 13:17 #12
1) nej, hvis du ikke skal bruge mailen til noget

2) jeg har ikke tested coden, så der kan være syntax, og andre små fejl.
Avatar billede zeniamar5 Nybegynder
25. juli 2015 - 20:37 #13
Jeg besluttede mig for selv at prøve. Og det virker. Resultatet af det skema, som jeg udfyldte efter indsættelse af den første kode, ses nedenfor.

Array ( [dato] => 25.07.2015 [navn] => Søren Rasmussen [husnr] => 24 [garagenr] => 9 [email] => selmannras@gmail.com [overskrift] => Test af købeannoncer [koebstekst] => Dette er en test af, om købeannoncer, som indrykkes at beboere i Zeniamar, også kommer op på hjemmesiden. Hvis de gør det, så kan alle andre beboere se dem, og kan så kontakte den beboer, som sælger. [send] => Send )

Jeg provede så at udskifte de først indsatte koder med den anden del. Men så kom der følgende fejlmeddelelse: "There is a syntax error on line 20. Code hinting may not work until you fik this error"

Linje 20 er den første linje i den oprindelige kode. Men hvis en rrød markening ude til venstre af en linje er en fejl, så er der masser af fejl. Der skete også det, at formularen i designvisning helt forsvandt

Men det, som den først indsatte kode gør, er godt nok, bare resultatet bliver systematiseret, således at feltnavnene står som overskrifter i fed type og teksten nedenunder i almindelige typer. Resultatet står øverst på siden, og skal stå længere nede, idet der på siden er noget indledende takst. Men det er vel et spørgsmål om, hvor den nye kode sættes ind.
Avatar billede zeniamar5 Nybegynder
26. juli 2015 - 00:22 #14
Endnu en konstatering: Data, som fra annoncen sættes ind på koebelogdk.php forsvinder igen, når der logges af. Tanken er, at det skal blive stående, og så slettes manuelt efter 6 måneder.
Avatar billede olsensweb.dk Ekspert
26. juli 2015 - 10:59 #15
#14
så skal det gemmes i en database
kig på sql CRUD ( create (insert), read (select), update, delete ) under mysqli eller PDO
http://php.net/manual/en/mysqli.insert-id.php
http://www.w3schools.com/php/php_mysql_insert.asp

http://php.net/manual/en/mysqli.query.php
http://www.w3schools.com/php/php_mysql_select.asp

http://www.w3schools.com/php/php_mysql_delete.asp

kig også på SESSION
http://php.net/manual/en/function.session-start.php

tænk over om !!

skal man være logget ind for at kunne oprette en annonce ?? (i givet falg behøver man ikke angive navn, email)

kan en bruger have flere annoncer  ?? (1 til mange relation)

kan en annonce have flere brugere ?? (mange til mange relation)

er dato altid dags dato ?? (i givet fald, anvend php date eller mysql NOW(), så er der heller ikke grund til at angive det)

hvordan ser din nuværende database structur ud ?? (E/R Diagram)
pt har du vel minimun 1 tabel (user)
Avatar billede zeniamar5 Nybegynder
26. juli 2015 - 12:23 #16
Til webhotellet for zeniamar5.es er der knyttet en MySQL database med hostnavn: mysql10.unoeuro.com Databasenavnet er: zeniamar5_es_db

Til dine spørgsmål er svaret:
1) Man skal være logget ind for at kunne oprette en annonce
2) Samme bruger kan have flere annoncer
3) Samme annonce kan KUN have 1 bruger

Selvom man ikke behøver at angive navn, email og dato så vil jeg gerne have, at det alligevel indgår i skemaet. Brugerne er 152 husejere og 46 garageejere med forskellig nationalitet. Det hele ender med at være på Dansk, Norsk, Engelsk og Spansk. Jeg tror det er svært at forstå, at de kan oprette en annonce uden at oplyse dato, navn og email
Avatar billede olsensweb.dk Ekspert
27. juli 2015 - 15:09 #17
>knyttet en MySQL database
det er din database, men for at kunne tilgå den via PHP skal du igennem et API, det oprindelige hed mysql, og er forældet, og ved at udgå af PHP, der er lavet en forbedret vertion der hedder mysqlI, som rigtig mange anvender, og der er kommet en yderligere forbedret vertion der hedder PDO, som jeg selv anvender, da det er fremtiden som jeg ser det.
http://php.net/manual/en/mysqlinfo.api.choosing.php

>1) Man skal være logget ind for at kunne oprette en annonce
så sætter du en session variabel med brugerens id, navn, email, og evt hvad han ejer, det anvendes i din formular

>2) Samme bruger kan have flere annoncer
>3) Samme annonce kan KUN have 1 bruger
altså en en til mange relation

>Jeg tror det er svært at forstå, at de kan oprette en annonce uden at oplyse dato, navn og email
navn og email henter du fra session, og kan sagtens skrive det i formularen for brugeren, felterne skal så bare være read only, og behøver ikke name attributten.
dato har php indbygget, og mysql har også noget indbygget
http://php.net/manual/en/function.date.php
https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html


altså kunne din database se ca sådan ud, her er det kategori opdelt, og nemt at udvide med feks lejlighed, en lidt besværlig codning, men meget flexibel, og den jeg vil vælge
   
--
-- Database: `test`
--

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

--
-- Struktur-dump for tabellen `tbl_annonce`
--

CREATE TABLE IF NOT EXISTS `tbl_annonce` (
`id` int(11) NOT NULL,
  `Dato` date DEFAULT NULL,
  `Overskrift` varchar(255) COLLATE utf8_danish_ci DEFAULT NULL,
  `Annoncetekst` longtext COLLATE utf8_danish_ci,
  `user_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

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

--
-- Struktur-dump for tabellen `tbl_ejer`
--

CREATE TABLE IF NOT EXISTS `tbl_ejer` (
`id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

--
-- Data dump for tabellen `tbl_ejer`
--

INSERT INTO `tbl_ejer` (`id`, `name`) VALUES
(1, 'hus'),
(2, 'garage');

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

--
-- Struktur-dump for tabellen `tbl_map_user_ejer`
--

CREATE TABLE IF NOT EXISTS `tbl_map_user_ejer` (
`id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `ejer_id` int(11) NOT NULL,
  `nr` varchar(5) COLLATE utf8_danish_ci NOT NULL COMMENT 'hus / garage nr eks 28A'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

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

--
-- Struktur-dump for tabellen `tbl_user`
--

CREATE TABLE IF NOT EXISTS `tbl_user` (
`id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_danish_ci DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

--
-- Begrænsninger for dumpede tabeller
--

--
-- Indeks for tabel `tbl_annonce`
--
ALTER TABLE `tbl_annonce`
ADD PRIMARY KEY (`id`), ADD KEY `fk_tbl_annonce_tbl_user_idx` (`user_id`);

--
-- Indeks for tabel `tbl_ejer`
--
ALTER TABLE `tbl_ejer`
ADD PRIMARY KEY (`id`);

--
-- Indeks for tabel `tbl_map_user_ejer`
--
ALTER TABLE `tbl_map_user_ejer`
ADD PRIMARY KEY (`id`);

--
-- Indeks for tabel `tbl_user`
--
ALTER TABLE `tbl_user`
ADD PRIMARY KEY (`id`);

--
-- Brug ikke AUTO_INCREMENT for slettede tabeller
--

--
-- Tilføj AUTO_INCREMENT i tabel `tbl_annonce`
--
ALTER TABLE `tbl_annonce`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Tilføj AUTO_INCREMENT i tabel `tbl_ejer`
--
ALTER TABLE `tbl_ejer`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
--
-- Tilføj AUTO_INCREMENT i tabel `tbl_map_user_ejer`
--
ALTER TABLE `tbl_map_user_ejer`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Tilføj AUTO_INCREMENT i tabel `tbl_user`
--
ALTER TABLE `tbl_user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Begrænsninger for dumpede tabeller
--

--
-- Begrænsninger for tabel `tbl_annonce`
--
ALTER TABLE `tbl_annonce`
ADD CONSTRAINT `fk_tbl_annonce_tbl_user` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;


en lidt nemmere db design vil måske være dette, hvor man har en liste med alle huse, og en liste med alle garager, men skal man nu udvide med feks lejlighed, skal man ud over lav e en ny tabel og code noget

--
-- Database: `test`
--

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

--
-- Struktur-dump for tabellen `tbl_annonce`
--

CREATE TABLE IF NOT EXISTS `tbl_annonce` (
`id` int(11) NOT NULL,
  `Dato` date DEFAULT NULL,
  `Overskrift` varchar(255) COLLATE utf8_danish_ci DEFAULT NULL,
  `Annoncetekst` longtext COLLATE utf8_danish_ci,
  `user_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

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

--
-- Struktur-dump for tabellen `tbl_garager`
--

CREATE TABLE IF NOT EXISTS `tbl_garager` (
`id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `nr` varchar(5) CHARACTER SET latin1 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

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

--
-- Struktur-dump for tabellen `tbl_huse`
--

CREATE TABLE IF NOT EXISTS `tbl_huse` (
`id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `nr` varchar(5) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

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

--
-- Struktur-dump for tabellen `tbl_user`
--

CREATE TABLE IF NOT EXISTS `tbl_user` (
`id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_danish_ci DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

--
-- Begrænsninger for dumpede tabeller
--

--
-- Indeks for tabel `tbl_annonce`
--
ALTER TABLE `tbl_annonce`
ADD PRIMARY KEY (`id`), ADD KEY `fk_tbl_annonce_tbl_user_idx` (`user_id`);

--
-- Indeks for tabel `tbl_garager`
--
ALTER TABLE `tbl_garager`
ADD PRIMARY KEY (`id`);

--
-- Indeks for tabel `tbl_huse`
--
ALTER TABLE `tbl_huse`
ADD PRIMARY KEY (`id`);

--
-- Indeks for tabel `tbl_user`
--
ALTER TABLE `tbl_user`
ADD PRIMARY KEY (`id`);

--
-- Brug ikke AUTO_INCREMENT for slettede tabeller
--

--
-- Tilføj AUTO_INCREMENT i tabel `tbl_annonce`
--
ALTER TABLE `tbl_annonce`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Tilføj AUTO_INCREMENT i tabel `tbl_garager`
--
ALTER TABLE `tbl_garager`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Tilføj AUTO_INCREMENT i tabel `tbl_huse`
--
ALTER TABLE `tbl_huse`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Tilføj AUTO_INCREMENT i tabel `tbl_user`
--
ALTER TABLE `tbl_user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Begrænsninger for dumpede tabeller
--

--
-- Begrænsninger for tabel `tbl_annonce`
--
ALTER TABLE `tbl_annonce`
ADD CONSTRAINT `fk_tbl_annonce_tbl_user` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
Avatar billede zeniamar5 Nybegynder
27. juli 2015 - 15:48 #18
Tak for det
Jeg tager lige 1 ting ad gangen - database.

Når jeg klikker på følgende link:  "http://php.net/manual/en/mysqlinfo.api.choosing.php"
så kommer der en side med oversskriften "Choosing API", og der er 3 muligheder, nemlig php, PDO og Mysql.

Jeg vil gerne vælge den du synes er bedst (PDO), men hvad gør jeg?:
1) Kopierer jeg PDO.kodeafsnittet og indsætter i forularen, og hvis ja: hvor? eller
2) Går jeg ind i download og vælger en af de 5 muligheder der (hvilken),
3) eller gør jeg noget helt tredje?

Jeg han se, at der bliver mege uforståeligt for mig, når jeg læser videre i der du har skrevet. Derfor her jeg er spærgsmål, som jeg håber ikke opfattes upassende: Har du mulighed for - mod betaling - at lave siden med formularen, så den virker?
Avatar billede olsensweb.dk Ekspert
29. juli 2015 - 13:35 #19
>Jeg vil gerne vælge den du synes er bedst (PDO), men hvad gør jeg?:
kig på denne guide/video
http://www.nemprogrammering.dk/Tutorials/PDO/PDO-kursus-tutorials-guides.php


ref https://www.google.com/search?q=pdo+tutorial+php
http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059
http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html
http://php.net/manual/en/book.pdo.php
http://www.mysqltutorial.org/php-querying-data-from-mysql-table/

>Har du mulighed for - mod betaling - at lave siden med formularen, så den virker?
Nej, da jeg er Jobsøgende på dagpenge, har jeg ikke have noget moms nummer.

du bør nok overveje at lave det i et Content Management System (CMS), hvis du ikke selv har/kan lave et CMS, (hvilke jeg ikke tror du kan med din nuværende viden) bør du bruge et færdiglavet et, feks WordPress eller joomla, de kan begge nemt installeret på den host du anvender, med bare 1-Click installation
https://www.unoeuro.com/products-webhotel.php
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