akbern Skrevet 22. juni 2014 Del Skrevet 22. juni 2014 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
Nordmann3 Skrevet 22. juni 2014 Del Skrevet 22. juni 2014 Hadde vært gøy å se siden din. Hva heter den? Lenke til kommentar
Thorbear Skrevet 22. juni 2014 Del Skrevet 22. juni 2014 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
akbern Skrevet 22. juni 2014 Forfatter Del Skrevet 22. juni 2014 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
akbern Skrevet 22. juni 2014 Forfatter Del Skrevet 22. juni 2014 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
Thorbear Skrevet 22. juni 2014 Del Skrevet 22. juni 2014 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
trondes Skrevet 23. juni 2014 Del Skrevet 23. juni 2014 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
Dan-Levi Skrevet 24. juni 2014 Del Skrevet 24. juni 2014 (endret) 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 24. juni 2014 av JanTerjeRiisOttoJohansen Lenke til kommentar
akbern Skrevet 25. juni 2014 Forfatter Del Skrevet 25. juni 2014 Takk for alle svar!Jeg skal prøve å forstå det dere har forklart meg her. Kommer tilbake med flere spm, for jeg er sikker på at det dukker opp noe etter hvert... 1 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå