Avatar billede Dennis3D Nybegynder
24. august 2010 - 00:38 Der er 15 kommentarer og
2 løsninger

Hente data som passer på " id"

Hej Allesammen.

Jeg forsøger at lærer PHP, i forvejen har jeg en del erfaring med ASP. Og det hjælper en del.

Jeg har dog et problem. Jeg har lavet en oversigts side, som linker videre, hvor jeg har showanno.php?id=2 sidst i adressen, tallet 2 er bare et eksempel.

Herefter har jeg følgende kode i showanno:

                                <?php
                                // Make a MySQL Connection
                                mysql_connect("XXX", "XXX", "XXX") or die(mysql_error());
                                mysql_select_db("XXX") or die(mysql_error());
                               
                                // Get a specific result from the "anno" table
                                $result = mysql_query("SELECT * FROM anno
                                WHERE id='$_GET[id]'") or die(mysql_error()); 

                                // get the first (and hopefully only) entry from the result
                                $row = mysql_fetch_array( $result );
                                ?>
                                <td height="6" width="373"><h1><?
                                echo "Title -";
                                echo $row['title'];
                                ?></h1>

Men den gider ikke skrive title ud fra databasen? Og den skriver ingen fejl på selve siden?

jeg har fulgt denne tutorial:

http://www.tizag.com/mysqlTutorial/mysqlwhere.php
Avatar billede showsource Seniormester
24. august 2010 - 01:42 #1
Prøv med <?php hvor du bruger echo
Avatar billede showsource Seniormester
24. august 2010 - 01:45 #2
D.v.s "short_tags" er Off i php.ini, hvilket også er bedst!

Og jeg ville nok bruge

<?php
if(isset($_GET["id"]) && is_numeric($_GET["id"])) {

// indhold af side

// samt

    if(mysql_num_rows($result) == 1) {

    // vis indhold fra anno

    }else{

    echo"Fejl";

    }

}
?>
Avatar billede jakobdo Ekspert
24. august 2010 - 08:53 #3
Og når du skriver:

// Get a specific result from the "anno" table
$result = mysql_query("SELECT * FROM anno WHERE id='$_GET[id]'") or die(mysql_error());

// get the first (and hopefully only) entry from the result
Så smid en:

LIMIT 1 på din sql:

$result = mysql_query("SELECT * FROM anno WHERE id='".intval($_GET[id])."' LIMIT 1") or die(mysql_error());

Og en intval() for ekstra sikkerhed.
Avatar billede Dennis3D Nybegynder
24. august 2010 - 11:38 #4
Tak for jeres svar.

Jeg har kombineret de ting i har skrevet ind i min kode. Jeg ved ikke om jeg har gjort det rigtigt. Den viser stadig ikke mit indhold, og den skriver heller ik nogen fejl. her er min kode:


                                // Get a specific result from the "anno" table
                                $result = mysql_query("SELECT * FROM anno WHERE id='".intval($_GET[id])."' LIMIT 1") or die(mysql_error());

                                // get the first (and hopefully only) entry from the result
                                $row = mysql_fetch_array( $result );

                                if(isset($_GET["id"]) && is_numeric($_GET["id"])) {

                                // samt

                                if(mysql_num_rows($result) == 1) {

                                // vis indhold fra anno
                                echo $row['title'];

                                }else{

                                echo"Fejl";

                                }
Avatar billede Dennis3D Nybegynder
24. august 2010 - 11:42 #5
hov der er self. et "}" mere til sidst og "?>"
Avatar billede Dennis3D Nybegynder
24. august 2010 - 12:55 #6
Okay, jeg prøvede at skrive en anden row end title, og fandt ud af den godt kunne vise date og de andre. Det viste sig så at min row hed titel, hvilket var rigtig dumt af mig. Så det virker når jeg skriver titel.

Jeg synes bare det er sjovt php ikke skriver at den ikke findes i databasen?

Anyway jeg vil gerne give jer points for jeres tid :) Tak for hjælpen.
Avatar billede jakobdo Ekspert
24. august 2010 - 13:48 #7
Svar
Avatar billede showsource Seniormester
24. august 2010 - 17:00 #8
Det med at vise fejl:
Hvis du tester på et domain "ude i byen", er det sikkert sat op at så fejlmeddelser IKKE vises.

Det burde du kunne komme udenom ved i starten af scriptet at bruge

<?php
ini_set('display_errors', 'On');
ini_set('error_reporting', E_ALL);

// resten af scriptet
Avatar billede jakobdo Ekspert
24. august 2010 - 17:11 #9
Takker for point.
Avatar billede majbom Novice
24. august 2010 - 19:05 #10
-> jakobdo - hvis id er unik er LIMIT 1 så ikke underordnet?
Avatar billede jakobdo Ekspert
24. august 2010 - 22:07 #11
splazz: Jo, men med LIMIT 1 fortæller du at SQL skal stoppe med at kigge længere efter første hit.

Nu er jeg ikke SQL ekspert, men har du 10 rækker og dit hit er nummer 1, så vil sql stadig kigge nummer 2-10 igennem, for det kunne jo være...
Men med LIMIT 1, så stopper den efter første hit, så den er altid god at bruge.

Har dog ikke lavet noget performance test på det...
Avatar billede jakobdo Ekspert
24. august 2010 - 22:27 #12
Det er faktisk sjovt...

Jeg har netop lavet noget test data.

100K rækker med følgende tekst:

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

og ID = auto_increment.

Se koden her:

Uden Limit: http://codebreaker.dk/leg/limit.php
Med Limit: http://codebreaker.dk/leg/limit.php?limit

Og faktisk er LIMIT 1 en smule langsommere, håber nogle kan bringe lidt lys over emnet.
Avatar billede showsource Seniormester
24. august 2010 - 23:03 #13
Du "leger" jo med meget mere ned blot sql i de ex. du linker til.
Hvad du skrev jo:

Jo, men med LIMIT 1 fortæller du at SQL skal stoppe med at kigge længere efter første hit.

LIMIT 1 bruges når du VED du kun skal ha' et resultat ud af en query.

Og bortset fra det, så er det jo også et spm. om at lave rigtig index på sine tabeller.
Her kan forskel nemt springe fra -1 til 45++ sek. i afvikling af query.
Avatar billede majbom Novice
24. august 2010 - 23:22 #14
-> #13 - forstår ikke helt hvad du skriver?

-> #12 - jeg mener bare at have hørt/læst et sted at når 'id' er unik, er LIMIT overflødig, da det er en selvfølge... prøver lige at lede efter noget der kan underbygge dette
Avatar billede showsource Seniormester
24. august 2010 - 23:28 #15
Klart, hvis et felt  er UNIQUE kan der kun være et match.
Men det skader næppe i sql at fortælle der kun skal hentes et row, uanset hvad .....
Avatar billede jakobdo Ekspert
25. august 2010 - 08:39 #16
showsource - #13: Hvad mener du med jeg leger med meget mere ?

Mellem tidstagningerne, har jeg jo "kun" en løkke og X antal skud mod en tabel.
Avatar billede showsource Seniormester
25. august 2010 - 20:23 #17
Du afvikler jo noget phpkode, ikke blot en query.
Det var blot jeg mente med "mere"
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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