Waarom undef. variable?
De variable $street wordt in het formulier als undefined variabele weergegeven (regel 99) , maar als ik de $street echo (regel 30) dan klopt de uitkomst wel.
Wat is de oorzaak dat ik $street wel kan echo-en bovenaan de pagina maar niet kan weergeven in het formulier? (of hoe los ik dat op?)
nb heb mn apikey ff weggelaten
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
function apicall($var_postc) {
//POSTCODE AANVULLEN MET API
// De headers worden altijd meegestuurd als array
$headers = array();
$headers[] = 'X-Api-Key: mijn apikey';
// De URL naar de API call
$api= 'https://postcode-api.apiwise.nl/v2/addresses/?postcode=' . $var_postc;
$curl = curl_init($api);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// Indien de server geen TLS ondersteunt kun je met
// onderstaande optie een onveilige verbinding forceren.
// Meestal is dit probleem te herkennen aan een lege response.
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// De ruwe JSON response
$response = curl_exec($curl);
// Gebruik json_decode() om de response naar een PHP array te converteren
$data = json_decode($response);
curl_close($curl);
//response
//var_dump($data);
$street = $data->_embedded->addresses[0]->street;
echo $street;
}
if (isset($_POST['Nr'])) {
$Nr = $_POST['Nr'];
}
if (isset($_POST['Naam'])) {
$Naam = $_POST['Naam'];
}
if (isset($_POST['Datum'])) {
$Datum = $_POST['Datum'];
}
if (isset($_POST['Geslacht'])) {
$Geslacht = $_POST['Geslacht'];
}
if (isset($_POST['Kleur'])) {
$Kleur = $_POST['Kleur'];
}
if (isset($_POST['Bijzonderheden'])) {
$Bijzonderheden = $_POST['Bijzonderheden'];
}
if (isset($_POST['Foto'])) {
$Url = $_POST['Foto'];
}
if (isset($_POST['Postcode']) and ($_POST['Postcode']==="afstand") OR ($_POST['Postcode']==="")) {
$Postcode="n.v.t.";
$street="afstand";
} else {
$Afstand = $_POST['Postcode'];
//echo "Afstand". $Afstand;
//Zet spatie op plek van +
$Postcode=substr($Afstand,0,4).' '.substr($Afstand,5,2);
//echo $Postcode;
// Haal spatie uit postcode
$var_postc=substr($Afstand,0,4).substr($Afstand,5,2);
//echo "var_postc". $var_postc;
apicall($var_postc);
}
?>
<!doctype html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Mailservice</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="mail.css" rel="stylesheet" type="text/css">
</head>
<body><br><br>
<div>
<h2>Mailservice</h2>
<form action="mail-data-nr.php" method="post">
<label for="Van">Van:</label><input type="text" name="van" id="van" value="" maxlength="10"/>
<label for="Aan">Aan:</label><input type="text" name="aan" id="aan" value="" maxlength="30" />
<label for="Onderwerp">Onderwerp:</label><input type="text" name="subject" id="subject" value="nr: <?php echo $Nr; ?>" maxlength="20" />
<label for="bijlage">bijlage:</label><input type="text" name="bijlage" id="bijlage" value="<?php echo $Foto=substr($Url,1); ?>" maxlength="50"/>
<label for="message">Bericht:</label><textarea id="message" name="message">Naam: <?php echo $Naam; ?> Nummer: <?php echo $Nr; ?> Datum: <?php echo $Datum; ?>
Geslacht: <?php echo $Geslacht; ?>
Kleur: <?php echo $Kleur; ?>
Leeftijd:
Vindplaats: <?php echo $street; ?>
Postcode: <?php echo $Postcode; ?>
Bijzonderheden: <?php echo $Bijzonderheden; ?>
Mvg,
</textarea>
<label for="Auth">Auth:</label><input type="tekst" name="Auth" id="Auth" maxlength="5" />
<input type="submit" value="post" />
</form>
</div>
</body>
</html>
function apicall($var_postc) {
//POSTCODE AANVULLEN MET API
// De headers worden altijd meegestuurd als array
$headers = array();
$headers[] = 'X-Api-Key: mijn apikey';
// De URL naar de API call
$api= 'https://postcode-api.apiwise.nl/v2/addresses/?postcode=' . $var_postc;
$curl = curl_init($api);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// Indien de server geen TLS ondersteunt kun je met
// onderstaande optie een onveilige verbinding forceren.
// Meestal is dit probleem te herkennen aan een lege response.
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// De ruwe JSON response
$response = curl_exec($curl);
// Gebruik json_decode() om de response naar een PHP array te converteren
$data = json_decode($response);
curl_close($curl);
//response
//var_dump($data);
$street = $data->_embedded->addresses[0]->street;
echo $street;
}
if (isset($_POST['Nr'])) {
$Nr = $_POST['Nr'];
}
if (isset($_POST['Naam'])) {
$Naam = $_POST['Naam'];
}
if (isset($_POST['Datum'])) {
$Datum = $_POST['Datum'];
}
if (isset($_POST['Geslacht'])) {
$Geslacht = $_POST['Geslacht'];
}
if (isset($_POST['Kleur'])) {
$Kleur = $_POST['Kleur'];
}
if (isset($_POST['Bijzonderheden'])) {
$Bijzonderheden = $_POST['Bijzonderheden'];
}
if (isset($_POST['Foto'])) {
$Url = $_POST['Foto'];
}
if (isset($_POST['Postcode']) and ($_POST['Postcode']==="afstand") OR ($_POST['Postcode']==="")) {
$Postcode="n.v.t.";
$street="afstand";
} else {
$Afstand = $_POST['Postcode'];
//echo "Afstand". $Afstand;
//Zet spatie op plek van +
$Postcode=substr($Afstand,0,4).' '.substr($Afstand,5,2);
//echo $Postcode;
// Haal spatie uit postcode
$var_postc=substr($Afstand,0,4).substr($Afstand,5,2);
//echo "var_postc". $var_postc;
apicall($var_postc);
}
?>
<!doctype html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Mailservice</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="mail.css" rel="stylesheet" type="text/css">
</head>
<body><br><br>
<div>
<h2>Mailservice</h2>
<form action="mail-data-nr.php" method="post">
<label for="Van">Van:</label><input type="text" name="van" id="van" value="" maxlength="10"/>
<label for="Aan">Aan:</label><input type="text" name="aan" id="aan" value="" maxlength="30" />
<label for="Onderwerp">Onderwerp:</label><input type="text" name="subject" id="subject" value="nr: <?php echo $Nr; ?>" maxlength="20" />
<label for="bijlage">bijlage:</label><input type="text" name="bijlage" id="bijlage" value="<?php echo $Foto=substr($Url,1); ?>" maxlength="50"/>
<label for="message">Bericht:</label><textarea id="message" name="message">Naam: <?php echo $Naam; ?> Nummer: <?php echo $Nr; ?> Datum: <?php echo $Datum; ?>
Geslacht: <?php echo $Geslacht; ?>
Kleur: <?php echo $Kleur; ?>
Leeftijd:
Vindplaats: <?php echo $street; ?>
Postcode: <?php echo $Postcode; ?>
Bijzonderheden: <?php echo $Bijzonderheden; ?>
Mvg,
</textarea>
<label for="Auth">Auth:</label><input type="tekst" name="Auth" id="Auth" maxlength="5" />
<input type="submit" value="post" />
</form>
</div>
</body>
</html>
Omdat de variabele alleen binnen de functie werkt. Het is handig om de waarde netjes te returnen.
Ik probeer een oplossing te bedenken. Ik kwam terecht bij global maar het werkt niet. regel 29 nu
Zit ik goed met global en doe ik iets verkeerd of zit ik verkeerd met global en bestaat er een andere oplossing?
Het enige wat je functie moet doen, is $street returnen. Dan hoef je alleen die functie aan te roepen in een echo en je bent er.
$GLOBALS['street']= $data->_embedded->addresses[0]->street;
Marina janssen op 24/07/2016 22:36:03:
Aha, dank.
Ik probeer een oplossing te bedenken. Ik kwam terecht bij global maar het werkt niet. regel 29 nu
Zit ik goed met global en doe ik iets verkeerd of zit ik verkeerd met global en bestaat er een andere oplossing?
Ik probeer een oplossing te bedenken. Ik kwam terecht bij global maar het werkt niet. regel 29 nu
Zit ik goed met global en doe ik iets verkeerd of zit ik verkeerd met global en bestaat er een andere oplossing?
bij het return statement wordt je functie direct verlaten. Als je dit niet in een if/else plaatst dan heeft de code eronder geen enkele zin meer omdat het nooit uitgevoerd zal worden.
voorbeeld:
Code (php)
Dit is wel nuttig:
Code (php)
Toevoeging op 24/07/2016 23:32:04:
Daarnaast moet je begrijpen dat een functie zijn eigen variabelen heeft. Dit voorbeeld geeft daarover wat meer duidelijkheid:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$getal = 10; // variabele in de 'global scope'
function test1() {
$getal = 20; // nieuwe variabele in de scope van deze functie
return 'test 1: ' . $getal . '<br>';
}
function test2() {
global $getal; // gebruik een variabele uit de global scope!
$getal = 30;
return 'test 2: ' . $getal . '<br>';
}
echo test1();
echo 'Het getal is: ' . $getal . '<br>';
echo test2();
echo 'Het getal is: ' . $getal . '<br>';
?>
$getal = 10; // variabele in de 'global scope'
function test1() {
$getal = 20; // nieuwe variabele in de scope van deze functie
return 'test 1: ' . $getal . '<br>';
}
function test2() {
global $getal; // gebruik een variabele uit de global scope!
$getal = 30;
return 'test 2: ' . $getal . '<br>';
}
echo test1();
echo 'Het getal is: ' . $getal . '<br>';
echo test2();
echo 'Het getal is: ' . $getal . '<br>';
?>
Toevoeging op 24/07/2016 23:34:37:
resultaat:
Toevoeging op 24/07/2016 23:50:55:
- Ariën - op 24/07/2016 22:41:16:
Global is bedoeld om een variabele van buiten je functie, in je functie oproepbaar te maken. Persoonlijk kies ik om dit via een functie-parameter te doen, maar dat terzijde.
Het gebruik van global is inderdaad af te raden omdat je functies dan afhankelijk worden van variabelen buiten de functie. Noem het maar een bad practice.
Code (php)
Gewijzigd op 24/07/2016 23:43:24 door Frank Nietbelangrijk
Geef een omschrijvende naam, zoals bijvoorbeeld: getStreetNameByZipCode($zip) ofzo.
Dit zegt ook niets over hoe dit geïmplementeerd is (dat deze functie van een externe API gebruik maakt). Dit is voor de gebruikers van de functie ook niet van belang, dit is abstractie.
In zo'n geval heb je het huisnummer nodig om te bepalen welke straat het is.
Of je kunt de gebruiker beide straten geven om een keuze te maken.
Ik moet zeggen dat ik me daar toen ik er mee bezig was ook wat gemakkelijk van afgemaakt heb, maar netjes was dat niet.
Voorbeeld: https://www.postcode.nl/zoek/6333BL levert je 2 straatnamen (zonder overlap in de huisnummers)