Avatar billede Morten Professor
11. november 2015 - 14:43 Der er 13 kommentarer og
1 løsning

Select mysqli problem

Hej Eksperter

Har et problem med at få vist teksten.

Får fejl koden:
Notice: Undefined variable: _id in /var/www/vhosts/flueopskrifter.dk/webshop.flueopskrifter.dk/admin/admin_artikel_update.php on line 155


<?php
      function artikel_Select($hellestrik){
          $_id=0;
/* Opret et prepared statement */
if ($stmt = $hellestrik1->prepare('SELECT `id` `overskrift`, `tekst`, `datetime`, `navn` FROM `tbl_artikel` WHERE `id` = '.$_GET['id'])) {
    /* Bind parametre */
    $stmt->bind_param('i', $id);

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

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

    /* Bind resultatet */
    $stmt->bind_result($id, $overskrift, $tekst, $datetime, $navn);

    /* Hent rækker og udskriv data */
    while ($stmt->fetch()) {
        echo '<form id="artikel" name="artikel" method="get" action="">';
        echo '<label for="overskrift">';
        echo '</label>';
        echo '<input name="overskrift" type="text" id="overskrift" value="'.$overskrift.'" size="40" />';
        echo '<br />';
        echo '<label for="tekst">';
        echo '</label>';
        echo '<textarea name="tekst" id="tekst" cols="45" rows="5">'.$tekst.'</textarea>';
        echo '<br />';
        echo '<label for="dato">';
        echo '</label>';
        echo '<input name="dato" type="text" id="dato" value="'.$datetime.'" size="40" />';
        echo '<br />';
        echo '<label for="navn">';
        echo '</label>';
        echo '<input name="navn" type="text" id="navn" value="'.$navn.'" size="40" />';
        echo '<br />';
        echo '<input name="button" type="submit" class="knap" id="button" value="Opdater artikel" />';
      echo '</form>';}

    /* Luk statement */

} else {
    /* Der er opstået en fejl */
    echo 'Fejl på server' . $hellestrik->error;
    $_id = $id;   
        }
    }
    return $_id;   

$test = artikel_Select($hellestrik);
echo $test;
?>


Med venlig hilsen
Morten
Avatar billede Morten Professor
11. november 2015 - 14:47 #1
$hellestrik1 = $hellestrik
Avatar billede olsensweb.dk Ekspert
11. november 2015 - 14:59 #2
hvad står der i linje  155 ??

else {
    /* Der er opstået en fejl */
    echo 'Fejl på server' . $hellestrik->error;
    $_id = $id;   
}

hvordan skal $_id få en værdi når sql ikke kan udføres ??, og dermed bliver din $_GET ikke udført

ret til
else {
    /* Der er opstået en fejl */
    echo 'Fejl på server' . $hellestrik->error;
    $_id = -1;   
}


alternativt tag id over som parameter
Avatar billede olsensweb.dk Ekspert
11. november 2015 - 15:03 #3
> return $_id;
ligger den ikke uden for din function ??
Avatar billede Morten Professor
11. november 2015 - 15:03 #4
Det hjalp, på fejlen.
Men ingen tekst kommer
Avatar billede Morten Professor
11. november 2015 - 15:17 #5
Skal det være sådan

class="knap" id="button" value="Opdater artikel" />';
      echo '</form>';}

    /* Luk statement */
    $_id = $id;
return $_id = -1;
} else {
    /* Der er opstået en fejl */
    echo 'Fejl på server' . $hellestrik->error; 
        }
    }
 

Så kommer den med
Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /var/www/vhosts/flueopskrifter.dk/webshop.flueopskrifter.dk/admin/admin_artikel_update.php on line 114 Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in /var/www/vhosts/flueopskrifter.dk/webshop.flueopskrifter.dk/admin/admin_artikel_update.php on line 123
Avatar billede olsensweb.dk Ekspert
11. november 2015 - 15:23 #6
kan du ikke lægge nogle test data (sql dump af tbl_artikel)

burde dette
WHERE `id` = '.$_GET['id']
ikke være
WHERE `id` = ?
du binder den længere nede

#5
else {
        /* Der er opstået en fejl */
        echo 'Fejl på server' . $hellestrik->error;
        $_id = -1;   
    }
    return $_id;   
}
Avatar billede Morten Professor
11. november 2015 - 15:40 #7
Så kommer den med

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in /var/www/vhosts/flueopskrifter.dk/webshop.flueopskrifter.dk/admin/admin_artikel_update.php on line 123

