Avatar billede tobrukDk Novice
16. april 2013 - 15:14 Der er 15 kommentarer og
1 løsning

finde ud af der er i databasen

Hej


er i gang med at bygge en side hvor det er sådan at jeg har nogle checkbox, og det er sådan at hvis bruger ingen uddannelse har altså f.eks kategori 1 eller 16 så skal han ikke kun tilføj dem igen, eller se dem

Jeg har prøve sådan her;


function indstillinger_indhold()
    {
       
       
        if ($stmt = $this->mysqli->prepare('SELECT `rank_U` FROM `uddannelse` WHERE `id_bruger` = ?')) {

        /* Bind parametre */
        $stmt->bind_param('i', $id);

        /* Sæt værdier på parametrene */
        $id = $_SESSION["id"];

        /* Eksekver forespørgslen */
        $stmt->execute();

        /* Bind resultatet */
        $stmt->bind_result($rank_U);
        while ($stmt->fetch()) {
       
       
        if ($stmt = $this->mysqli->prepare('SELECT `id`, `navn` FROM `uddannelse_emne`')) {
            $stmt->execute();
            $stmt->bind_result($id, $navn);
            while ($stmt->fetch()) {
           
            if($id != $rank_U)
            {
            ?>
        <div class="uddannelse_boxxen"><label><input type="checkbox" name="foo[]" value="<?php echo $id;?>" class="new"> <?php echo $navn;?></label></div>
            <?php
            }
           
            }
            $stmt->close();

        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }   
       
        }
       
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }
    }


Fejl er:

Der opstod en fejl i erklæringen: Fatal error: Call to a member function fetch() on a non-object in /home/jesperbo/public_html/blabla.dk/indhold/inc/php_function.php on line 3030



