Suche

marco_ru

Mitglied
hallo habe eine kleine suche zusammengebaut doch die klappt nicht richtig heir der code:

search.php
PHP:
<?php
$ret = array();
$ret['filename'] = 'search.tpl';
$ret['title'] = 'Pokemon - Suche';
$ret['data'] = array();

$sql = "SELECT
			*
		FROM
			Pokedex";
			
$query = $db->query($sql);
$i = 0;
while($res = $query->fetch_array()){

$search = $res['Name'];

if(stristr($search, $_POST["search"])){
	$i++;
	$ID[$i] = $res['ID'];
	$Name[$i] = $res['Name'];
}

}

$ret['data']['ID'] = $ID;
$ret['data']['Name'] = $Name;

return $ret;
?>

und hier search.tpl
HTML:
<?php echo "Treffer: ".$i; ?>
<br />
<br />
<?php

foreach($data['ID'] as $value){
foreach($data['Name'] as $value1){
?>

<a href="http://www.pokeprof.pytalhost.de/index.php?section=pokedex&pokemon=<?php echo $value; ?>"><?php echo $value1; ?></a><br />

<?php 
}}
?>

bei einem treffer klappt dies aber wenn ich mehrere treffer habe wird das so ausgegeben:
001 Bisasam
002 Bisaknosp
003 Bisaflor
001 Bisasam
002 Bisaknosp
003 Bisaflor
001 Bisasam
002 Bisaknosp
003 Bisaflor
 
search.php:
PHP:
<?php
$ret = array();
$ret['filename'] = 'search.tpl';
$ret['title'] = 'Pokemon - Suche';
$ret['data'] = array();

$sql = "SELECT
            *
        FROM
            Pokedex
        WHERE
            Name LIKE '%".mysql_real_escape_string($_POST['search'])."%'";
            
$query = $db->query($sql);
while($res = $query->fetch_array()){
    $ret['data'][] = array("ID" => $res['ID'], "Name" =>$res['Name']);
}

return $ret;
?>

search.tpl:
PHP:
<?php echo "Treffer: ".count($data); ?>
<br />
<br />
<?php

foreach($data as $result_row){
?>

<a href="http://www.pokeprof.pytalhost.de/index.php?section=pokedex&pokemon=<?php echo $result_row['ID']; ?>"><?php echo $result_row['Name']; ?></a><br />

<?php 
}
?>

Ungetestet. Du hast auch einen Teil deines Codes weggelassen, somit ist der Kontext nicht ganz vollständig. Dementsprechend musst du die Variablen eventuell noch anpassen.

Gruß
 
ich lade das in einem templatesystem
habe das jetzt so gemacht

PHP:
<?php
$ret = array();
$ret['filename'] = 'search.tpl';
$ret['title'] = 'Pokemon - Suche';
$ret['data'] = array();

$sql = "SELECT
			*
		FROM
			Pokedex
		WHERE
			Name = ?";
			
if (!$stmt = $db->prepare($sql)) {
    return $db->error;
}
$stmt->bind_param('s', $_POST["search"]);
if (!$stmt->execute()) {
    return $stmt->error;
}
while($res = $stmt->fetch()){
	$search = array("ID" => $res['ID'], "Name" => $res['Name']); 
}
$ret['data']['Search'] = $search;
return $ret;
?>


PHP:
<?php echo "Treffer: ".count($data['Search']); ?>
<br />
<br />
<?php
foreach($data['Search'] as $result_row){
?>

<a href="http://www.pokeprof.pytalhost.de/index.php?section=pokedex&pokemon=<?php echo $result_row['ID']; ?>"><?php echo $result_row['Name']; ?></a><br />

<?php 
}
?>
klappt auch net kommt der fehler:Warning: Invalid argument supplied for foreach() in /srv/www/httpd/phost/p/de/pytalhost/pokeprof/web/Templates/search.tpl on line 5
 
Zuletzt bearbeitet:
Zunächst mal überschreibst du mit jedem Schleifendurchlauf die Variable $search und hast am Ende nur eine Ergebniszeile gespeichert. In deiner Zeile fehlt das leere Klammernpaar hinter $search, damit bei jeder Zuweisung ein weiterer Datensatz mit inkrementierem Index angelegt wird:
PHP:
$search[] = array("ID" => $res['ID'], "Name" => $res['Name']);
Wie gesagt fehlt noch ein bisschen Code, um eindeutig sagen zu können, was hier schief läuft. Ich sehe ja zum Beispiel gar nicht, warum du in der search.php eine return-Anweisung benutzt. Außerdem fehlt der Teil, in dem die Daten ins Template eingebunden werden.
 
Zurück