Avatar billede doncarnage Nybegynder
04. juni 2009 - 19:55 Der er 4 kommentarer og
1 løsning

Hvordan ændrer jeg fra mysqli til mysql i mit script?

Godaften..

Jeg har fået implementeret et kommentar script til mine blogs, men det fungerer kun på localhost, da mit webhotel desværre ikke understøtter mysqli. Derfor lyder mit spørgsmål på hvordan jeg får scriptet omprogrammeret, så det benytter sig af almindelig mysql i stedet ?

Jeg har lige udplukket fra det færdige script her:

------------------------------------------------------------------------------
blogs.display.php
------------------------------------------------------------------------------

<?php
session_start();
?>
<?php
$mysqli = new mysqli('localhost', 'root', '', 'mindatabase');
include_once '_thread.php';

$thread = new thread();
$res = $thread->getThread($_GET['id']);

if(isset($_POST['reply'])){
    $replyID = $thread->insertReply($_POST['replyID'], $_POST['id'], $_POST['username'], $_POST['userid'], $_POST['parentuserid'], $_POST['text']);
    if(is_numeric($replyID)){
        header("Location: blogs.display.php?id=".$_GET['id']."");
    }
}
?>



////////////// BLOGS HER //////////////////
     
    <?php
    include_once('includes/config.sql.php');
    ?>
     
      <?php         
      $query = mysql_query("SELECT * FROM blogs WHERE blog_id='".$_GET['id']."'") or die(mysql_error());
      $querytime = mysql_query("SELECT DATE_FORMAT(time, '%d.%m.%Y') as time FROM blogs WHERE blog_id=".$_GET['id']."") or die(mysql_error());
   
      while ($row = mysql_fetch_assoc($query) AND $rowtime = mysql_fetch_assoc($querytime)) {
     
        echo '<div class="textblogtitle2">';
        echo '<a href=blogs.display.php?id=';
        echo nl2br(htmlspecialchars($row['blog_id']));
        echo ' class="alternative">';
        echo nl2br(htmlspecialchars($row['title']));
        echo '</a>';
        echo '</div>';
       
        echo '<div class="textblogtime2">';
        echo '<a href=profil.php?id=';
        echo nl2br(htmlspecialchars($row['userid']));
        echo ' class="alternative">';
        echo nl2br(htmlspecialchars($row['author']));
        echo '</a> (';
        echo $rowtime['time'];
        echo ')</div>';
           
        echo '<br />';
        echo nl2br(htmlspecialchars($row['text']));
     
      }
      ?>
     
     
     
////////////// KOMMENTARER HER //////////////////     


        <?php echo '<div class="containcomments">'.$thread->getThreadHTML($res).'</div>'; ?>
       
        <a id="reply"></a>
   
   
   
////////////// SKRIV KOMMENTAR HER //////////////////


        <?php
     
        echo '<form method="post" action="">';
       
        if(isset($_GET['no']) && $_GET['replyTo'] > 0){
        echo '&nbsp;Svar til #'.$_GET['no'].' | <a href=blogs.display.php?id='.$_GET['id'].' class="alternative">Fortryd</a><br /><br />';
        }else{
            $_GET['replyTo'] = 0;
        }
       
        if(!isset($_GET['puserid'])){
       
        $query = mysql_query("SELECT * FROM blogs WHERE blog_id='".$_GET['id']."'") or die(mysql_error());
   
        while ($row = mysql_fetch_assoc($query)) {
     
            $_GET['puserid'] = $row['userid'];
           
          }
        }

        echo '<input type="hidden" name="reply" value="1" />';
        echo '<input type="hidden" name="userid" value="'.$_SESSION['SESS_MEMBER_ID'].'">';
        echo '<input type="hidden" name="username" value="'.$_SESSION['SESS_USERNAME'].'">';
        echo '<input type="hidden" name="parentuserid" value="'.$_GET['puserid'].'">';
        echo '<input type="hidden" name="id" value="'.$_GET['id'].'">';
        echo '<input type="hidden" name="replyID" value="'.$_GET['replyTo'].'">';
        echo '<textarea name="text" rows="10" cols="62" class="input3"></textarea><br/>';
        echo '<div class="text5">';
        echo '<input type="image" name="send" value="Gem" class="input" src="images/buttonpost.png" />';
        echo '</div></form>';
       
       
        ?>
     

------------------------------------------------------------------------------
_thread.php
------------------------------------------------------------------------------

