probleem met ophalen gegevens uit database

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi allemaal,

eff voorstellen. Ik ben Karel, 20 jaar en ben nogal noob op gebied van programmeren enzo. Ik heb een probleem met gegevens uit mn database halen. Hieronder een beschrijving van het probleem (sorry voor het lange verhaal )

Ik ben momenteel bezig met het maken van een website waar de gebruiker kan zoeken naar een auto met een bepaald merk, kleur en bouwjaar. Ik heb in phpmyadmin de volgende database gemaakt:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE `catalog_tabel` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `MERK` varchar(20) NOT NULL,
  `KLEUR` varchar(20) NOT NULL,
  `BOUWJAAR` int(4) NOT NULL,
  PRIMARY KEY (`ID`)
);
CREATE TABLE `beschrijving` (
  `ID` int(11) NOT NULL,
  `BESCHRIJVING` text NOT NULL,
  `Catalog_ID` text NOT NULL,
);
CREATE TABLE `foto` (
  `ID` int(11) NOT NULL,
  `FOTO` text NOT NULL,
  `Catalog_ID` text NOT NULL,
);


Ik heb de volgende code :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
    error_reporting ( E_ALL );
    ini_set ( 'display_errors', 1 );
?>

<?php
    $merken = array("audi","bmw","opel");
    $kleuren = array("blauw","groen","rood",);
    //mysql_connect("localhost" , "********" , "*******"); 
    //mysql_select_db("CATALOG");
    if($_SERVER['REQUEST_METHOD'] == 'POST' ) {
        $where = array();
        if (isset($_POST["merk"]) && in_array($_POST["merk"],$merken)) {
            $where[] = "MERK='".$_POST["merk"]."'";
        }
        if (isset($_POST["kleur"]) && in_array($_POST["kleur"],$kleuren)) {
            $where[] = "KLEUR='".$_POST["kleur"]."'";
        }
        if (isset($_POST["bouwjaar"]) && preg_match("/^(19|20)\d\d$/i", $_POST["bouwjaar"])) {
            $where[] = "BOUWJAAR='".$_POST["bouwjaar"]."'";
        }
        if (count($where)==0) {
            echo "Geen zoektermen bekend. Opdracht geannuleerd.";
        } else {
            $query = "select ID, MERK, KLEUR, BOUWJAAR from catalog_tabel WHERE ".implode(" AND ",$where);
            if ($result = mysql_query($query)) {
                if (mysql_num_rows($result)<>0) {
                    while ( $row = mysql_fetch_assoc ( $result ) ) {
                        echo $row["MERK"]." - ".$row["KLEUR"]." - ".$row["BOUWJAAR"]."<br />";
                        $beschrijvingquery = "select BESCHRIJVING from beschrijving where Catalog_ID=".$row["ID"];
                        if ($beschrijvingresult = mysql_query($beschrijvingquery)) {
                            if (mysql_num_rows($beschrijvingresult)<>0) {
                                while ( $beschrijvingrow = mysql_fetch_assoc ( $beschrijvingresult ) ) {
                                    echo $beschrijvingrow["BESCHRIJVING"]."<br />";
                                }
                            } else {
                                echo "geen beschrijving<br />";
                            }
                        }
                        $fotoquery = "select FOTO from foto where Catalog_ID=".$row["ID"];
                        if ($fotoresult = mysql_query($fotoquery)) {
                            if (mysql_num_rows($fotoresult)<>0) {
                                while ( $fotorow = mysql_fetch_assoc ( $fotoresult ) ) {
                                    echo "<img src='".$fotorow["FOTO"]."' alt='".$row["MERK"]." - ".$row["KLEUR"]." - ".$row["BOUWJAAR"]."' /><br />";
                                }
                            } else {
                                echo "<img src='geenfoto.jpg' alt='geen foto' /><br />";
                            }
                        }
                    }
                } else {
                    echo "Geen auto's gevonden die voldoen aan uw zoekopdracht.";
                }
            }
        }
    }
 
?>
<hr />
<form method="post" action="results.php">
    <select name="merk">
        <option selected="selected">Merk</option>
        <option><?php echo implode("</option><option>",$merken); ?></option>
    </select>
    <select name="kleur">
        <option selected="selected">Kleur</option>
        <option><?php echo implode("</option><option>",$kleuren); ?></option>
    </select>
    <select name="bouwjaar">
        <option selected="selected">Bouwjaar</option>
        <option>1990</option>
        <option>1991</option>
        <option>1992</option>
    </select>
    <input type="submit" value="zoeken" />
