Kør MySQL søgning med data fra php formular

Tags:    php mysql

Hej alle !

Jeg har et spørgsmål der går på kørsel af en MySQL forespørgsel op mod en database, med data fra en php/HTML formular.

Jeg har rodet lidt med php og MySQL, og vil gerne koble php/HTML formulardata sammen med login i en database og kørsel af en MySQL søgning, eller forespørgsel, med data fra formularen.

Jeg kan med php script, logge ind på en MySQL database, og hente data fra tabeller, eller lægge data ind i tabeller, og køre en MySQL søgning ud fra forudindtastede data, f.eks select * from xtabel.

Jeg kan hente data input i en formular i HTML eller i php, form action=x.php, og gemme data i en MySQL database tabel.

Kan man koble disse to ting sammen i et php script, så man skriver data ind i en formular, form action=x.php, logger ind i en database og kører en MySQL søgning, query, med f.eks en select from where klausul, med det indtastede fra formularen, og får resultatet retur ?

Jeg håber nogen kan svare om det overhovedet kan lade sig gøre, og ikke mindst hvordan.

Tak.





9 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 12 karma
Sorter efter stemmer Sorter efter dato
normalt laver man en login, hvis brugeren bliver logget ind, sætter man en session, som man så tester på, på de sider der kræver brugeren er logget ind.


skal det forståes sådan at din html ser sådan ud:
Fold kodeboks ind/udKode 

så ja det kan man godt

og x.php ser ca sådan ud:
(utested)
Fold kodeboks ind/udKode 


functionerne valid_user(), og $search_result skal du så bare lave.

hvilke database API anvender du ?? ( mysql (forældet), mysqli, PDO )
hvis du anvender det forældet api, skal du være opmærksom på det er fjernet i PHP7 der blev frigivet 2015-12-04, og mange udbydere allerede tilbyder dette.





Du spørger til hvilken database API jeg bruger.

for at PHP kan kommunikerer med en database skal den igennem et API ( Application Programming Interface ), hvilke er en del functioner der er indlæst sammen med PHP i form af et libery.
hvordan connecter du til din database fra PHP ??

// mysqli (mest brugt)
$conn = new mysqli("example.com", "user", "password", "database");
eller
ref http://php.net/manual/en/mysqli.select-db.php
$conn = mysqli_connect("example.com", "user", "password");
mysqli_select_db($conn, "database");


// PDO (min foretrukne)
$conn = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');


// mysql (udgået fra og med php7)
$conn = mysql_connect("example.com", "user", "password");
mysql_select_db("database");


// odbc (bruges ikke ret meget)
ref http://php.net/manual/en/function.odbc-connect.php
$conn=odbc_connect($connect_string,'','');
eller
$conn = odbc_connect($dsn, "", "");



Tanken er ikke at en bruger skal logge ind og søge, men at man skal kunne logge ind, på en lokal server, "localhost/..", og hente et resultat ud og præsentere det i browseren.

ok det er ikke brugeren der skal indtaste brugernavn/password !!

så ser din html sådan ud: (utested)
Fold kodeboks ind/udKode 


og din x.php (utested)
Fold kodeboks ind/udKode 



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



Indlæg senest redigeret d. 14.07.2016 06:54 af Bruger #16075

PS Jeg har tilføjet et svar og noget kode til mit forrige indlæg. Beklager rodet !

