Gå til innhold

Hvordan får man et echo til bare å vises én gang?


Anbefalte innlegg

Hei.

Jeg har laget en søkemotor til websiden min, og der brukeren får opp en boks hvor det står at søket etter "$get_value" var vellykket.

Dette fungerer bra, men dersom søket returnerer flere treff i databasen, kommer denne boksen opp over hvert treff, og det ser ikke bra ut.

Så mitt spørsmål er: Hvordan kan man få echo-statement'et til bare å vises én gang?

echo'et er som følger:

 

...

 

}

while($row_result=mysql_fetch_array($run_result)){

$site_title=$row_result['site_title'];
$site_link=$row_result['site_link'];
$site_desc=$row_result['site_desc'];
$site_sp=$row_result['site_sp'];
$site_image=$row_result['site_image'];

 

echo

"<div class='container'><div class='row'><div class='col-xs-12 col-md-8'><div class='alert alert-dismissable alert-success'>
<button type='button' class='close' data-dismiss='alert'>×</button>
<i class='fa fa-search fa-3x'></i><b>Søket var vellykket!</b><br>Ditt søk etter <em>$get_value</em> resulterte i følgende treff:</div>


<div class='well well-lg'>
<h3>$site_title</h3>
<p align='justify'>$site_desc</p>
<a href='$site_link'target='_self'>Lær mer om $site_sp ved å klikke her.</a><br>
<br>
<p><img src='/search-engine/images/$site_image' width='115' height='91' /></p>

</div></div>";

}
}


?>

 

Setter veldig pris på om noen kunne hjulpet meg. :)
På forhånd takk!

Lenke til kommentar
Videoannonse
Annonse

Om du kun ønsker å vise første resultat kan du legge til en break; etter echo, dette vil hoppe ut av while-loop'en.
Om du ønsker å vise alle resultatene i samme boks kan du mellomlagre resultatene i en variabel og sende den til echo etter loop'en er ferdig.

Lenke til kommentar

Hadde vært gøy å se siden din. Hva heter den? :)

 

Foreløpig bare på teststadiet. (Holder på å oppdatere utseende og funksjonalitet).

 

Biologiportalen

 

Søk etter f.eks. "Firblad". Da får du ett treff.

Søk etter "soleie", og du får flere treff, men da med tekstboksen (echo) flere ganger. Det er dette jeg vil forhindre...

Lenke til kommentar

Takk for svar.

Jeg er dessverre ikke så dreven på php ennå at jeg helt forstår hvordan dette skal gjøres.
Jeg vil selvfølgelig at echo skal vise søkeresultatene, men bare boksen som sier at søket var vellykket en gang... Stopper jeg echo med en break; stopper jeg vel også søkeresutatene fra å vises?

Lenke til kommentar

Om du bruker break; vil bare det første resultatet vises, ja.
Om du ønsker å vise flere resultater så har du to alternativer, alternativ 1 er å skrive ut det som skal dekke alle resultatene utenfor loop'en, og det som kun gjelder ett enkelt resultat inni loop'en eks:

<?php

echo "<div class='container'>";
while ($row_result = mysql_fetch_array($run_result)) {
    $site_title=$row_result['site_title'];
    $site_link=$row_result['site_link'];
    $site_desc=$row_result['site_desc'];
    $site_sp=$row_result['site_sp'];
    $site_image=$row_result['site_image'];

    echo "<div class='row'><div class='col-xs-12 col-md-8'><div class='alert alert-dismissable alert-success'>
  <button type='button' class='close' data-dismiss='alert'>×</button>
<i class='fa fa-search fa-3x'></i><b>Søket var vellykket!</b><br>Ditt søk etter <em>$get_value</em> resulterte i følgende treff:</div>
  
<div class='well well-lg'>    
<h3>$site_title</h3>
<p align='justify'>$site_desc</p>
<a href='$site_link'target='_self'>Lær mer om $site_sp ved å klikke her.</a><br>
<br>
<p><img src='/search-engine/images/$site_image' width='115' height='91' /></p>

</div>";
}
echo "</div>";

Alternativ 2 er å mellomlagre hvert resultat i en variabel, og foreta all utskriving på slutten, eks:

<?php

$output = "";
while ($row_result = mysql_fetch_array($run_result)) {
    $site_title=$row_result['site_title'];
    $site_link=$row_result['site_link'];
    $site_desc=$row_result['site_desc'];
    $site_sp=$row_result['site_sp'];
    $site_image=$row_result['site_image'];

    $output .= "<div class='row'><div class='col-xs-12 col-md-8'><div class='alert alert-dismissable alert-success'>
  <button type='button' class='close' data-dismiss='alert'>×</button>
<i class='fa fa-search fa-3x'></i><b>Søket var vellykket!</b><br>Ditt søk etter <em>$get_value</em> resulterte i følgende treff:</div>
  
<div class='well well-lg'>    
<h3>$site_title</h3>
<p align='justify'>$site_desc</p>
<a href='$site_link'target='_self'>Lær mer om $site_sp ved å klikke her.</a><br>
<br>
<p><img src='/search-engine/images/$site_image' width='115' height='91' /></p>

</div>";
}

echo "<div class='container'>" . $output . "</div>";
Lenke til kommentar

Hei.

 

Jeg har laget en søkemotor til websiden min, og der brukeren får opp en boks hvor det står at søket etter "$get_value" var vellykket.

 