</form> 



Mijn probleem -->
Als ik de website open op mn server dan krijg ik de scrolldown menuutjes (Merk, Kleur, Bouwjaar) te zien. Ik kan een selectie maken. Maar als ik nu op "zoeken" klik krijg ik een lege results.php pagina???? Ook als ik niks selecteer en op "zoeken" klik krijg ik niet de melding "Geen zoektermen bekend. Opdracht geannuleerd." maar krijg ik hetzelfde lege scherm. Ik begrijp niet wat ik fout doe of waar de fout ik kan zitten.

Heeft iemand een idee??

Alvast THANKS!!!!

[ Voor 0% gewijzigd door een moderator op 12-10-2009 13:09 . Reden: Code-tags toegevoegd. ]


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:39

Haan

dotnetter

Doe eens debuggen en kijk waar het fout gaat.

[ Voor 77% gewijzigd door Haan op 12-10-2009 13:11 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • dhr. banuyn
  • Registratie: September 2003
  • Laatst online: 28-04-2021

dhr. banuyn

Dat gaan we doen...

staat in de php in regel 9 en 10 je database connectie ook echt op commentaar?

Advies of actie nodig in de boomverzorging? Pruning boomverzorging


Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 11:01

SinergyX

____(>^^(>0o)>____

dhr. banuyn schreef op maandag 12 oktober 2009 @ 13:20:
staat in de php in regel 9 en 10 je database connectie ook echt op commentaar?
Met ^^, dat geval vrij logisch dat je geen resultaten krijgt :)

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb mn connectie code aangepast aan
<?php
$user = "******";
$passw = "*******";
$db_name = "catalog";
mysql_connect("127.0.0.1", $user, $passw);
mysql_select_db($db_name);
?>

<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
?>
De connectie met de database lijkt er wel te zijn maar er komen geen gegevens terug???

[ Voor 73% gewijzigd door Verwijderd op 12-10-2009 14:26 ]


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Wat doen die twee // op regel 9 en 10? Dat willen ze weten.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb de code aangepast zoals boven. Dus de 2 // zijn weg.
Maar ik krijg nog steeds geen resultaat.

Kan het een instelling in de config.inc.php file zijn of aan andere instelling bij het instellen van phpmyadmin of apache of PHP5 of MYSQL?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zoals gezegd: ga eens debuggen
Debuggen: Hoe doe ik dat?

Ga na of je een connectie krijgt, of het openen van de DB lukt, kijk wat een simpele select * from sometable geeft en ga zo stap voor stap na waar 't eventueel mis gaat. Roepen "ik krijg niks" is nogal zinloos; voor 'tzelfde geld krijg je wel degelijk resultaten maar wordt er (bijv.) niets ge-echo-ed om welke reden dan ook. Alleen met debuggen los je dit soort problemen op.

[ Voor 58% gewijzigd door RobIII op 12-10-2009 14:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Vind het geen zinloze topic want voor het zelfde geval heb ik een fout gemaakt in de code en ziet iemand met meer ervaring dat meteen. Dit scheelt een hoop tijd en vooral een hoop ergernis wat ten koste gaat van het plezier in het programmeren.

Hoop dat iemand nog een mogelijke oorzaak voor het niet werken van mijn code weet. Kga alvast aan de slag met Debuggen: hoe doe ik dat.

Thanks alvast zo ver allemaal!!!

Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
Ik denk dat je even moet kijken of de data meegezonden wordt. probeer eens met het versturen van het formulier method: get i.p.v. post. Zo kun je zien of het daar fout gaat en plak achter zoveel mogelijk mysql_query's de "or die..."

bijv.
code:
1
mysq_query("SELECT * FROM `table` WHERE `kolom` = '$_POST[naam]'") or die(mysql_error());


Edit: Kijk ook even of alle veldnamen overeenkomen met de check bovenin je code: if(isset$_POST[naam]){

succes B)

[ Voor 14% gewijzigd door JefSnare op 12-10-2009 14:44 ]

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 09-08 18:34
Maak eens van deze regeL:
PHP:
1
if ($result = mysql_query($query)) {

Dit:
PHP:
1
if ($result = mysql_query($query) or print(mysql_error()) {

En kijk eens of en zo ja wat je dan in beeld krijgt.

@ hier boven:
Ik verkies altijd print() boven die() zodat de rest van de code wel doorloopt en je best vaak wat makkelijker kunt debuggen. Uiteraard kies je in ene productie-omgeving natuurlijk liever een die() of een andere vorm van foutafhandeling waarbij de rest van de code niet door loopt.

[ Voor 40% gewijzigd door Joen op 12-10-2009 14:46 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 12 oktober 2009 @ 14:36:
Vind het geen zinloze topic want voor het zelfde geval heb ik een fout gemaakt in de code en ziet iemand met meer ervaring dat meteen.
Dat zal best, maar hier op GoT verwachten we wél eigen inzet en initiatief en dus ook dat je er alles in je macht aan hebt gedaan om een probleem te troubleshooten voordat je een topic opent (en dus ook dat je vermeldt wat je wel/niet hebt geprobeerd in je topicstart (zie daarvoor onze Quickstart)).
Verwijderd schreef op maandag 12 oktober 2009 @ 14:36:
Dit scheelt een hoop tijd en vooral een hoop ergernis wat ten koste gaat van het plezier in het programmeren.
Again: dat zal best, maar we zitten hier niet om voor jan-en-alleman de afhaalchinees voor al uw kant-en-klare oplossingen te spelen ;) Het is hier niet de bedoeling dat we je handje vasthouden tijdens het programmeren ;)

Tot slot: zorg sowieso dat je error reporting aan staat(!!!) en dat je op alle plaatsen waar mogelijk fouten op kunnen treden deze fouten dan ook getoond danwel gevangen worden.

[ Voor 7% gewijzigd door RobIII op 12-10-2009 14:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
@ hier boven:
Ik verkies altijd print() boven die() zodat de rest van de code wel doorloopt en je best vaak wat makkelijker kunt debuggen. Uiteraard kies je in ene productie-omgeving natuurlijk liever een die() of een andere vorm van foutafhandeling waarbij de rest van de code niet door loopt.
Offtopic: Idd, maar werk liever met or die, lekker overtuigend dat je script faalt 8)7

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • Archiebald
  • Registratie: Juni 2006
  • Laatst online: 13:19
code:
1
<form method="post" action="results.php">


Heet je pagina wel results.php ?

edit: of haal anders een action="results.php" weg.
Misschien dat hij dan werkt

[ Voor 30% gewijzigd door Archiebald op 12-10-2009 14:55 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Joen schreef op maandag 12 oktober 2009 @ 14:44:
@ hier boven:
Ik verkies altijd print() boven die() zodat de rest van de code wel doorloopt en je best vaak wat makkelijker kunt debuggen. Uiteraard kies je in ene productie-omgeving natuurlijk liever een die() of een andere vorm van foutafhandeling waarbij de rest van de code niet door loopt.
In productieomgeving voer je nooit die() uit natuurlijk na een fout, daar toon je een nette foutpagina en daar log je de error voor jezelf.

Kleine tip aan de TS los van het probleem: als je script werkt is het een mooie uitbreiding als je je inleest op joins. Je voert potentieel erg veel queries uit nu namelijk terwijl t niet perse nodig is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Archiebald, ik heb de "action" weggehaald en nu doet hij het wel!!!!! Super bedankt.

Enige vraag rest mij nu nog, waarom results.php niet wordt gevonden.
Weet jij dat misschien ook?

Thanks!!!

Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 17-09 20:37

BM

Moderator Spielerij
Simpele gok: omdat jij die niet aangemaakt hebt?

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
We zullen eens in onze glazen bol kijken.

Hmm, daar staat te lezen: 'debugging is the way to glory'.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
De pagina waarin het script staat wat uitgevoerd moet worden is de pagina waar de action moet heen linken. Bijvoorbeeld je heb je toevoeg functie in toe.php staan dan moet je action="toe.php". :+

Twitter Flickr


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op maandag 12 oktober 2009 @ 16:36:
Archiebald, ik heb de "action" weggehaald en nu doet hij het wel!!!!! Super bedankt.

Enige vraag rest mij nu nog, waarom results.php niet wordt gevonden.
Koop een goed boek over HTML en daarna een goed boek over PHP, echt waar.
Pagina: 1