Buiten de while waarde gebruiken uit select

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Cyber Defense Analyst

We are looking for a Senior Cyber Defense Analyst Responsibilities: Design, develop, test and support code providing detection and automation capabilities for cyber security toolsets; Creation of alert, report and search capabilities using advanced data analytic toolsets for cyber defense activities; Provide cyber defense related input to the design and participate in the implementation of cyber security capabilities for internal projects; Participate in complex investigations and threat hunting; Acquire knowledge of changing technologies and threats to provide recommendations for adaptation of technologies or policies; Design, create, organise and deliver staff training, update knowledge management databases and document procedures; Qualifications: Bachelor's

Bekijk vacature »

Wouter W

Wouter W

31/08/2012 12:56:45
Quote Anchor link
De titel zegt het al een beetje, ik wil graag weten hoe ik resultaten uit mijn select kan gebruiken, buiten de while. ik wil deze waardes kunnen aanroepen in een functie.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
include 'functions.php';
$result = mysql_query("SELECT naam from tabel");

while ($row = mysql_fetch_assoc($result))
{
}
test();


function.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function test() {
echo '$row['naam'];
}


als ik het zo toe pas, krijg ik geen resultaat en geen foutmelding. iemand die me op weg kan helpen?

Bas IJzelendoorn:
Graag in het vervolg bij code, [code] [/code] tags gebruiken.
Gewijzigd op 31/08/2012 13:39:58 door Bas IJzelendoorn
 
PHP hulp

PHP hulp

21/10/2019 03:19:35
 
ScrapZz nl

ScrapZz nl

31/08/2012 13:02:32
Quote Anchor link
Waarom niet zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
include 'functions.php';

echo selectname(1);

?>


function.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>


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
 
John Cena

John Cena

31/08/2012 13:14:01
Quote Anchor link
Waarom wil je het niet gebruiken in de While?
 
Erwin H

Erwin H

31/08/2012 13:21:58
Quote Anchor link
@Wouter, gewoon overzetten in een variabele die niet gevuld wordt door je fetch:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
while ($row = mysql_fetch_assoc($result))
{

  $naam = $row['naam'];
}

?>

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?
 
John Berg

John Berg

31/08/2012 13:22:00
Quote Anchor link
@Chi: "seperation of concerns"
 
Wouter W

Wouter W

31/08/2012 13:29:01
Quote Anchor link
zo, dat zijn snelle antwoorden, bedankt!

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)
PHP script in nieuw venster Selecteer het PHP script
1
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();
?>


En dan de functions.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?PHP
function test() {

    echo $naam;
    
}

?>


Ik zou nu verwachten dat hij de naam echo-d, maar dat doet hij niet
 
Kris Peeters

Kris Peeters

31/08/2012 13:44:47
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
  error_reporting(E_ALL);
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>


Een alternatief is "global", hoewel het gebruik van gloabal meestal niet aan te raden valt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>


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
 
John Berg

John Berg

31/08/2012 13:48:35
Quote Anchor link
@Wouter: je zet de ezel voor de wagen :)

Je draait wat in de functie moet en wat erbuiten om. Gebruik het voorbeeld van ScrapZz!
 
Erwin H

Erwin H

31/08/2012 14:05:18
Quote Anchor link
Geen globals gebruiken! Gewoon een waarde meegeven aan de functie.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}

?>



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.
 
Wouter W

Wouter W

31/08/2012 14:08:02
Quote Anchor link
even kijken of ik het een beetje snap.

- 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?
 
Kris Peeters

Kris Peeters

31/08/2012 14:10:12
Quote Anchor link
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?


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
 
Wouter W

Wouter W

31/08/2012 16:01:24
Quote Anchor link
dit werkt zoals ik het wil. aangezien ik het versturen van een email als functie heb gedefinieerd en ik in de email een aantal velden van mijn select wil vermelden, sterker nog, het To adres komt uit mijn database, kan ik dat nu prima oplossen met het doorgeven van de variabelen aan mijn functie.

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 :)
 



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.