api maken
Ik heb het ook samen gekeken met mijn docenten en die komen er ook niet meer aan uit. De code is correct en hun hebben dezelfde code gebruikt op hun sites en daar werkte het wel. Alleen geeft het bij mij op de browser aan dat het een 500 error is Ik ben dan verder gaan zoeken en de map waar het bestand inzit moet op rechten 775 staan en het bestand moet de rechten 664 hebben.
http://i296429.iris.fhict.nl/page/WP31/Week1/page/api_img.php?formaat=json&img_name=foto&img_path=pad
en dit is het resultaat van de docent
http://i875227.iris.fhict.nl/WP31/api_img.php?formaat=json&img_name=foto1
hier heb ik het antwoord gevonden maar heb alles gedaan wat ze zeiden.
https://www.bhosted.nl/helpdesk/item/9/Wat_veroorzaakt_een_Error_500_Internal_server_error
hoop dat jullie iets of wat mij kunnen helpen? Want als het aan de docenten ligt kom ik er niet aan uit....
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
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
<?php
// controleer welke GET parameter aanwezig is
// pas aan de hand daarvan de WHERE clause van het SQL statement aan
// Geen parameter img_name of img_path betekent geen where dus alle image tonen
require '../php_conectie/Connectie2.php';
// Is het formaat ingevuld?
if(isset($_GET['formaat'])){
$formaat= $_GET['formaat'];
if(isset($_GET['img_name']) && isset($_GET['img_path']))
{
$img_name = mysqli_escape_string($mysqli, $_GET['img_name']);
$img_path = mysqli_escape_string($mysqli, $_GET['img_path']);
$where = "WHERE img_name = ? AND img_path = ?";
}
else if(isset($_GET['img_name']))
{
$img_name = mysqli_escape_string($mysqli, $_GET['img_name']);
$where = "WHERE img_name = ?";
}
else if(isset($_GET['img_path']))
{
$img_path = mysqli_escape_string($mysqli, $_GET['img_path']);
$where = "WHERE img_path = ?";
}
else
{
$where = "";
}
// prepare
$stmt = $mysqli->prepare("SELECT img_id, img_name, img_path FROM upload_img " . $where);
if(isset($_GET['img_name']) && isset($_GET['img_path'])) // er is een img_name en img_path meegegeven in de aanroep
{
$stmt->bind_param("ss", $img_name, $img_path);
}
else if(isset($_GET['img_name'])) // er is een img_name meegegeven in de aanroep
{
$stmt->bind_param("s", $img_name);
}
else if(isset($_GET['img_path'])) // er is een img_path meegegeven in de aanroep
{
$stmt->bind_param("s", $img_path);
}
$stmt->execute();
$stmt->bind_result($img_id, $img_name, $img_path);
$stmt->store_result();
if($stmt->num_rows != 0) // er zijn img_ids
{ if($formaat=='json')
{
while($stmt->fetch()) // zolang er rijen zijn
{
// $img_id, Simg_name en $img_path zijn gevuld
$image[] = array('img_id' => $img_id, 'img_name' => $img_name, 'img_path' => $img_path); // zet img_id in array
}
header('Content-type: application/json');
echo (json_encode(array('image'=>$image)));
}
elseif($formaat='xml'){
$xml=new SimpleXMLElement('<img_names></img_names>');
while($stmt->fetch()) // zolang er rijen zijn
{
// $img_id, Simg_name en $img_path zijn gevuld
//voeg element img_name toe met naam img_name, img_id en img_path:
$info = $xml->addChild('img_name');
$item = $info->addChild('img_name',$img_name);
$item = $info->addChild('img_id',$img_id);
$item = $info->addChild('img_path',$img_path);
}
header('Content-type: text/xml');
// coderen als JSON:
echo $xml->asXML();
}
}
else // er zijn geen img_ids
{
$info = "Geen image";
if($formaat=='json')
{
header('Content-type: application/json');
echo (json_encode(array('info'=>$info)));
}
elseif($formaat='xml'){
$xml=new SimpleXMLElement("<info>$info</info>");
header('Content-type: text/xml');
echo $xml->asXML();
}
}
}
else // er is geen formaat meegegeven
{
$error = "Aanroep is: api_img.php?formaat=xml of api_img.php?formaat=json. Eventueel uitgebreid met &img_name= ... en/of &img_path= ... ";
header('Content-type: application/json');
echo (json_encode(array('error'=>$error)));
//$xml=new SimpleXMLElement("<error>$error</error>");
//header('Content-type: text/xml');
//echo $xml->asXML();
}
?>
// controleer welke GET parameter aanwezig is
// pas aan de hand daarvan de WHERE clause van het SQL statement aan
// Geen parameter img_name of img_path betekent geen where dus alle image tonen
require '../php_conectie/Connectie2.php';
// Is het formaat ingevuld?
if(isset($_GET['formaat'])){
$formaat= $_GET['formaat'];
if(isset($_GET['img_name']) && isset($_GET['img_path']))
{
$img_name = mysqli_escape_string($mysqli, $_GET['img_name']);
$img_path = mysqli_escape_string($mysqli, $_GET['img_path']);
$where = "WHERE img_name = ? AND img_path = ?";
}
else if(isset($_GET['img_name']))
{
$img_name = mysqli_escape_string($mysqli, $_GET['img_name']);
$where = "WHERE img_name = ?";
}
else if(isset($_GET['img_path']))
{
$img_path = mysqli_escape_string($mysqli, $_GET['img_path']);
$where = "WHERE img_path = ?";
}
else
{
$where = "";
}
// prepare
$stmt = $mysqli->prepare("SELECT img_id, img_name, img_path FROM upload_img " . $where);
if(isset($_GET['img_name']) && isset($_GET['img_path'])) // er is een img_name en img_path meegegeven in de aanroep
{
$stmt->bind_param("ss", $img_name, $img_path);
}
else if(isset($_GET['img_name'])) // er is een img_name meegegeven in de aanroep
{
$stmt->bind_param("s", $img_name);
}
else if(isset($_GET['img_path'])) // er is een img_path meegegeven in de aanroep
{
$stmt->bind_param("s", $img_path);
}
$stmt->execute();
$stmt->bind_result($img_id, $img_name, $img_path);
$stmt->store_result();
if($stmt->num_rows != 0) // er zijn img_ids
{ if($formaat=='json')
{
while($stmt->fetch()) // zolang er rijen zijn
{
// $img_id, Simg_name en $img_path zijn gevuld
$image[] = array('img_id' => $img_id, 'img_name' => $img_name, 'img_path' => $img_path); // zet img_id in array
}
header('Content-type: application/json');
echo (json_encode(array('image'=>$image)));
}
elseif($formaat='xml'){
$xml=new SimpleXMLElement('<img_names></img_names>');
while($stmt->fetch()) // zolang er rijen zijn
{
// $img_id, Simg_name en $img_path zijn gevuld
//voeg element img_name toe met naam img_name, img_id en img_path:
$info = $xml->addChild('img_name');
$item = $info->addChild('img_name',$img_name);
$item = $info->addChild('img_id',$img_id);
$item = $info->addChild('img_path',$img_path);
}
header('Content-type: text/xml');
// coderen als JSON:
echo $xml->asXML();
}
}
else // er zijn geen img_ids
{
$info = "Geen image";
if($formaat=='json')
{
header('Content-type: application/json');
echo (json_encode(array('info'=>$info)));
}
elseif($formaat='xml'){
$xml=new SimpleXMLElement("<info>$info</info>");
header('Content-type: text/xml');
echo $xml->asXML();
}
}
}
else // er is geen formaat meegegeven
{
$error = "Aanroep is: api_img.php?formaat=xml of api_img.php?formaat=json. Eventueel uitgebreid met &img_name= ... en/of &img_path= ... ";
header('Content-type: application/json');
echo (json_encode(array('error'=>$error)));
//$xml=new SimpleXMLElement("<error>$error</error>");
//header('Content-type: text/xml');
//echo $xml->asXML();
}
?>
Gewijzigd op 04/11/2015 18:16:25 door Enrico van der List
Is dit de bedoeling dat je die ? invult met:
$img_name en $img_path
Voor het overzicht is het wel netjes dat je werkt met het eerst definieren van een variabel $img_name.
Als je naar de snelheid gaat kijken is het overbodig om dit te doen, je kunt dan de mysqli_real_escape_string gelijk uitvoeren in het sql stuk.
Peter K op 04/11/2015 19:45:07:
Regels 16, 21 en 26 gebruik je het volgende:
Is dit de bedoeling dat je die ? invult met:
$img_name en $img_path
Voor het overzicht is het wel netjes dat je werkt met het eerst definieren van een variabel $img_name.
Als je naar de snelheid gaat kijken is het overbodig om dit te doen, je kunt dan de mysqli_real_escape_string gelijk uitvoeren in het sql stuk.
Is dit de bedoeling dat je die ? invult met:
$img_name en $img_path
Voor het overzicht is het wel netjes dat je werkt met het eerst definieren van een variabel $img_name.
Als je naar de snelheid gaat kijken is het overbodig om dit te doen, je kunt dan de mysqli_real_escape_string gelijk uitvoeren in het sql stuk.
Bound variables are sent to the server separately from the query and thus cannot interfere with it. The server uses these values directly at the point of execution, after the statement template is parsed. Bound parameters do not need to be escaped as they are never substituted into the query string directly. A hint must be provided to the server for the type of bound variable, to create an appropriate conversion. See the mysqli_stmt_bind_param() function for more information.
Bron
Er is een fout opgetreden toen de website http://i296429.iris.fhict.nl/page/WP31/Week1/page/api_img.php?formaat=json&img_name=foto&img_path=pad probeerde op te halen. De server kan offline zijn wegens onderhoud of kan onjuist zijn geconfigureerd.
En die wil ik eruit krijgen
En dat klopt niet, want het script wordt wel uitgevoerd als je de parameters weg laat. Het ligt dus aan de inhoud van het script.
Ben van Velzen op 05/11/2015 00:03:50:
En dat klopt niet, want het script wordt wel uitgevoerd als je de parameters weg laat. Het ligt dus aan de inhoud van het script.
maar waar dan? want de docent heeft dezelfde code gebruikt met zelfde gegevens in de database en die krijgt hem wel uitgelezen?
hoi
Thomas van den Heuvel op 05/11/2015 00:23:31:
elseif($formaat='xml'){
hoi
hoi
Regel 90 om precies te zijn :P
die syntax is met een enkele = niet technisch fout. "als het lukt om de string "xml" op te slaan in de var $formaat"
Doorgaans wil je in een if wel == of === gebruiken.
Maar dat zou geen 501 fout op moeten leveren.
Ik zou in eerste instantie eens het melden+weergeven van fouten aanzetten, zoals Ivo voorstelt. Ook vind ik het best knap dat je met bovenstaande code een 500 errorcode (Internal Server Error) kunt produceren. Sla de errorlogs van de webserver er eens op na om te zien wat hier aan de hand is.
Klopt het ook dat je "dezelfde" (is het overal ècht precies dezelfde code?) op verschillende machines / webservers uitvoert? Het is vrij onwaarschijnlijk dat als je dezelfde bron(code) aanroept deze verschillende reageert.
Stap 1 is het isoleren van het probleem: zit dit in de code (zoja waar) of is dit toch een instelling o.i.d..
En als dit is opgelost wellicht je API code eens wat fatsoeneren.
http://i296429.iris.fhict.nl/page/WP31/Week1/page/api_img.php?img_name=foto geeft wel een resultaat, al is de melding uit de laatste else.
Stap 1 is eenvoudig genoeg. Het zit in de code: Dan is het een kwestie van code strippen/commenten en/of breekpunten inbouwen om te zien waar het fout gaat. Als je voldoende hebt opgeschoond/uitgeschakeld en je een respons krijgt verschillende van error 500, dan is de code die je juist daarvoor hebt uitgeschakeld de boosdoener.