Buiten de while waarde gebruiken uit select
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
include 'functions.php';
$result = mysql_query("SELECT naam from tabel");
while ($row = mysql_fetch_assoc($result))
{
}
test();
$result = mysql_query("SELECT naam from tabel");
while ($row = mysql_fetch_assoc($result))
{
}
test();
function.php
als ik het zo toe pas, krijg ik geen resultaat en geen foutmelding. iemand die me op weg kan helpen?
Graag in het vervolg bij code, [code] [/code] tags gebruiken.[/modedit]
Gewijzigd op 31/08/2012 13:39:58 door Bas IJzelendoorn
function.php:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function selectname(ID) {
$result = mysql_query("SELECT naam from tabel where ID = ".$ID."");
$select = mysql_fetch_object($result);
return $select->naam;
}
?>
function selectname(ID) {
$result = mysql_query("SELECT naam from tabel where ID = ".$ID."");
$select = mysql_fetch_object($result);
return $select->naam;
}
?>
veele male mooier? en je moet natuurlijk wel de row selecteren!!
(heb in voorbeeld ID gekozen weet natuurlijk niet hoe het bij jouw er uit ziet ;))
Gewijzigd op 31/08/2012 13:05:30 door ScrapZz nl
Waarom wil je het niet gebruiken in de While?
Enige wat je er nog wel zelf bij moet maken is WELKE rij je op deze manier uitleest. Doe je het nu precies zo, dan heb je altijd alleen de laatste waarde. Elke while loop overschrijft weer de vorig namelijk. Je moet dus op de een of andere manier met een if bepalen of je de waarde in $naam plaatst of niet.
@Chi, waarom zou je het niet willen? Dagelijkse gang van zaken lijkt mij. Of wil je zeggen dat jij altijd alle data direct in zo'n while loop al echoed?
@Chi: "seperation of concerns"
ik wil de variabelen kunnen gebruiken in mijn functie. en als ik mijn functie buiten de while zet, lijkt dat niet te werken.
ik heb het nu zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?PHP
$result = mysql_query ( "SELECT COALESCE( klant.klant_bedrijf, klant.klant_achternaam ) AS naam, product.prod_omschrijving AS omschrijving, klant.klant_van AS van, product.prod_eind_datum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
");
include 'functions.php';
$uit = mysql_num_rows($result);
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
}
test();
?>
$result = mysql_query ( "SELECT COALESCE( klant.klant_bedrijf, klant.klant_achternaam ) AS naam, product.prod_omschrijving AS omschrijving, klant.klant_van AS van, product.prod_eind_datum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id
");
include 'functions.php';
$uit = mysql_num_rows($result);
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
}
test();
?>
En dan de functions.php:
Ik zou nu verwachten dat hij de naam echo-d, maar dat doet hij niet
Wouter W op 31/08/2012 12:56:45:
... als ik het zo toe pas, krijg ik geen resultaat en geen foutmelding...
Als je geen foutmelding krijgt, is het omdat je foutmeldingen niet aan staan. Anders zou je een notice krijgen.
Dit doe je zo:
De fout die je krijgt, is omwille van scope. Variabelen binnen een functie zijn onzichtbaar buiten die functie; en vice versa.
Daarom ook dat je aan een functie parameters geeft. Dan geef je de waarde van een variabele door aan de functie.
bv.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
error_reporting(E_ALL);
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
}
test($naam); // hier zal je enkel het laatste record zien
// function.php
function test($item) {
echo $item;
}
?>
error_reporting(E_ALL);
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
}
test($naam); // hier zal je enkel het laatste record zien
// function.php
function test($item) {
echo $item;
}
?>
Een alternatief is "global", hoewel het gebruik van gloabal meestal niet aan te raden valt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
error_reporting(E_ALL);
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
}
test();
// function.php
function test() {
global $naam; // hiermee wordt de variabele, die buiten de functie is gedeclareerd, zichtbaar binnen de functie
echo $naam;
}
?>
error_reporting(E_ALL);
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
}
test();
// function.php
function test() {
global $naam; // hiermee wordt de variabele, die buiten de functie is gedeclareerd, zichtbaar binnen de functie
echo $naam;
}
?>
Dit alles is dus meer een antwoord op je scope-probleem, niet speciaal een reactie op hoe je best records fetch't
Gewijzigd op 31/08/2012 14:11:32 door Kris Peeters
Je draait wat in de functie moet en wat erbuiten om. Gebruik het voorbeeld van ScrapZz!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
while ($row = mysql_fetch_assoc($result))
{
$naam = $row['naam'];
}
doeiets( $naam );
function doeiets( $var ){
echo $var
}
?>
while ($row = mysql_fetch_assoc($result))
{
$naam = $row['naam'];
}
doeiets( $naam );
function doeiets( $var ){
echo $var
}
?>
Toevoeging op 31/08/2012 14:06:10:
Sorry Kris, ik zie dat je de nette manier er ook gewoon boven hebt staan, even overheen gekeken.
- mijn query verwerk ik dus in mijn functie
- doordat ik er een object van maak, is mijn variabele ook buiten de functie beschikbaar
- ik zou dus bij het aanroepe van mijn functie ook meerdere variabelen kunnen 'doorgeven' (test($naam, $variabele2, $variabele3)) waardoor de functie de waardes wel krijgt?
Wouter W op 31/08/2012 14:08:02:
...
- ik zou dus bij het aanroepe van mijn functie ook meerdere variabelen kunnen 'doorgeven' (test($naam, $variabele2, $variabele3)) waardoor de functie de waardes wel krijgt?
- ik zou dus bij het aanroepe van mijn functie ook meerdere variabelen kunnen 'doorgeven' (test($naam, $variabele2, $variabele3)) waardoor de functie de waardes wel krijgt?
Ja; precies.
Wouter W op 31/08/2012 14:08:02:
- doordat ik er een object van maak, is mijn variabele ook buiten de functie beschikbaar
Nee; dit dan weer niet. Het verhaal van de scope blijft hier ook gelden.
Je maakt er trouwens geen object van, maar een array.
Gewijzigd op 31/08/2012 14:15:54 door Kris Peeters
enorm bedankt allemaal!
nb. ik ben me bewust dat het nog lang niet mooi PHP-en is, maar ik ben hier al heel erg tevreden mee :)