Hallo allemaal, ik ben nog redelijk nieuw met PHP en ik loop tegen een probleem aan. Wanneer ik data van Apache Solr aanvraag lukt het mij niet om dit uit de juiste manier weer te geven (en ik heb geen idee hoe ik dit moet doen). Dit is de code waar het om zou moeten gaan (mijn pagination code is volgensmij niet nodig):


$core_url = "http://localhost:8983/solr/[corename]/select?q=";
$start=$page*10-10;

$contents = file_get_contents($core_url.'Keywords:'.$query.'&wt=php&rows=10&start='.$start.'&fl=Journal_title,Publisher,Keywords,Journal_URL,Full_text_formats,Full_text_language,Most_Recent_Article_Added,Number_of_Article_Records'.'');
eval("\$result = " . $contents . ";");
$count = $result["response"]["numFound"];
$numOfPages = ceil($count/10);

if($count==0){
    echo "no results found";
}

for($i=0; $i<sizeof($result["response"]["docs"]) ; $i++){
    echo '<div class="searchresult">';
    foreach($result["response"]["docs"][$i] as $key=>$value){
        display($key,$value);
    }
    echo '</div>';
    echo "<br/>";
}


function display($k,$x){
    if(!isset($x)){
        return;
    }
    echo $k.": ";
    if(!is_array($x)){
        echo $x;

        echo "<br>";
    }
    else {
        for($i=0; $i<sizeof($x) ; $i++){
            if(sizeof($x)==1 || $i==sizeof($x)-1){
                echo $x[$i];
            }
            else {
                echo $x[$i].' - ';
            }
        }
        echo "<br>";
    }
}

?>


Dit geeft mij het volgende resultaat:
En ik wil uiteindelijk het volgende bereiken:

Ik hoop dat ik genoeg informatie heb gestuurd en dat iemand mij hiermee uit de brand kan helpen. Mocht dit niet (duidelijk) genoeg zijn dan stuur ik graag extra informatie.

Alvast bedankt voor het meedenken! :)

[size=xsmall]Toevoeging op 18/10/2020 18:24:38:[/size]

Tevens begrijp ik dat de opmaak in css gedaan moet worden, dit zou (hopelijk) geen probleem moeten zijn. Wat ik voornamelijk lastig vind is hoe ik de tekst op deze manier in de div kan plaatsen op volgorde met apart id/class voor latere css, of bijvoorbeeld een <h1> <h2> <h3> tag of iets in die richting.

Hopelijk maakt dit het iets duidelijker!
Zou je jouw code tussen code-tags willen zetten? Quote is hier niet voor bedoeld.
- Ariën - op 18/10/2020 18:27:31

Zou je jouw code tussen code-tags willen zetten? Quote is hier niet voor bedoeld.