$stmt->bind_result($rank_U);
        while ($stmt->fetch()) {


det vil sige at "While" er fejlen!.
Avatar billede arne_v Ekspert
16. april 2013 - 15:24 #1
Du genbruger $stmt til 2 queries og kalde faktisk close i den inderste!
Avatar billede arne_v Ekspert
16. april 2013 - 15:24 #2
Du genbruger ogsaa connection hvilket muligvis ogsaa kan vaere et problem.
Avatar billede tobrukDk Novice
16. april 2013 - 15:30 #3
så du mener at jeg skal prøve at klare den noget andet?
Avatar billede tobrukDk Novice
16. april 2013 - 15:37 #4
jeg mener "om jeg skal lave om på navne"
Avatar billede tobrukDk Novice
16. april 2013 - 15:49 #5
hvis jeg gøre sådan her;


function indstillinger_indhold()
    {
       
       
        if ($mt = $this->mysqli->prepare('SELECT `rank_U` FROM `uddannelse` WHERE `id_bruger` = ?')) {

        /* Bind parametre */
        $mt->bind_param('i', $id);

        /* Sæt værdier på parametrene */
        $id = $_SESSION["id"];

        /* Eksekver forespørgslen */
        $mt->execute();

        /* Bind resultatet */
        $mt->bind_result($rank_U);
        while ($mt->fetch()) {
       
       
        if ($stmt = $this->mysqli->prepare('SELECT `id`, `navn` FROM `uddannelse_emne`')) {
            $stmt->execute();
            $stmt->bind_result($id, $navn);
            while ($stmt->fetch()) {
           
            if($id != $rank_U)
            {
            ?>
        <div class="uddannelse_boxxen"><label><input type="checkbox" name="foo[]" value="<?php echo $id;?>" class="new"> <?php echo $navn;?></label></div>
            <?php
            }
           
            }
            $stmt->close();

        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }   
       
        }
        $mt->close();
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }
    }


så kommer fejl frem og siger ; Der opstod en fejl i erklæringen: Commands out of sync; you can't run this command nowDer opstod en fejl i erklæringen: Commands out of sync; you can't run this command now
Avatar billede tobrukDk Novice
16. april 2013 - 16:07 #6
Det er her fejl ligger:


if ($stmt = $this->mysqli->prepare('SELECT `id`, `navn` FROM `uddannelse_emne`')) {
            $stmt->execute();
            $stmt->bind_result($id, $navn);
            while ($stmt->fetch()) {
           
            if($id != $rank_U)
            {
            ?>
        <div class="uddannelse_boxxen"><label><input type="checkbox" name="foo[]" value="<?php echo $id;?>" class="new"> <?php echo $navn;?></label></div>
            <?php
            }
           
            }
            $stmt->close();

        } else {
            echo '<br />opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }   
Avatar billede arne_v Ekspert
16. april 2013 - 16:08 #7
Maaske skal du bruge 2 connections ogsaa.
Avatar billede arne_v Ekspert
16. april 2013 - 16:13 #8
eksempel:

$con1 = new mysqli('localhost', 'root', '', 'Test');
$stmt1 = $con1->prepare('SELECT mainid,txtval FROM main WHERE ? <= mainid AND mainid <= ?');
$stmt1->bind_param('ii', $start, $end);
$start = 1;
$end = 2;
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($mainid, $txtval);
echo "<ul>\r\n";
while ($stmt1->fetch()) {
    echo "<li>$txtval</li>\r\n";
    $con2 = new mysqli('localhost', 'root', '', 'Test');
    $stmt2 = $con2->prepare('SELECT subid,txtval FROM sub WHERE mainid = ?');
    $stmt2->bind_param('i', $mainid);
    $stmt2->execute();
    $stmt2->store_result();
    $stmt2->bind_result($subid, $txtval);
    echo "<ul>\r\n";
    while ($stmt2->fetch()) {
        echo "<li>$txtval</li>\r\n";
    }
    echo "</ul>\r\n";
    $stmt2->close();
    $con2->close();
}
echo "</ul>\r\n";
$stmt1->close();
$con1->close();

Funktionaliteten burde laves med JOIN, men pointen er 2 connections og 2 statements.
Avatar billede tobrukDk Novice
16. april 2013 - 16:19 #9
Den kode forvirrer mig virkelig, jeg kan ikke lige helt sådan forstå den på nogle måde.
Avatar billede tobrukDk Novice
16. april 2013 - 16:45 #10
Jeg forstår ikke lige helt din kode.:(


function indstillinger_indhold()
    {
        if ($stmt = $this->mysqli->prepare('SELECT `rank_U` FROM `uddannelse` WHERE `id_bruger` = ?')) {

        /* Bind parametre */
        $stmt->bind_param('i', $id);

        /* Sæt værdier på parametrene */
        $id = $_SESSION["id"];

        /* Eksekver forespørgslen */
        $stmt->execute();

        /* Bind resultatet */
        $stmt->bind_result($rank_U);
        while ($stmt->fetch()) {
           
           
            if ($stmt_2 = $this->mysqli->prepare('SELECT `id`, `navn` FROM `uddannelse_emne` WHERE `id_bruger` = ?')) {
            $stmt_2->bind_param('i', $id);
            $id = $_SESSION["id"];

            $stmt_2->execute();

            $stmt_2->bind_result($id, $navn);

            /* Hent rækker og udskriv data */
            while ($stmt_2->fetch()) {
        ?>
<div class="uddannelse_boxxen"><label><input type="checkbox" name="foo[]" value="<?php echo $id;?>" class="new"> <?php echo $navn;?></label></div>
        <?php
            }

            $stmt_2->close();

            } else {
                echo ' FEJL: ' . $this->mysqli->error;
            }
       
       
       
        }
        $stmt->close();
        } else {
            echo '<br />Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }
    }


kommer frem og viser: FEJL: Commands out of sync; you can't run this command now FEJL: Commands out of sync; you can't run this command now
Avatar billede tobrukDk Novice
16. april 2013 - 16:57 #11
Kan jeg ikke bare lave noget i den her still: http://www.w3schools.com/sql/sql_join_inner.asp
Avatar billede tobrukDk Novice
16. april 2013 - 17:05 #12
har prøvet inner join og det virker ikke for mig, :( jeg skal bruge 3 steder fra og det endnu stede skal jeg hente 2 gang og det andet skal hente 1 gang og det kan ikke lade sig gøre, jeg har lige selv prøve, dog kan det godt være at jeg har gjort det forkert så.
Avatar billede arne_v Ekspert
16. april 2013 - 17:27 #13
Man kan godt lave:

SELECT *
FROM a a1, b, a a2
WHERE a1.x=b.y AND a2.x=b.z
Avatar billede tobrukDk Novice
16. april 2013 - 17:30 #14
Prøve lige lave det for mig fordi jeg kan virkelig ikke se det for mig, overhovedet på nogle måde, jeg har aldrig sådan rigtigt forstå inner join på nogle måde. :(
Avatar billede arne_v Ekspert
17. april 2013 - 03:52 #15
JOIN maa vaere beskrevet i enhver SQL bog/tutorial.

Har du laest min guide:

http://www.eksperten.dk/guide/389

?
Avatar billede tobrukDk Novice
21. april 2013 - 16:06 #16
jeg har klart problemet.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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