:(
Avatar billede olsensweb.dk Ekspert
11. november 2015 - 15:57 #8
(utested)
   
function artikel_Select($hellestrik) {
    $_id = 0;
    /* Opret et prepared statement */
    if ($stmt = $hellestrik->prepare('SELECT `id` `overskrift`, `tekst`, `datetime`, `navn` FROM `tbl_artikel` WHERE `id` = ?' )) {
        /* Bind parametre */
        $stmt->bind_param('i', $id);

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

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

        /* Bind resultatet */
        $stmt->bind_result($id, $overskrift, $tekst, $datetime, $navn);

        /* Hent rækker og udskriv data */
        while ($stmt->fetch()) {
            echo '<form id="artikel" name="artikel" method="get" action="">';
            echo '<label for="overskrift">';
            echo '</label>';
            echo '<input name="overskrift" type="text" id="overskrift" value="' . $overskrift . '" size="40" />';
            echo '<br />';
            echo '<label for="tekst">';
            echo '</label>';
            echo '<textarea name="tekst" id="tekst" cols="45" rows="5">' . $tekst . '</textarea>';
            echo '<br />';
            echo '<label for="dato">';
            echo '</label>';
            echo '<input name="dato" type="text" id="dato" value="' . $datetime . '" size="40" />';
            echo '<br />';
            echo '<label for="navn">';
            echo '</label>';
            echo '<input name="navn" type="text" id="navn" value="' . $navn . '" size="40" />';
            echo '<br />';
            echo '<input name="button" type="submit" class="knap" id="button" value="Opdater artikel" />';
            echo '</form>';
        }

        /* Luk statement */
    } else {
        /* Der er opstået en fejl */
        echo 'Fejl på server' . $hellestrik->error;
        $_id = -1;
    }
    return $_id;
}
Avatar billede Morten Professor
11. november 2015 - 16:40 #9
Den siger:

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in /var/www/vhosts/flueopskrifter.dk/webshop.flueopskrifter.dk/admin/admin_artikel_update.php on line 123

Jeg forstår det virkelig ikke, ser det da ikke rigtig nok ud.
Det var derfor jeg var nød til at spørger.
Avatar billede olsensweb.dk Ekspert
11. november 2015 - 16:44 #10
mangler der ikke et komma efter id ?? (jo)

if ($stmt = $hellestrik->prepare('SELECT `id` `overskrift`, `tekst`, `datetime`, `navn` FROM `tbl_artikel` WHERE `id` = ?' )) {

skal da se sådan ud
   
if ($stmt = $hellestrik->prepare('SELECT `id`, `overskrift`, `tekst`, `datetime`, `navn` FROM `tbl_artikel` WHERE `id` = ?' )) {
Avatar billede Morten Professor
11. november 2015 - 16:50 #11
Så blev det løst

$stmt->bind_result($overskrift, $tekst, $datetime, $navn);

istedet for $stmt->bind_result($id, $overskrift, $tekst, $datetime, $navn);

Du må meget gerne ligge et svar.
Avatar billede Morten Professor
11. november 2015 - 16:53 #12
Ja self. hahaha ups har vist stirret mig blind på det.

Du må meget gerne ligge et svar :o)

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
11. november 2015 - 17:16 #13
jeg ville ligge formateringen uden for functionen, så kan functionen også bruges mere generalt
(utested)
   
function artikel_Read($conn, $id) {
    $ar=array();
    /* Opret et prepared statement */
    if ($stmt = $conn->prepare('SELECT `id`, `overskrift`, `tekst`, `datetime`, `navn` FROM `tbl_artikel` WHERE `id` = ? LIMIT 1' )) {
        /* Bind parametre */
        $stmt->bind_param('i', $id);   
        /* Eksekver forespørgslen */
        $stmt->execute();
        /* Bind resultatet */
        $stmt->bind_result($id, $overskrift, $tekst, $datetime, $navn);
        /* Hent rækker og udskriv data */       
        while ($stmt->fetch()) {
            // der er kun 1 række, hvis der er nogle
            $ar = array("id"=>$id, "overskrift"=>$overskrift, "tekst"=>$tekst, "datetime"=>$datetime, "navn"=>$navn);         
        }
        /* Luk statement */
    }
    else {
        /* Der er opstået en fejl */
        echo 'Fejl på server' . $conn->error;
    }
    return $ar;
}


$info=artikel_Read($hellestrik, $_GET['id']);
if(count($info)>0 ){
echo '<form id="artikel" name="artikel" method="get" action="">';
            echo '<label for="overskrift">';
            echo '</label>';
            echo '<input name="overskrift" type="text" id="overskrift" value="' . $info['overskrift'] . '" size="40" />';
            echo '<br />';
            echo '<label for="tekst">';
            echo '</label>';
            echo '<textarea name="tekst" id="tekst" cols="45" rows="5">' . $info['tekst'] . '</textarea>';
            echo '<br />';
            echo '<label for="dato">';
            echo '</label>';
            echo '<input name="dato" type="text" id="dato" value="' . $info['datetime'] . '" size="40" />';
            echo '<br />';
            echo '<label for="navn">';
            echo '</label>';
            echo '<input name="navn" type="text" id="navn" value="' . $info['navn'] . '" size="40" />';
            echo '<br />';
            echo '<input name="button" type="submit" class="knap" id="button" value="Opdater artikel" />';
            echo '</form>';   
}
Avatar billede Morten Professor
11. november 2015 - 19:21 #14
Mange tak den vil jeg tage med mig, har lagt den ind i select model.

Og man tak for hjælpen endnu engang :o)

Med venlig hilsen
Morten
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