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.



en dit is het resultaat van de docent


hier heb ik het antwoord gevonden maar heb alles gedaan wat ze zeiden.


hoop dat jullie iets of wat mij kunnen helpen? Want als het aan de docenten ligt kom ik er niet aan uit....


<?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();
}
?> 
Regels 16, 21 en 26 gebruik je het volgende:


$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.
Peter K op 04/11/2015 19:45:07

Regels 16, 21 en 26 gebruik je het volgende:


$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
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?
Thomas van den Heuvel op 05/11/2015 00:23:31

elseif($formaat='xml'){

hoi


Regel 90 om precies te zijn :P

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

Reageren