din form eller php skal laves lidt om for at passe sammen. !!
din php code forvendter at få søge data over som POST men du sender dem over som GET :(
din php code forvendter dit indput felt hedder search, men du har kaldt det navn
pas på med at blande store og små bogstaver i din sql, og vær konsekvent med din brug af store og små bogstaver


denne linje $search = $_POST['search']; i din php den skal passe med
<form action="check.php" method="get">
Albumtitel:
<input type="text" name="navn">
<input type="submit" value="Søg" />
</form>


så hvis din nuværende form skal virke (som vist ovenfor) så skal
$search = $_POST['search'];
se sådan ud
$search = $_GET['navn'];

du burde nok også lave noget noget fejl håndtering på din connection og din sql query

denne linje
$result = $conn->query($sql);
bør se sådan ud
$result = $conn->query($sql) or die($conn->error());

her er lidt link du kan kigge på
http://www.w3schools.com/php/func_mysqli_connect_error.asp
http://www.w3schools.com/php/func_mysqli_error.asp
http://www.w3schools.com/html/html_forms.asp


Fejlmeddelelsen :

du får ikke started din php fortolker
denne linje
<php

skal se sådan ud
<?php

skrivefejl i min code


din code er åben overfor sql injection. (når din code ikke ligger ude i byen er det ikke så farligt)
du bør kigge på noget af de nye der er kommet med mysqli og forbedret i PDO, nemlig Prepare Statement
http://www.w3schools.com/php/php_mysql_prepared_statements.asp
http://php.net/manual/en/pdo.prepared-statements.php
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php



jeg ved ikke hvilken php den bruger.

http://php.net/manual/en/function.phpinfo.php


samlet ser din code sådan ud:
Fold kodeboks ind/udKode 


check.php
Fold kodeboks ind/udKode 





Indlæg senest redigeret d. 16.07.2016 10:41 af Bruger #16075

Der er et eller andet der gør at browseren viser php-scriptet, i stedet for at eksekvere det.

så er php fortolkeren ikke started,
er din webserver started ??
afvikles scriptet fra webserveren ?? (http://localhost) og IKKE file://


Har det noget med debug mode at gøre, eller er det noget andet?

nej




Hej Ronny.

Beklager det sene svar. Jeg havde klikket af i boksen "Send mig en email ved nye svar", men der kom ingen.

Først og fremmest er der tale om en database der kun skal køre lokalt, på min egen PC. Jeg bruger XAMPP med dens MySQL server og dens Apache webserver til at drive det.

Du spørger til hvilken database API jeg bruger. Det eneste svar jeg kan give er at jeg selv har opbygget en simpel MySQL database i MySQL Workbench. Det virker allerede.

Nu spørger du måske, hvorfor jeg vil bruge php, og ikke bare bruge databasen i Workbench. Det kunne jeg sådan set også bare gøre, og jeg gør det. Jeg har bare leget med tanken om at lave en mere spændende database, det vil sige visuelt spændende, der kan præsenteres i en browser.

Jeg har lavet databaser over mine CD'ere og LP'er, og har lavet script der kan søge på forskellige parametre. Det højeste mål jeg kan opnå er at lave en "webbaseret" database hvor jeg kan vælge en søgeparameter, i en drop-down menu, og derefter indtaste, i en formular, hvad jeg vil søge på.

MySQL er ikke så svært endda, men php er meget komplekst. Det der er problemet er at kunne indtaste søgekriterier, i en formular, og så få php til at logge ind i databasen, og søge på det indtastede. Tanken er ikke at en bruger skal logge ind og søge, men at man skal kunne logge ind, på en lokal server, "localhost/..", og hente et resultat ud og præsentere det i browseren.

Jeg vil gerne afprøve din kode ved lejlighed.

Jeg håber det gav mening.

MVH
Keld M Hansen

Hej igen

Jeg har afprøvet noget af din kode, rettet til mine forhold, og lægger koden og fejlmeddelesen frem her.

Min HTML kode :

Fold kodeboks ind/udHTML kode 


Min php kode :

Fold kodeboks ind/udPHP kode 


Fejlmeddelelsen :

Fold kodeboks ind/udPHP kode 


Håber det er overskueligt. Jeg vender tilbage.

MVH
Keld M Hansen





Indlæg senest redigeret d. 15.07.2016 20:40 af Bruger #21434
Hej Ronny

Tak for dit svar. Mit sidste forsøg var med mysqli, men jeg har forsøgt mig med flere slags som API, fordi jeg har søgt på Google efter svar.Det er også lidt forvirrende med de forskellige API.

Jeg beklager, men jeg ved ikke så meget om de forskellige API, og hvilke der understøttes af hvilken version php. Den XAMPP jeg bruger pt er 5.6.12, jeg ved ikke hvilken php den bruger.

Det jeg mener med at det ikke er en bruger der skal indtaste brugernavn og password, er at jeg er eneste bruger af databasen, den kører lokalt på min egen pc med MySQL server og Apache webserver under XAMPP. Jeg ønsker mig en søgning med en formular i php, hvor søgningen i databasen filtreres af det indtastede i formularen.

Jeg vil gerne prøve dine koder ved lejlighed. Jeg er ved at gå lidt i sommerferie-mode, så det varer lige lidt. Håber det er ok at der går lidt tid inden jeg får afprøvet dine koder, men jeg giver selvfølgelig en tilbagemelding.

Det er lidt svært for dig at se hvad der foregår, når du ikke kan se min kode. Jeg skal lige finde ud af at lægge kode ud på forumsiden på den rigtige måde. Jeg vil også gerne have tiden til at lære mere om især php, i stedet for bare at få alle svarene serveret.

Foreløbigt mange tak for dine svar. Jeg melder tilbage.

Hilsen Keld M Hansen

PS Jeg har tilføjet et svar og noget kode til mit forrige indlæg. Beklager rodet !







Indlæg senest redigeret d. 15.07.2016 20:41 af Bruger #21434
Hej Ronny !

Puha, det er vist en ekspert jeg har med at gøre her. ;) Nåh, du skal have mange tak for dine svar og din kode. Jeg vil arbejde videre med det, og give dig en tilbagemelding på et senere tidspunkt. Håber det er OK.

Når den "strenge" lærer påpeger fejlene, kan jeg da godt se dem. :X Jeg skal vist have ryddet op i den kode. Uoverensstemmelserne skyldes delvist at jeg har hentet viden og inspiration flere forskellige steder fra, både fra nettet og fra Kristian Langborg-Hansens udmærkede hæfte "PHP og MySQL".

Jeg har som du nok fornemmer, ikke det store styr på de forskellige versioner af PHP og API, så det kan virke lidt uoverskueligt for mig. Selvfølgelig er PHP og MySQL inde i en rivende udvikling, så der sker hele tiden ændringer.

Jeg er bekendt med faren ved SQL injection, men som skrevet tidligere er jeg eneste bruger af databasen, som kun køres lokalt på min egen pc som andre ikke har adgang til.

Jeg vil ønske dig en fortsat god sommer, og endnu en gang tak for din hjælp. Jeg har da noget at arbejde videre med.

MVH
Keld M Hansen :D

Nåh, jeg har lige en sidste ting. Jeg har lige afprøvet din endelige kode, med mit eget password indsat i check.php. Der er et eller andet der gør at browseren viser php-scriptet, i stedet for at eksekvere det. Har det noget med debug mode at gøre, eller er det noget andet?

Takker :)
Keld






Indlæg senest redigeret d. 16.07.2016 12:50 af Bruger #21434
Hej Ronny !

Jeg store kvaj ! :P Jeg faldt for fristelsen til at starte html-filen direkte, DET MÅ MAN IKKE ! Man skal ALTID starte med localhost/ , det vidste jeg jo godt. :S

Nu har jeg noget at arbejde videre med.

God sommer !
:)




du kunne overveje at slå din html og php sammen på én side.
det vil så kræve du retter din action i din form, og du tester på om der er sendt noget

tester om der er sendt noget
http://php.net/manual/en/function.isset.php

kig på $_SERVER["PHP_SELF"];
http://php.net/manual/en/reserved.variables.server.php

se på forskellen mellem de 4 functioner
http://php.net/manual/en/function.include.php
http://php.net/manual/en/function.include-once.php
http://php.net/manual/en/function.require.php
http://php.net/manual/en/function.require-once.php


Fold kodeboks ind/udKode 


connection.php
Fold kodeboks ind/udKode 


debugheader.php
Fold kodeboks ind/udKode 




t