<?php
class thread

    public $aCommentId = array(0);
    public $aThread = array();
 

    public function getThreadHTML($aThread, $nLevel=0, $childCount=0) {
        $aRet = array('<ul>');
        if(count($aThread)){
        for ($i=0; $i<count($aThread[$nLevel]); $i++) {
            $style = '';
            if($aThread[$nLevel][$i]->isChild > 0) $style = 'angle';
            if($childCount > 1) $style = 'line_angle';
         
                $id    = $aThread[$nLevel][$i]->id;     
                $no = $aThread[$nLevel][$i]->no;   
         
                $aRet[] = sprintf('
            <li class="%1$s">
              <a id="%5$d" />
                <div class="message">
                    <div class="kommentaroverskrift">
                    <a href="#%5$d">#%2$d</a>
                    </div>
                    <div class="kommentardato">%7$s</div>
                    <br /><br />%4$s<br /><br />
                    <div class="kommentarforfatter">
                    <a href="profil.php?id=%8$d" class="alternative">%3$s</a></div>
                    <div class="kommentarsvar">
                    <a href="?id=%6$d&replyTo=%5$d&puserid=%8$d&no=%2$d#reply">
                      <img src="images/buttonsvar.png" alt="" border="0" />
                    </a>                 
                    </div>
                </div>', $style, $no, $aThread[$nLevel][$i]->author, $aThread[$nLevel][$i]->text, $id, $aThread[$nLevel][$i]->blog_id, $aThread[$nLevel][$i]->time, $aThread[$nLevel][$i]->userid, $aThread[$nLevel][$i]->parentuserid);
         
            $childCount--;
            if (isset($aThread[$id]) && is_array($aThread[$id])) {
                $aRet[] = $this->getThreadHTML($aThread, $id, $aThread[$nLevel][$i]->childCount).'</li>';
            }
            else $aRet[] = '</li>';
        }
        }
            return implode('', $aRet).'</ul>';
    }
    public function getThread($id) {
        global $mysqli;
      $sql = sprintf("SELECT t.id, t.parent_id, t.author, t.userid, t.text, DATE_FORMAT(t.time, '%%d.%%m.%%Y kl. %%H:%%i') as time, count(t2.parent_id) as childCount, count(t3.id) as isChild, t.blog_id
                            FROM blogs_comments AS t
                LEFT JOIN blogs_comments AS t2 ON (t.id=t2.parent_id)
                            AND t2.blog_id = t.blog_id
                LEFT JOIN blogs_comments AS t3 ON (t3.id=t.parent_id)
                        WHERE t.blog_id = '%d'
                    GROUP BY t.id",$id);
                 
        if($result = $mysqli->query($sql)){
            $i = 1;
            while ($row = $result->fetch_object()) {
                $row->no = $i++;
                $this->aCommentId[] = $row->id; 
                if (isset($this->aThread[$row->parent_id]) && !is_array($this->aThread[$row->parent_id])) $this->aThread[$row->parent_id] = array();
                $this->aThread[$row->parent_id][] = $row;
            }
        }else{
            die($mysqli->error);
        }
    return $this->aThread;
    }
    function insertReply($replyID, $id, $author, $userid, $parentuserid, $text){
        global $mysqli;
        $sql = "INSERT INTO blogs_comments (parent_id, blog_id, author, userid, parentuserid, text, time) VALUES (?, ?, ?, ?, ?, ?, NOW())";
        if($stmt = $mysqli->prepare($sql)){
            $stmt->bind_param('iissss', $replyID, $id, $author, $userid, $parentuserid, $text);
            $stmt->execute();
            return $stmt->insert_id;
        }else{
            return $mysqli->error; 
        }
        //return true;
    }
}
?>



Jeg har selv prøvet ved at lave om på $mysqli variablen ved at gøre følgende:

$mysql = mysql_connect('xxx', 'xxx', 'xxx');
mysql_select_db('xxx', $mysql);

og derefter ændre $mysqli variablerne til $mysql, men så får jeg bare fejlen:
Fatal error: Call to a member function query() on a non-object in _thread.php on line 56

Så derfor er jeg selv lidt på bar fod med hvordan jeg løser problemet... Håber meget i kan hjælpe med det :/
Avatar billede repox Seniormester
04. juni 2009 - 20:04 #1
Det er desværre noget omsonst kode du har. :/

Du har mange, mange, steder du skal have rettet til for at opnå overgangen til mysql.

Der sidder garanteret en venlig sjæl herinde som vil gøre det UB, men umiddelbart virker det som en opgave. Mest fordi du har meget kluntet kode og denne tråd vil blive overfyldt med indlæg om små tilpasninger og rettelser og hacks for at få din kode til at fungere.

Men igen, her er sikkert en som vil være mere end villig til at hjælpe dig.

Mit råd til dig er at tage det linie for linie. Jeg kan se du er begyndt; det er ikke alt der er mysqli.
Avatar billede doncarnage Nybegynder
04. juni 2009 - 20:10 #2
Argh, nedern :/ Jeg skal gerne give resten af mine points, hvis det kan lade sig gøre heh..

Jeg ville også helst selv have bygget det op fra bunden af på en lidt mere "simpel" måde, men det blev hurtigt for uoverskueligt og svært for mig (da jeg stadig er forholdsvis ny indenfor sproget).. Derfor blev jeg anbefalet et script herinde som jeg så har bygget videre på i nogle dage nu.. Men det har så også resulteret i at jeg har meget svært ved at se hvor der skal ændres, da jeg ikke selv har kodet det fra bunden af :/
Avatar billede erikjacobsen Ekspert
04. juni 2009 - 20:11 #3
Øh, dit webhotel understøtter ikke mysqli ??  Findes den slags?

Hvad om du spurgte dem, med henvisning til at de er håbløst bagefter, og så ellers overvejer at skifte, hvis det ikke hjælper.
Avatar billede doncarnage Nybegynder
04. juni 2009 - 20:27 #4
Ja åbenbart ;) Det er web10 det drejer sig om..

Spurgte om de kunne opdatere versionen af mysql, da jeg havde en side, hvor jeg legede med mysqli.. Dertil svarede de så:

" Vi understytter ikke mysqli, kun mysql. Beklager "

Til den side jeg er i gang med vil jeg også ud og ha et mere stabilt webhotel, da der nok også kommer en del mere trafik end der plejer, men har endnu ikke besluttet mig for hvilket.. Og jeg var ikke lige klar over om det var generelt at de færreste webhoteller understøttede mysqli eller hvordan og hvorledes.. Så derfor tænkte jeg at det mest "optimale" ville være at lave kode scriptet om - men det er vidst en større historie :S
Avatar billede doncarnage Nybegynder
04. juni 2009 - 23:53 #5
Takket være en utrolig hjælpsom bruger ved navn fant0mas har jeg nu fået rettet scriptet til ;)

Da han ikke ønsker points trækker jeg dem bare tilbage...
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