Dette fungerer bra, men dersom søket returnerer flere treff i databasen, kommer denne boksen opp over hvert treff, og det ser ikke bra ut.

 

Så mitt spørsmål er: Hvordan kan man få echo-statement'et til bare å vises én gang?

 

echo'et er som følger:

 

...

 

 

Setter veldig pris på om noen kunne hjulpet meg. :)

På forhånd takk!

 

Grunnen til at du får ut denne meldingen flere ganger er jo for at while() loopen kjøres flere ganger når du finner et svar. og siden denne linjen er plassert inni loopen, ja da skjer det bare ;)

$output = "";
	while($row_result=mysql_fetch_array($run_result)){
        $site_title=$row_result['site_title'];
        $site_link=$row_result['site_link'];
        $site_desc=$row_result['site_desc'];
        $site_sp=$row_result['site_sp'];
        $site_image=$row_result['site_image'];
 
	$output .= "
		<div class='col-xs-12 col-md-8'>
			<div class='well well-lg'>    
				<h3>$site_title</h3>
				<p align='justify'>$site_desc</p>
				<a href='$site_link'target='_self'>Lær mer om $site_sp ved å klikke her.</a><br>
				<br>
				<p><img src='/search-engine/images/$site_image' width='115' height='91' /></p>
				</div>
			</div>";  

        }
		
	if( !empty( $output ){
		echo "	<div class='container'>
					<div class='row'>
						<div class='col-xs-12 col-md-8'>
							<div class='alert alert-dismissable alert-success'>
								<button type='button' class='close' data-dismiss='alert'>×</button>
								<i class='fa fa-search fa-3x'></i><b>Søket var vellykket!</b><br>Ditt søk etter <em>$get_value</em> resulterte i følgende treff:
								</div>
							</div>";
		echo $output;
		echo "			</div>
					</div>";
		}

Tror dette vil løse problemet ditt. Er litt usikker på hvordan css ser ut, men hvis jeg bare får utifra koden du har gitt over så er det er feil i den, da den aldri lukker ( </div> ) denne diven her: <div class='container'>. Så hver gang den skriver ut et nytt søk lager den en ny div inni den andre. Har prøvd å fikse dette også, men som sagt er ikke sikker på hvordan det vil bli sende ut når du skriver ut resultatene ;) men det skal være en grei ting å fikse.

 

Jeg har også gjort det slik at alt blir plassert inni div'ene "container" og "row" ser ikke noen grunn for at den skal bli skrevet ut flere ganger. MEN dette kommer igjen ann på hvordan stilsettet ditt ser ut.

 

Trond

Lenke til kommentar

Hei,

 

Først av alt så må du slutte å bruke mysql_* og gå over til MySQLi/PDO, mysql_* er avskrevet som av PHP 5.5.0 og vil ikke støttes av nyere versjoner.

 

Du er godt i gang og vil komme fort inn i dette tror jeg

 

Sjekk ut PHP leksjonene PHPAcademy på Youtube.

Her er leksjoner som omhandler database tilkoblinger med MySQLi.

Her er leksjoner som omhandler database tilkoblinger med PDO.

 

Legger ved hvordan jeg hadde gjort dette med PDO og noen egne klasser. Om du prøver deg på PDO og ser på videoene og skulle lure på noe sender du meg bare meldinger så hjelper jeg gjerne.

 

Her er hvordan jeg ville endret koden din til å benytte PDO med noen egenskrevne klasser.

<?php

// Dette scriptet inkluderer alle andre nødvendige scripts automatisk
require_once 'core/init.php';
// Hvis $_GET finnes
if (Input::exists('get')) {
	// Hvis $_GET er q f.eks. http://www.biologiportalen.net/search-engine/result.php?q=søkeord
	if (Input::get('q')) {
		// Setter opp en instans av databaseklassen
		$db = new Database;
		// $r er resultatet av denne spørringen
		$r = $db->getInstance()->get('inquiries',array('content','like',Input::get('q')));
		// Hvis det er resultater...
		if ($r->results()) {
			// Dette klargjør variabelen vi fyller alle søketreff med
			$results = "";
			//Resultattekst her: 
			echo "<b>Søket var vellykket!</b><br>Ditt søk etter <em>Input::get('q')</em> resulterte i følgende treff:<br>";

			// Her kjører vi... $data er variabelen for hvert treff i søket. Siden $data er et objekt kan vi si $data->site_sp, $data->site_title osv.
			foreach ($r->results() as $data) {

		        $results .= "<div class='container'>";
		        $results .= "<div class='row'>";
		        $results .= "<div class='col-xs-12 col-md-8'>";
		        $results .= "<div class='alert alert-dismissable alert-success'>";
		        $results .= "<button type='button' class='close' data-dismiss='alert'>×</button>";
		        $results .= "<i class='fa fa-search fa-3x'></i>";
		        $results .= "</div>";
		        $results .= "<div class='well well-lg'>";
		        $results .= "<h3>$data->site_title</h3>";
		        $results .= "<p align='justify'>$data->site_desc</p>";
		        $results .= "<a href='$data->site_link'target='_self'>Lær mer om $data->site_sp ved å klikke her.</a><br>";
		        $results .= "<br>";
		        $results .= "<p><img src='/search-engine/images/$data->site_image' width='115' height='91' /></p>";
		        $results .= "</div></div>";
			}
			//Utenfor kjører vi en echo av alle resultatene
			echo $results;
		}
	}
}

Edit: Var noen leifer her..

Endret av JanTerjeRiisOttoJohansen
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...