api maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Enrico van der List

Enrico van der List

04/11/2015 18:15:07
Quote Anchor link
Momenteel ben ik bezig met een school opdracht om een eigen api te maken. Alleen mijn probleem is ik kan mijn bestanden niet kan uitlezen.
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)
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
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();

}
?>
Gewijzigd op 04/11/2015 18:16:25 door Enrico van der List
 
PHP hulp

PHP hulp

24/01/2020 17:19:07
 
Peter K

Peter K

04/11/2015 19:45:07
Quote Anchor link
Regels 16, 21 en 26 gebruik je het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$where = "WHERE img_name = ? AND img_path = ?";


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.
 
Randy vsf

Randy vsf

04/11/2015 20:03:32
Quote Anchor link
Peter K op 04/11/2015 19:45:07:
Regels 16, 21 en 26 gebruik je het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$where = "WHERE img_name = ? AND img_path = ?";


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
 
Enrico van der List

Enrico van der List

04/11/2015 23:50:42
Quote Anchor link
Maar er is niets met die code maar op een of andere manier heb ik geen rechten omdat de site een error 500 aangeeft met deze opmerking

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
 
Ben van Velzen

Ben van Velzen

05/11/2015 00:03:50
Quote Anchor link
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.
 
Enrico van der List

Enrico van der List

05/11/2015 00:06:40
Quote Anchor link
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?
 
Thomas van den Heuvel

Thomas van den Heuvel

05/11/2015 00:23:31
Quote Anchor link
elseif($formaat='xml'){

hoi
 
Ivo P

Ivo P

05/11/2015 09:20:01
Quote Anchor link
probeer eens errors te tonen. Die staan nu waarschijnlijk in je log file, maar op het scherm is gemakkelijker:

http://www.pfz.nl/wiki/troubleshooter/#stap-1-regel-een-foutmelding
 
Jacco Engel

Jacco Engel

05/11/2015 09:54:12
Quote Anchor link
Thomas van den Heuvel op 05/11/2015 00:23:31:
elseif($formaat='xml'){

hoi


Regel 90 om precies te zijn :P
 
Ivo P

Ivo P

05/11/2015 09:57:07
Quote Anchor link
elseif($formaat='xml'){

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

05/11/2015 14:10:51
Quote Anchor link
True, maar als je een API schrijft lijkt het mij handig als je niet alles in 1 grote if-elseif-elseif-else-statement stopt. Die = 'xml' toekenning komt trouwens vaker voor in bovenstaande code. Als het dan toch je bedoeling is om op een default terug te vallen zou ik toch echt een andere aanpak kiezen (ga uit van default waarden, bijvoorbeeld). Het is nu onduidelijk of dit opzettelijk zo geschreven is, of per ongeluk fout is.

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.
 
Ben van Velzen

Ben van Velzen

05/11/2015 14:21:52
Quote Anchor link
Stap 1 is eenvoudig genoeg. Het zit in de code: 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.
 
Thomas van den Heuvel

Thomas van den Heuvel

05/11/2015 14:33:06
Quote Anchor link
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.
 



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.