Avatar billede tobrukDk Novice
16. december 2013 - 00:20 Der er 4 kommentarer og
1 løsning

problemer med at ligge i database Mysqli

Hej

Det er sådan at jeg skal lave mit eget lille besked system, men det er sådan at jeg er kommet i problem som gøre at jeg få den her:

Problemet er at den ikke vil send det indhold som jeg har skrevet i beskeden. det jeg udarbejder lige pt det er sådan at "svar" man tilbage så skal den ikke hente alle mulighed info fra alle mulig sider. f.eks at man ikke skal skrive title igen og den finder selv brugernavnet,

Alle den andre små data ting som den skal have for at kunne sende videre til person eller har du en anden god ide til hvordan jeg måske kunne læse det her?


Goood ide
eller skal jeg bygge det med session? eller skal jeg bare "drop" helt title så den bare henter besked fra over til via $_get og så køre den vej videre?

error 1: Commands out of sync; you can't run this command now


if($stmt = $this->mysqli->prepare(' SELECT id, idunik, fra, message, datoTime FROM pm WHERE id = ?' ))
            {
                $stmt->bind_param('i', $id);
                $id = $_GET['id'];
                $stmt->execute();
                $stmt->bind_result($id, $idunik, $fra, $message, $datoTime);
                while($stmt->fetch())
                {
                    if ($stm = $this->mysqli->prepare('INSERT INTO pm (idunik, title, fra, til, message, datoTime) VALUES (?, ?, ?, ?, ?, NOW())')) {
                        $stm->bind_param('issss', $idunik, $title, $fra, $til, $message);
                        $idunik = $idunik;
                        $title = $title;
                        $fra = $_SESSION["id"];
                        $til = $fra;
                        $message = $_POST["tekst"];
                       
                        header('Location: /besked/' . $_SESSION["id"] . '/');
                                               
                        $stm->execute();
                       
                       
                        $stm->close();
                    } else {
                        echo 'error 1: ' . $this->mysqli->error;
                    }
                }
                $stmt->close();
            }
            else
            {
                echo 'error 2: ' . $mysqli->error;
            }



Jeg vil også gerne del resten af sidens kode her:


//updater til at have set
        if ($stmt = $this->mysqli->prepare('UPDATE pm SET checkpm=checkpm++1 WHERE id=?')) {
            $stmt->bind_param('s', $id);
            $id = $_GET["id"];
            $stmt->execute();
            $stmt->close();
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }
        //læser indhold på siden
        if ($stmt = $this->mysqli->prepare('SELECT id, idunik, fra, message, datoTime FROM pm WHERE id = ?')) {
            $stmt->bind_param('i', $id);
            $id = $_GET['id'];
            $stmt->execute();
            $stmt->bind_result($id, $idunik, $fra, $message, $datoTime);
            while ($stmt->fetch()) {
            ?>
            <div class="pmbesked">
                <div class="left">
                <form action="#" method="post">
                    <input type="submit" name="svar" value="Svar" id="indholdcklik" class="click svarpm">
                </form>
                </div>
                <div class="right"><?php echo date("H:i - d, M - Y", strtotime($datoTime));?></div>
                <div style="clear:both;"></div>
            </div>
            <div style="min-height:150px; padding:5px 10px;">
            <?php echo $message;?>
            </div>
            <?php
            }
            $stmt->close();
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }
        if(isset($_POST["svartilbage"]))
        {
            if($stmt = $this->mysqli->prepare(' SELECT id, idunik, fra, message, datoTime FROM pm WHERE id = ?' ))
            {
                $stmt->bind_param('i', $id);
                $id = $_GET['id'];
                $stmt->execute();
                $stmt->bind_result($id, $idunik, $fra, $message, $datoTime);
                while($stmt->fetch())
                {
                    if ($stm = $this->mysqli->prepare('INSERT INTO pm (idunik, title, fra, til, message, datoTime) VALUES (?, ?, ?, ?, ?, NOW())')) {
                        $stm->bind_param('issss', $idunik, $title, $fra, $til, $message);
                        $idunik = $idunik;
                        $title = $title;
                        $fra = $_SESSION["id"];
                        $til = $fra;
                        $message = $_POST["tekst"];
                       
                        header('Location: /besked/' . $_SESSION["id"] . '/');
                                               
                        $stm->execute();
                       
                       
                        $stm->close();
                    } else {
                        echo 'error 1: ' . $this->mysqli->error;
                    }
                }
                $stmt->close();
            }
            else
            {
                echo 'error 2: ' . $mysqli->error;
            }
        }
        ?>
        <div id="indholdbeksed">
            <div class="pmbeskedsvar">
            <h5>Svar tilbage! <div id="luksamtale">(Luk igen)</div></h5>
            </div>
        <div style="min-height:150px; padding:5px 10px;">
            <form action="#" method="post" name="svar">
                <textarea name="tekst" rows="8" style="width:100%;"></textarea>
                <input type="submit" name="svartilbage" value="Svar tilbage" class="click svarpm margin">
            </form>
        </div>
        </div>
