Avatar billede tobrukDk Novice
21. april 2014 - 00:46 Der er 12 kommentarer og
1 løsning

viser intet indhold eller indholder bliver vist

hej

det er sådan at jeg skal have vist indholdet på siden, det vil sige er der blevet søgt efter Nordsjælland og fitness world. så skal den gå ind i brugertablen og opslagtablen samtidig hvor de inner join hinanden.


SELECT fms_opslag.id, fms_opslag.title, fms_opslag.undertitle, fms_opslag.brugerid, fms_bruger.profilbillede, fms_bruger.fitness, fms_bruger.landsdel
FROM fms_opslag
INNER JOIN fms_bruger
ON fms_opslag.brugerid=fms_bruger.id
WHERE fms_bruger.fitness LIKE CONCAT('%', ?, '%') AND fms_bruger.landsdel LIKE CONCAT('%', ?, '%')


Hvis jeg gøre sådan her i database/phpmyadmin,



SELECT fms_opslag.id, fms_opslag.title, fms_opslag.undertitle, fms_opslag.brugerid, fms_bruger.profilbillede, fms_bruger.fitness, fms_bruger.landsdel
FROM fms_opslag
INNER JOIN fms_bruger
ON fms_opslag.brugerid=fms_bruger.id
WHERE fms_bruger.fitness LIKE CONCAT('%fitness world%') AND fms_bruger.landsdel LIKE CONCAT('%nordsjælland%')



Så kommer den frem og skriver "Viser rækkerne 0 - 0 (1 i alt, forepørgsel tog 0.0008 sek)"

Det vil sige at der er en derind med det opslag og information som jeg har.

Sådan her har jeg prøvet at skrive koden:



$sql = "
SELECT fms_opslag.id, fms_opslag.title, fms_opslag.undertitle, fms_opslag.brugerid, fms_bruger.profilbillede, fms_bruger.fitness, fms_bruger.landsdel
FROM fms_opslag
INNER JOIN fms_bruger
ON fms_opslag.brugerid=fms_bruger.id
WHERE fms_bruger.fitness LIKE CONCAT('%', ?, '%') AND fms_bruger.landsdel LIKE CONCAT('%', ?, '%')
";
if ($stmt = $this->mysqli->prepare($sql))
{
    $stmt->bind_param('ss', $fitness, $landsdel);
    $fitness = $_POST["fitness"];
    $landsdel = $_POST["omrade"];
    $stmt->execute();
    $stmt->bind_result($id, $title, $undertitle, $brugerid, $profilbillede, $fitness, $landsdel);
    if ($stmt->num_rows == 0) {
    ?>
        <tr class="postbox">
            <td class="erroropslag">Der er ingen opslag på <?php echo $_POST["fitness"] . " og " . $_POST["omrade"];?>.</td>
        </tr>
    <?php
    }
    else
    {
        while ($stmt->fetch())
        {
        ?>
        <tr class="postbox">
            <td>
                <img src="/profil-img/smaa/<?php echo $profilbillede;?>">
            </td>
            <td class="tabletitle">
                <h3><?php echo $title;?></h3>
                <p><?php echo $undertitle;?></p>
                <?php
                if($_SESSION["login"] == true)
                {
                ?>
                <form action="/ansog/<?php echo $id;?>/" method="post">
                    <input type="submit" name="ansoge" value="Ansøg nu" class="kliknuBB">
                </form>
                <?php
                }
                ?>
            </td>
            <td class="tableomrade">
                <p><?php echo $fitness;?></p>
            </td>
            <td class="tablemap">
                <p><?php echo $landsdel;?></p>
            </td>
        </tr>
        <?php
        }
    }
    $stmt->close();
}


Når jeg skriver sådan her


if ($stmt->num_rows == 0) {


Så siger den der er ingen på "Fitness world og Nordsjælland"

men andre ord den siger sådan her: Der er ingen opslag på Fresh fitness og Nordsjælland.

Når jeg skriver sådan her

if ($stmt->num_rows == 1) {


Så gider indholdet gerne at komme frem på siden.
Avatar billede erikjacobsen Ekspert
21. april 2014 - 15:07 #1
Bruger du unbuffered mysqli? Hvordan laver du forbindelse til databasen (uden dit password, tak)
Avatar billede tobrukDk Novice
21. april 2014 - 15:17 #2

function db_c()
    {
        $mysqli = new mysqli('.', '..', '...', '..');

        if ($mysqli->connect_errno) {
            die('Fejl : ' . $mysqli->connect_errno);
        }
        mysqli_set_charset($mysqli, "utf8");
        $this->mysqli = $mysqli;
    }


hvad mener du med "Bruger du unbuffered mysqli?"
Avatar billede erikjacobsen Ekspert
21. april 2014 - 17:04 #3
Ja, det var lidt hurtigt, men du bruger implicit "unbuffered" mysql. Læs første kommentar på http://www.php.net/manual/en/mysqli-stmt.execute.php hvor der står, at der ikke er hentet noget resultat, før første "fetch", og derfor heller ingen oplysninger om antal rækker.

Du kan nok smartest fixe det ved altid at køre din while-løkke, og fx tælle antal rækker udskrevet. Har du efter while-løkken ingen rækker, så kan du skrive "Ingenting".

Den anden mulighed er, som kommentaren antyder, at anvende http://dk1.php.net/manual/en/mysqli.store-result.php
Avatar billede tobrukDk Novice
21. april 2014 - 17:18 #4
Forstår ikke lige helt hvad du mener ;)
Avatar billede erikjacobsen Ekspert
21. april 2014 - 17:21 #5
Ok, den korte udgave: når du gør det på den måde, kendes antal rækker ikke.
Avatar billede tobrukDk Novice
21. april 2014 - 17:29 #6
Hvorfor så ikke det?, er det fordi jeg laver noget forkert i adgangen til db?
Avatar billede erikjacobsen Ekspert
21. april 2014 - 19:52 #7
Nej, det er måden, det er lavet på. Uden brug af http://dk1.php.net/manual/en/mysqli.store-result.php kender du ikke antallet før efter while-løkken.
Avatar billede tobrukDk Novice
21. april 2014 - 20:48 #8
Hvordan kan det være at det er forkert adgang til db?

Det er den måde som jeg har gjort det på siden ole lavet guide omkring mysqli..

mærkeligt

er det her jeg skal bruge


while($this->Mysqli->next_result()){
      if($l_result = $this->Mysqli->store_result()){
              $l_result->free();
      }
    }
Avatar billede erikjacobsen Ekspert
21. april 2014 - 20:53 #9
Hvis du tænker på http://www.eksperten.dk/guide/1480 anvende Ole ikke num_rows.

Du kan sådan set bare gøre som du viser i spørgsmålet - blot vente med din "Der er ingen opslag..." til efter while-løkken. Og undlade num_rows
Avatar billede tobrukDk Novice
21. april 2014 - 20:57 #10
så ingen opslag skal første kom efter while er det rigtig forstået?
Avatar billede erikjacobsen Ekspert
21. april 2014 - 21:01 #11
Ja, hvis der ikke har været nogen i while-løkken. Du kan med fordel tælle hvor mange du skriver ud i løkken.
Avatar billede tobrukDk Novice
21. april 2014 - 21:10 #12
jeg fik det til at virker, såddan her


$stmt->store_result();
                        if($stmt->num_rows == 0)
                        {
//mere php kode
Avatar billede tobrukDk Novice
16. maj 2014 - 00:35 #13
Lukker opgaven
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester