verbinding maken met database lijkt niet goed te gaan

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Karel

karel

08/12/2006 12:29:00
Quote Anchor link
Bij het uitvoeren van onderstaande code krijg ik de foutmelding die hier ook onder staat. Het lijkt me dat het iets met de verbinding met database heeft te maken maar dat weet ik niet zeker. kan iemand me hierbij helpen?

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\gelinkte tabellen\test.php on line 39


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//-------------------------------------------------
//Database openen en gegevens naar scherm schrijven


$host="localhost";
$username="root";
$dbnaam="test";
$fout= "FOUT: openen database mislukt";
$query = "SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM ";
$query .= "tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3";
$query .= "WHERE t2.functie_id = t1.functie_id AND t3.land_id = t1.land_id";
//--- einde initalisatie

$db=mysql_connect($host, $username) or die($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>


<html>
<head>
<title>overzicht</title>
</head>

<body>
<h2 align="center">Overzicht<br>
</h2>
<p align="center">&nbsp;</p>
<table width="50%" border="1" bordercolor="#000000" align="center">
<tr>
<th><div align="center"><strong>Naam</strong></div></th>
<th><div align="center"><strong>Adres</strong></div></th>
<th><div align="center"><strong>Woonplaats</strong></div></th>
<th><div align="center"><strong>Functie</strong></div></th>
<th><div align="center"><strong>Land</strong></div></th>
</tr>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

while (list($id, $naam, $adres, $woonplaats, $functie, $land) = mysql_fetch_row($result)){
    echo("<tr><td>$tnaam</td>
              <td>$adres</td>
              <td>$twoonplaats</td>
              <td>$functie</td>
              <td>$land</td>
        </tr>\n"
);
}

?>

</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door Karel
 
PHP hulp

PHP hulp

19/11/2024 07:27:11
 
Rens nvt

Rens nvt

08/12/2006 12:48:00
Quote Anchor link
Karel,

Je vergeet een wachtwoord op te geven... Vervang PASSWORD in onderstaande script door het wachtwoord van de database, en het zou moeten werken

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//-------------------------------------------------
//Database openen en gegevens naar scherm schrijven


$host="localhost";
$username="root";
$dbnaam="test";
$password="PASSWORD";
$fout= "FOUT: openen database mislukt";
$query = "SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM ";
$query .= "tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3";
$query .= "WHERE t2.functie_id = t1.functie_id AND t3.land_id = t1.land_id";
//--- einde initalisatie

$db=mysql_connect($host, $username, $password) or die($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
 
Karel

karel

08/12/2006 13:01:00
Quote Anchor link
Werkt niet, dan krijg ik het volgende:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in C:\Program Files\xampp\htdocs\gelinkte tabellen\test.php on line 16
FOUT: openen database mislukt

Maar dat zou sowieso niet hoeven want heb meer scripts op deze manier verbinding laten maken met database (zonder $password), kan misschien iets te maken hebben met selecteren uit verschillende tabellen o.i.d. want is nu eerste keer dat ik dat probeer maar kan hier geen fout in ontdekken??
Gewijzigd op 01/01/1970 01:00:00 door karel
 
Frank -

Frank -

08/12/2006 13:08:00
Quote Anchor link
Nee, je komt helemaal niet toe aan het selecteren, de functie mysql_connect() loopt al in het honderd. De username of het wachtwoord zal dan toch echt fout zijn.

Controleer overigens ook of $result TRUE of FALSE is en gebruik mysql_error() om de exacte fout te achterhalen bij een FALSE.
 
Karel

karel

08/12/2006 13:16:00
Quote Anchor link
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\gelinkte tabellen\test.php on line 41

kan bovenstaande foutmelding dan niet een ander probleem zjin dan verbinden met m'n database?
Gewijzigd op 01/01/1970 01:00:00 door karel
 
Karel

karel

08/12/2006 13:44:00
Quote Anchor link
$query = "SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM ";
$query .= "tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3";
$query .= "WHERE t2.functie_id = t1.functie_id AND t3.land_id = t1.land_id";

als ik hiervan een sql statement maak en hem uitvoer in het sql testvenster binnen php admin dan doet hij gewoon wat ik wil en zo werkt hij niet, wel als ik deze code verander om iets te selecteren uit 1 tabel. dus ik denk zelf eigenlijk dat er in iets fout gaat met de while lus?
Gewijzigd op 01/01/1970 01:00:00 door karel
 
Frank -

Frank -

08/12/2006 13:46:00
Quote Anchor link
Jij doet de aanname dat de query altijd zal lukken, terwijl je de garantie hebt dat deze altijd kan mislukken. Ik bespeur hier een probleempje...

Kortom, controleer of $result TRUE of FALSE is (query is gelukt of mislukt) en op basis van dit resultaat ga je iets met $result doen of toon je de foutmelding die je met mysql_error() ophaalt.

Edit: echo $query eens, dan zul je de fout zelf ook wel zien
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Karel

karel

08/12/2006 14:02:00
Quote Anchor link
als ik $query echo dan wordt er niets getoond
 
Frank -

Frank -

08/12/2006 14:05:00
Quote Anchor link
karel schreef op 08.12.2006 14:02:
als ik $query echo dan wordt er niets getoond
Dat is dan duidelijk, er is helemaal geen query! Er valt dan ook geen query uit voeren...

Maar hoe ziet jouw code er dan uit?

En begin je de code wel met de volgende regels:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// rest van je script
?>
 
Karel

karel

08/12/2006 14:11:00
Quote Anchor link
sorry dat was stom, dit doet hij dan bij het echoën

SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3WHERE t2.functie_id = t1.functie_id AND t3.land_id = t2.land_id

en nee die code staat er niet boven, ik moet ook zeggen dat ik niet zo veel van php weet, zal ik er eens boven plaatsen
Gewijzigd op 01/01/1970 01:00:00 door karel
 
Frank -

Frank -

08/12/2006 14:14:00
Quote Anchor link
Quote:
SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3WHERE t2.functie_id = t1.functie_id AND t3.land_id = t1.land_id
Dit is dus een waardeloze manier van queries schrijven, je ziet de fout namelijk niet eens.

De volgende methode is minstens 100x beter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
  t1.id,
  t1.naam,
  t1.adres,
  t1.woonplaats,
  t2.functie,
  t3.land
FROM
  tbl_persoon AS t1,
  tbl_functie AS t2,
  tbl_land AS t3
WHERE
  t2.functie_id = t1.functie_id
AND
  t3.land_id = t1.land_id
Kijk maar eens goed naar t3WHERE....
 
Karel

karel

08/12/2006 14:30:00
Quote Anchor link
ja nu zie ik het inderdaad, maar is dat niet hetzelfde als bij t3.land dan en hoe los ik dit op? zelf zou ik denken om daar ook allebei een komma achter te zetten, maar dan krijg ik alsnog dezelfde fout. bedankt voor deze tip, was eigenlijk wel logisch
 
Frank -

Frank -

08/12/2006 14:39:00
Quote Anchor link
t3WHERE is 1 woord, dat wordt dus de alias van tbl_land =>
tbl_land AS t3WHERE

vervolgens ga je verder met t2.functie_id = t1.functie_id wat natuurlijk in het honderd loopt. Tevens verwijs je naar t3.land waarbij de tabel (of de alias) t3 niet bestaat. Daar heb je net t3WHERE van gemaakt.

Je moet er gewoon voor zorgen dat je jouw queries beter gaat noteren, en niet in meerdere stukken gaat opknippen. Daarmee wordt het onoverzichtelijk en vraag je dus om problemen.

Fout (dus nooit meer doen):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
$query
= "SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM ";
$query .= "tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3";
$query .= "WHERE t2.functie_id = t1.functie_id AND t3.land_id = t1.land_id";
?>

Goed:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$query
= "
SELECT
  t1.id,
  t1.naam,
  t1.adres,
  t1.woonplaats,
  t2.functie,
  t3.land
FROM
  tbl_persoon AS t1,
  tbl_functie AS t2,
  tbl_land AS t3
WHERE
  t2.functie_id = t1.functie_id
AND
  t3.land_id = t1.land_id
"
;
?>
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Karel

karel

08/12/2006 14:47:00
Quote Anchor link
wat bedoel je precies? waarom kan t2.functie_id = t1.functie_id niet en
t3.land_id = t1.land_id wel?? functie_id komt in 2 tabellen voor en deze velden zijn aan elkaar gelinkt. voor land_id geldt hetzelfde.

is een komma achter t3 voldoende dan?
 
Frank -

Frank -

08/12/2006 14:55:00
Quote Anchor link
Ok, ik zal jouw oorspronkelijke query dan eens duidelijk uitschrijven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
  t1.id,
  t1.naam,
  t1.adres,
  t1.woonplaats,
  t2.functie,
  t3.land
FROM
  tbl_persoon AS t1,
  tbl_functie AS t2,
  tbl_land AS t3WHERE
t2.functie_id = t1.functie_id
AND
t3.land_id = t1.land_id

Waar is nu de tabel of de alias t3 gebleven? En waar is de WHERE gebleven? Alle verwijzingen naar de tabel t3 zijn fout en de vergelijking is ook fout omdat er geen WHERE meer is.

'Ja maar, er staat toch t3WHERE in de query?', zul je dan roepen. Maar 't3WHERE' is toch totaal wat anders dan 't3[spatie]WHERE'? Of niet dan? Dat is dus het verschil tussen een foute en een goede query.

Het grootste probleem is nog jouw notatie, ik kan het niet vaak genoeg zeggen, je ziet de fout niet eens omdat je de query niet ziet zoals die naar de database wordt gestuurd. Daarom dus nooit meer opknippen in meerdere variabelen!
 
Karel

karel

08/12/2006 14:58:00
Quote Anchor link
ik begrijp wel wat je zegt, maar met deze query krijg ik nog steeds dezelfde foutmelding

$query = "
SELECT
t1.person_id,
t1.naam,
t1.adres,
t1.woonplaats,
t2.functie,
t3.land,
FROM
tbl_persoon AS t1,
tbl_functie AS t2,
tbl_land AS t3,
WHERE
t1.functie_id = t2.functie_id
AND
t1.land_id = t3.land_id
";

en zo is het toch apart lijkt me?
 
Karel

karel

08/12/2006 15:00:00
Quote Anchor link
ah sorry, stom idd nu werkt het beter.
Bedankt voor de hulp en de moeite!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.