Avatar billede repox Seniormester
16. december 2013 - 00:37 #1
Din linie med:
header('Location: /besked/' . $_SESSION["id"] . '/');

Er malplaceret - den kan skabe rod i de prepared statements du har gang i da nogle nye kan være lavet, mens du sender brugeren videre inden dit script er færdigeksekveret. Derfor er dine statements "ude af sync".
Avatar billede tobrukDk Novice
16. december 2013 - 00:39 #2
Jeg har klart opgaven selv :D

der hvor jeg skrev Goood ide den brugt jeg og komme videre med den også selv :D
Avatar billede arne_v Ekspert
16. december 2013 - 01:47 #3
header er total malplaceret.

Men fejlen er vel en MySQL fejl der kommer p.g.a.:


if($stmt = $this->mysqli->prepare(' SELECT id, idunik, fra, message, datoTime FROM pm WHERE id = ?' ))
            {
                $stmt->bind_param('i', $id);
                $id = $_GET['id'];
                $stmt->execute();
                $stmt->bind_result($id, $idunik, $fra, $message, $datoTime);
                while($stmt->fetch())
                {
                    if ($stm = $this->mysqli->prepare('INSERT INTO pm (idunik, title, fra, til, message, datoTime) VALUES (?, ?, ?, ?, ?, NOW())')) {
                        $stm->bind_param('issss', $idunik, $title, $fra, $til, $message);
                        $idunik = $idunik;
                        $title = $title;
                        $fra = $_SESSION["id"];
                        $til = $fra;
                        $message = $_POST["tekst"];
                     
                        header('Location: /besked/' . $_SESSION["id"] . '/');
                                             
                        $stm->execute();


der forsoeger at udfoerer 2 queries samtidigt paa samme connection.

Det kan man ikke.

Og enten kan man omstrukturere koden eller saa kan man bare lave 2 forskellige connections.
Avatar billede repox Seniormester
16. december 2013 - 06:21 #4
#3
Jeg havde slet ikke bemærket den første forespørgsel aldrig blev eksekveret.
Avatar billede tobrukDk Novice
16. december 2013 - 07:52 #5
#repox ja det er rigtig nok omkring #1

Jeg gør bare sådan her


//updater til at have set
        if ($stmt = $this->mysqli->prepare('UPDATE pm SET checkpm=checkpm++1 WHERE id=?')) {
            $stmt->bind_param('s', $id);
            $id = $_GET["id"];
            $stmt->execute();
            $stmt->close();
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
        }
        //læser indhold på siden
        if ($stmt = $this->mysqli->prepare('SELECT id, idunik, fra, message, datoTime FROM pm WHERE id = ?')) {
            $stmt->bind_param('i', $id);
            $id = $_GET['id'];
            $stmt->execute();
            $stmt->bind_result($id, $idunik, $fra, $message, $datoTime);
            while ($stmt->fetch()) {
                $_SESSION["fra"] = $fra;
            ?>
            <div class="pmbesked">
                <div class="left">
                <form action="#" method="post">
                    <input type="submit" name="svar" value="Svar" id="indholdcklik" class="click svarpm">
                </form>
                </div>
                <div class="right"><?php echo date("H:i - d, M - Y", strtotime($datoTime));?></div>
                <div style="clear:both;"></div>
            </div>
            <div style="min-height:150px; padding:5px 10px;">
            <?php echo $message;?>
            </div>
            <?php
            }
            $stmt->close();
        } else {
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }
        if(isset($_POST["svartilbage"]))
        {
            $tal = "PM_besked" . rand();
            if ($stm = $this->mysqli->prepare('INSERT INTO pm (idunik, fra, til, message, datoTime) VALUES (?, ?, ?, ?, NOW())')) {
                $stm->bind_param('isss', $idunik, $fra, $til, $message);
                $idunik = $tal;
                $fra = $_SESSION["id"];
                $til = $_SESSION["fra"];
                $message = $_POST["tekst"];
               
                ?>
                <script language="javascript" type="text/javascript"> 
                    window.location.href = "/besked/"; 
                </script>
                <?php
                                       
                $stm->execute();
               
               
                $stm->close();
            } else {
                echo 'error 1: ' . $this->mysqli->error;
            }
        }
        ?>
        <div id="indholdbeksed">
            <div class="pmbeskedsvar">
            <h5>Svar tilbage! <div id="luksamtale">(Luk igen)</div></h5>
            </div>
        <div style="min-height:150px; padding:5px 10px;">
            <form action="#" method="post" name="svar">
                <textarea name="tekst" rows="8" style="width:100%;"></textarea>
                <input type="submit" name="svartilbage" value="Svar tilbage" class="click svarpm margin">
            </form>
        </div>
        </div>
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