Excuus, ga ik doen! Zijn dat de drie ` tekens zoals bij stackoverflow? Ik zie het namelijk niet staan in het optiemenu...

Edit: gelukt!
$x is een array? Dan kan je die als test met print_r() zichtbaar maken zodat je weet welke elementen je kan gebruiken. Zoaks titel, formaat, type.
- Ariën - op 18/10/2020 18:45:54

$x is een array? Dan kan je die als test met print_r() zichtbaar maken zodat je weet welke elementen je kan gebruiken. Zoaks titel, formaat, type.


Het is inderdaad een array. Maar wanneer ik dit doe:

$k.": ";
	if(!is_array($x)){
		print_r ($x);

		
		echo "<br>";
	}
	else {
		for($i=0; $i<sizeof($x) ; $i++){
			if(sizeof($x)==1 || $i==sizeof($x)-1){
				print_r ($x[$i]);
			}
			else {
				print_r ($x[$i]).' - ';
			}
		}
		echo "<br>";
	}
}

verandert er niets, of bedoelt u iets anders?
Haal die spatie in je functie eens weg.
Excuus, maar op deze manier krijg ik het ook niet aan de praat (of bedoelt u iets op een andere regel?).

function display($k,$x){
	if(!isset($x)){
		return;
	}
	echo $k.": ";
    if(!is_array($x)){
        print_r($x);

        echo "<br>";
    }
    else {
        for($i=0; $i<sizeof($x) ; $i++){
            if(sizeof($x)==1 || $i==sizeof($x)-1){
                print_r($x[$i]);
            }
            else {
                print_r($x[$i]).' - ';
            }
        }
        echo "<br>";
    }
}
Volgens mij ben je op zoek naar zoiets:
<?php

$data = $result["response"]["docs"][$i] + [ //defaults - indien nodig / niet altijd gevuld
  'Journal_title' => null,
  'Journal_URL' => null,
  'Publisher' => 'Unknown',
  'Keywords' => null,
  'Full_text_language' => 'Unknown',
  'Full_text_formats' => null
];

print("
  <h1>{$data['Journal_title']}</h1>
  <a href='{$data['Journal_URL']}'>{$data['Journal_URL']}</a>
  Publisher: {$data['Publisher']}<br>
  Keywords: {$data['Keywords']}<br>
  Language: {$data['Full_text_language']}<span>File type: {$data['Full_text_formats']}"
);

?>

Opmaken met CSS en via :empty evt lege velden verbergen.
Hoi Rob, heel erg bedankt voor uw hulp! Ik merk alleen wel dat u meer verstand heeft van PHP dan ik (gelukkig), en ik ben niet helemaal zeker welk deel ik moet aanpassen om uw code uit te proberen (ik ben nog heel slecht in de context oppakken van code). Ik heb mijn complete php code toegestuurd en hopelijk kunt u mij de zinnummers sturen waar ik mijn code kan vervangen door die van u.

<?php
if(isset($_GET["page"])){
	$page = (int)$_GET["page"];
}
else {
	$page = 1;
}

$query = urldecode($_GET["query"]);
$query = str_replace(" ","%20",$query);

$core_url = "http://localhost:8983/solr/[core-name]/select?q=";
$start=$page*10-10;

$contents = file_get_contents($core_url.'Keywords:'.$query.'&wt=php&rows=10&start='.$start.'&fl=Journal_title,Publisher,Keywords,Journal_URL,Full_text_formats,Full_text_language,Most_Recent_Article_Added,Number_of_Article_Records'.'');
eval("\$result = " . $contents . ";");
$count = $result["response"]["numFound"];
$numOfPages = ceil($count/10);

if($count==0){
	echo "no results found";
}

for($i=0; $i<sizeof($result["response"]["docs"]) ; $i++){
	echo '<div class="searchresult">';
	foreach($result["response"]["docs"][$i] as $key=>$value){
		display($key,$value);
	}
	echo '</div>';
	echo "<br/>";
}

echo '<div class="pagination">';
$max = 5;
$startPage = max(1, $page - $max);
$firstPage = min(1, $numOfPages);
$lastPage = max(1, $numOfPages);
echo "<a href='search.php?page=".($firstPage)."&query=".$query."'>".($firstPage)."</a> ";
$endPage = min( $numOfPages, $page + $max);
for($i = $startPage; $i < $endPage; $i++) {
    echo '<div class="pageresult">';
	echo "<a href='search.php?page=".($i+1)."&query=".$query."'>".($i+1)."</a> ";
	echo '</div>';
}
echo " <a href='search.php?page=".($lastPage)."&query=".$query."'>".($lastPage)."</a> ";
echo "<br>";
echo "<br>";
echo "<br>";


echo '</div>';

function display($k,$x){
	if(!isset($x)){
		return;
	}
	echo $k.": ";
	if(!is_array($x)){
		echo $x;

		
		echo "<br>";
	}
	else {
		for($i=0; $i<sizeof($x) ; $i++){
			if(sizeof($x)==1 || $i==sizeof($x)-1){
				echo $x[$i];
			}
			else {
				echo $x[$i].' - ';
			}
		}
		echo "<br>";
	}
}

?>
Mijn stukje vervangt jouw regel 26 t/m 28 (hierboven).
Rob Doemaarwat op 18/10/2020 20:40:46

Mijn stukje vervangt jouw regel 26 t/m 28 (hierboven).


Bedankt voor uw snelle reactie! Ik heb het volgende (en wat andere pogingen) geprobeerd:

<?php
if(isset($_GET["page"])){
	$page = (int)$_GET["page"];
}
else {
	$page = 1;
}

$query = urldecode($_GET["query"]);
$query = str_replace(" ","%20",$query);

$core_url = "http://localhost:8983/solr/journals/select?q=";
$start=$page*10-10;

$contents = file_get_contents($core_url.'Keywords:'.$query.'&wt=php&rows=10&start='.$start.'&fl=Journal_title,Publisher,Keywords,Journal_URL,Full_text_formats,Full_text_language,Most_Recent_Article_Added,Number_of_Article_Records'.'');
eval("\$result = " . $contents . ";");
$count = $result["response"]["numFound"];
$numOfPages = ceil($count/10);

if($count==0){
	echo "no results found";
}

for($i=0; $i<sizeof($result["response"]["docs"]) ; $i++){
	echo '<div class="searchresult">';
	$data = $result["response"]["docs"][$i] + [ //defaults - indien nodig / niet altijd gevuld
		'Journal_title' => null,
		'Journal_URL' => null,
		'Publisher' => 'Unknown',
		'Keywords' => null,
		'Full_text_language' => 'Unknown',
		'Full_text_formats' => null
	  ];
	  
	  print("
		<h1>{$data['Journal_title']}</h1>
		<a href='{$data['Journal_URL']}'>{$data['Journal_URL']}</a>
		Publisher: {$data['Publisher']}<br>
		Keywords: {$data['Keywords']}<br>
		Language: {$data['Full_text_language']}<span>File type: {$data['Full_text_formats']}"
	  );
	  
	echo '</div>';
	echo "<br/>";
}

echo '<div class="pagination">';
$max = 5;
$startPage = max(1, $page - $max);
$firstPage = min(1, $numOfPages);
$lastPage = max(1, $numOfPages);
echo "<a href='search.php?page=".($firstPage)."&query=".$query."'>".($firstPage)."</a> ";
$endPage = min( $numOfPages, $page + $max);
for($i = $startPage; $i < $endPage; $i++) {
    echo '<div class="pageresult">';
	echo "<a href='search.php?page=".($i+1)."&query=".$query."'>".($i+1)."</a> ";
	echo '</div>';
}
echo " <a href='search.php?page=".($lastPage)."&query=".$query."'>".($lastPage)."</a> ";
echo "<br>";
echo "<br>";
echo "<br>";


echo '</div>';

function display($k,$x){
	if(!isset($x)){
		return;
	}
	echo $k.": ";
	if(!is_array($x)){
		echo $x;

		
		echo "<br>";
	}
	else {
		for($i=0; $i<sizeof($x) ; $i++){
			if(sizeof($x)==1 || $i==sizeof($x)-1){
				echo $x[$i];
			}
			else {
				echo $x[$i].' - ';
			}
		}
		echo "<br>";
	}
}

?>

Maar nu krijg ik de volgende error:

Bij de volgende aangegeven regels:

Reageren