Avatar billede tobrukDk Novice
12. oktober 2012 - 03:35 Der er 30 kommentarer og
1 løsning

mysql til mysqli

Hej

En af min venner spørg mig om jeg vil hjælp ham videre med sin side da han kun mangler den her kode så er han færdig med mysqli. han har selv bare resten af siden kode til mysqli, men han har love mange problemer med det her så han spørger mig om jeg havde lyst men dog er jeg ikke 100% good til mysqli og php så jeg vil høre om i kun hjælp min ven videre men det vil også betyde meget for mig hvis i har lyst til det her!


<?php
define('SB_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/test/');
class Shoutbox
{
    private $_options = array(
        'db_server'        => 'localhost',
        'db_charset'        => 'utf8',
        'db_user'          => 'xxx',
        'db_password'      => 'xxx',
        'db_name'          => 'xxx',
        'db_prefix'        => 'chat_',
        'charset'          => 'utf-8',
        'heading'          => 'xxx',
        'refresh'          => 1.0,
        'spam_protect'      => 1,
        'enable_bbcode'    => true,
        'enable_smilies'    => true
    );
    private $_db = null;
    public function __construct($options = null)
    {
        if (!is_null($options)) {
            $this->_options = array_merge($this->_options, $options);
        }
       
        $this->disable_magic_quotes();
        $this->connect_database();
    }
    private function connect_database()
    {
        $this->_db = @mysql_connect($this->_options['db_server'], $this->_options['db_user'], $this->_options['db_password'], false);
        if ($this->_db === false) {
            throw new Exception('Unable to connect to the database, please check your configuration.');
        }
        if (@mysql_select_db($this->_options['db_name'], $this->_db) === false) {
            throw new Exception('Unable to select the database, please check your configuration.');
        }
        mysql_query('SET NAMES "' . $this->_options['db_charset'] . '"', $this->_db);
    }
    private function disable_magic_quotes()
    {
        if (get_magic_quotes_gpc()) {
            $_GET    = $this->remove_magic_quotes($_GET);
            $_POST  = $this->remove_magic_quotes($_POST);
            $_COOKIE = $this->remove_magic_quotes($_COOKIE);
            @ini_set('magic_quotes_gpc', 0);
        }
        if (get_magic_quotes_runtime()) {
            set_magic_quotes_runtime(false);
        }
    }
    private function remove_magic_quotes($data)
    {
        foreach ($data as $key => $value) {
            if (is_array($value)) {
                $data[$key] = $this->remove_magic_quotes($value);
            }
            else {
                $data[$key] = stripslashes($value);
            }
        }
       
        return $data;
    }
    public function db_insert($rows, $data)
    {
        $mysql_row = '';
        foreach ($rows as $row) {
            $mysql_row .= '`' . $row . '`, ';
        }
        $mysql_row = mb_substr($mysql_row, 0, -2, $this->_options['charset']);
        $mysql_data = '';
        foreach ($data as $value) {
            $mysql_data .= '"' . $value . '", ';
        }
        $mysql_data = mb_substr($mysql_data, 0, -2, $this->_options['charset']);
        mysql_query(
            'INSERT INTO `' . $this->_options['db_prefix'] . 'shouts` (' . $mysql_row . ') VALUES (' . $mysql_data . ')',
            $this->_db
        );
    }
    public function db_get_messages($last_id)
    {
        settype($last_id, 'integer');
        if (empty($last_id)) {
            $result = mysql_query('SELECT COUNT(`id`)-10 FROM `' . $this->_options['db_prefix'] . 'shouts`');
            $last_id = mysql_result($result, 0); // FEHLER
        }
        $mysql_string = '';
        $result = mysql_query(
            'SELECT `id`, `name`, `message`, `time` FROM `' . $this->_options['db_prefix'] . 'shouts` WHERE `id` > "' . (int) $last_id . '" ORDER BY `id` ASC',
            $this->_db
        );
        while ($row = mysql_fetch_object($result)) {
            if ($row->name == 'Bot') {
                $mysql_string .= '.append(\'<div id="' . $row->id . '" class="bot"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
                                '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
            }
            else {
                $mysql_string .= '.append(\'<div id="' . $row->id . '"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
                                '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
            }
        }
        mysql_free_result($result);
        return $mysql_string;
    }
    public function deal_output($data)
    {
        return $this->replace_smilies($this->convert_linebreaks($this->set_wordwrap($this->bbcode($this->clean_input($data)))));
    }
    public function db_clean($data)
    {
        return mysql_real_escape_string($data, $this->_db);
    }
    public function clean_input($data)
    {
        return trim(htmlspecialchars(mb_convert_encoding($data, $this->_options['charset'], mb_detect_encoding($data)), ENT_QUOTES, $this->_options['charset'], true));
    }
    public function bbcode($data)
    {
        if ($this->_options['enable_bbcode']) {
            // Replace
            $data = preg_replace('/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $data);
            // Replace
            $data = preg_replace('/\[i\](.*?)\[\/i\]/', '<i>$1</i>', $data);
            // Replace
            $data = preg_replace('/\+).*\](.*)\[\/url\]/', '<a href="$1" target="_blank" rel="nofollow">$2</a>', $data);
            // Replace [url]

            $data = preg_replace('/\[url\](.*)\[\/url\]/', '<a href="$1" target="_blank" rel="nofollow">$1</a>', $data);
        }
       
        return $data;
    }
    private function replace_smilies($text)
    {
        if ($this->_options['enable_smilies']) {
            $image_tag = array('<img src="media/smilies/', '" alt="" />');
            $smilies = array(
                ':-)' => $image_tag[0] . '1.png' . $image_tag[1],
                ';-)' => $image_tag[0] . '2.png' . $image_tag[1],
                ':)'  => $image_tag[0] . '1.png' . $image_tag[1],
                ';)'  => $image_tag[0] . '2.png' . $image_tag[1],
                ':D'  => $image_tag[0] . '3.png' . $image_tag[1],
                ':-D' => $image_tag[0] . '3.png' . $image_tag[1],
                ':P'  => $image_tag[0] . '4.png' . $image_tag[1],
                ';P'  => $image_tag[0] . '5.png' . $image_tag[1],
                ';D'  => $image_tag[0] . '6.png' . $image_tag[1],
                ':('  => $image_tag[0] . '31.png' . $image_tag[1],
                ':-(' => $image_tag[0] . '31.png' . $image_tag[1],
                '=)'  => $image_tag[0] . '7.png' . $image_tag[1],
                '=D'  => $image_tag[0] . '3.png' . $image_tag[1],
                '=P'  => $image_tag[0] . '4.png' . $image_tag[1],
                'xD'  => $image_tag[0] . '8.png' . $image_tag[1],
                ':S'  => $image_tag[0] . '17.png' . $image_tag[1],
                'xS'  => $image_tag[0] . '29.png' . $image_tag[1],
                ':O'  => $image_tag[0] . '14.png' . $image_tag[1],
                '=O'  => $image_tag[0] . '14.png' . $image_tag[1],
                '=/'  => $image_tag[0] . '20.png' . $image_tag[1],
                '=]'  => $image_tag[0] . '21.png' . $image_tag[1],
                '$_$' => $image_tag[0] . '26.png' . $image_tag[1],
                'o_O' => $image_tag[0] . '28.png' . $image_tag[1]
            );
            $text = str_ireplace(array_keys($smilies), array_values($smilies), $text);
        }
        return $text;
    }
    private function convert_linebreaks($text)
    {
        $text = str_replace("\n", '', nl2br($text));
        return $text;
    }
    private function set_wordwrap($text)
    {
        return wordwrap($text, 88, "\n", true);
    }
    public function get_heading()
    {
        return $this->_options['heading'];
    }
    public function get_charset()
    {
        return $this->_options['charset'];
    }
    public function get_refresh_rate()
    {
        return (float) $this->_options['refresh'];
    }
    public function get_spam_protection_rate()
    {
        return (int) $this->_options['spam_protect'];
    }
    public function is_ajax()
    {
        return ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') ? true : false;
    }
    protected function __clone()
    {}
}
?>


det vil være super hvis du gad at hjælp min ven til at han fik klart det om til mysqli frem for mysql.


Jeg tør ikke at lege med 200 linje kode da jeg ikke kan overhoved 70% kode og funktioner af koden.

Det vil betyde meget for mig og min ven hvis du vil hjælp ham videre dog ha han selv bygge siden om fra mysql til mysqli, dog er det her bare hans side kode. men jeg love ham at kigge på den men jeg vil ikke kast mig ud i det overhovedet!
Avatar billede stalle Nybegynder
12. oktober 2012 - 04:55 #1
Hej,

Inden du kaster håndklædet i ringen, synes jeg du skal prøve at tage et nærmere kig på koden og se om ikke det alligevel er en overkommelig opgave.

Du siger Jeg tør ikke at lege med 200 linje kode da jeg ikke kan overhoved 70% kode og funktioner af koden.

Efter 30 sekunder i koden, kan jeg se at det er under halvdelen der har noget med mysql at gøre.
Når man så har konstateret det, er det "bare" og tage det bid efter bid.
Det dejlige med det kode er, at det er delt op i en masse funktioner, og så er det jo bare og tage dem én efter én.


<?php
define('SB_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/test/');
class Shoutbox
{
  private function connect_database()
  {
    $this->_db = @mysql_connect($this->_options['db_server'], $this->_options['db_user'], $this->_options['db_password'], false);
    if ($this->_db === false) {
      throw new Exception('Unable to connect to the database, please check your configuration.');
    }
    if (@mysql_select_db($this->_options['db_name'], $this->_db) === false) {
      throw new Exception('Unable to select the database, please check your configuration.');
    }
    mysql_query('SET NAMES "' . $this->_options['db_charset'] . '"', $this->_db);
  }

  public function db_insert($rows, $data)
  {
    $mysql_row = '';
    foreach ($rows as $row) {
      $mysql_row .= '`' . $row . '`, ';
    }
    $mysql_row = mb_substr($mysql_row, 0, -2, $this->_options['charset']);
    $mysql_data = '';
    foreach ($data as $value) {
      $mysql_data .= '"' . $value . '", ';
    }
    $mysql_data = mb_substr($mysql_data, 0, -2, $this->_options['charset']);
    mysql_query(
    'INSERT INTO `' . $this->_options['db_prefix'] . 'shouts` (' . $mysql_row . ') VALUES (' . $mysql_data . ')',
    $this->_db
    );
  }

  public function db_get_messages($last_id)
  {
    settype($last_id, 'integer');
    if (empty($last_id)) {
      $result = mysql_query('SELECT COUNT(`id`)-10 FROM `' . $this->_options['db_prefix'] . 'shouts`');
      $last_id = mysql_result($result, 0); // FEHLER
    }
    $mysql_string = '';
    $result = mysql_query(
    'SELECT `id`, `name`, `message`, `time` FROM `' . $this->_options['db_prefix'] . 'shouts` WHERE `id` > "' . (int) $last_id . '" ORDER BY `id` ASC',
    $this->_db
    );
    while ($row = mysql_fetch_object($result)) {
      if ($row->name == 'Bot') {
        $mysql_string .= '.append(\'<div id="' . $row->id . '" class="bot"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
        '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
      }
      else {
        $mysql_string .= '.append(\'<div id="' . $row->id . '"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
        '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
      }
    }
    mysql_free_result($result);
    return $mysql_string;
  }
  public function db_clean($data)
  {
    return mysql_real_escape_string($data, $this->_db);
  }
}
?>


Det kan så deles op i bidderne:


  private function connect_database()
  {
    $this->_db = @mysql_connect($this->_options['db_server'], $this->_options['db_user'], $this->_options['db_password'], false);
    if ($this->_db === false) {
      throw new Exception('Unable to connect to the database, please check your configuration.');
    }
    if (@mysql_select_db($this->_options['db_name'], $this->_db) === false) {
      throw new Exception('Unable to select the database, please check your configuration.');
    }
    mysql_query('SET NAMES "' . $this->_options['db_charset'] . '"', $this->_db);
  }



  public function db_insert($rows, $data)
  {
    $mysql_row = '';
    foreach ($rows as $row) {
      $mysql_row .= '`' . $row . '`, ';
    }
    $mysql_row = mb_substr($mysql_row, 0, -2, $this->_options['charset']);
    $mysql_data = '';
    foreach ($data as $value) {
      $mysql_data .= '"' . $value . '", ';
    }
    $mysql_data = mb_substr($mysql_data, 0, -2, $this->_options['charset']);
    mysql_query(
    'INSERT INTO `' . $this->_options['db_prefix'] . 'shouts` (' . $mysql_row . ') VALUES (' . $mysql_data . ')',
    $this->_db
    );
  }



  public function db_get_messages($last_id)
  {
    settype($last_id, 'integer');
    if (empty($last_id)) {
      $result = mysql_query('SELECT COUNT(`id`)-10 FROM `' . $this->_options['db_prefix'] . 'shouts`');
      $last_id = mysql_result($result, 0); // FEHLER
    }
    $mysql_string = '';
    $result = mysql_query(
    'SELECT `id`, `name`, `message`, `time` FROM `' . $this->_options['db_prefix'] . 'shouts` WHERE `id` > "' . (int) $last_id . '" ORDER BY `id` ASC',
    $this->_db
    );
    while ($row = mysql_fetch_object($result)) {
      if ($row->name == 'Bot') {
        $mysql_string .= '.append(\'<div id="' . $row->id . '" class="bot"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
        '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
      }
      else {
        $mysql_string .= '.append(\'<div id="' . $row->id . '"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
        '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
      }
    }
    mysql_free_result($result);
    return $mysql_string;
  }



  public function db_clean($data)
  {
    return mysql_real_escape_string($data, $this->_db);
  }


Jeg synes helt sikkert i skal prøve og kaste jer ud i og få konverteret koden selv.
Det vil uden tvivl også styrke jeres evne til at arbejde korrekt med mysqli fremadrettet.
Avatar billede tobrukDk Novice
12. oktober 2012 - 05:05 #2
Så det som du har skrevet i den store kode eller den første det er kun det som du mener jeg skal have med eller hvad?
Avatar billede tobrukDk Novice
12. oktober 2012 - 05:07 #3

private function connect_database()
    {
        $mysqli_db = new mysqli("localhost", "xxx", "xxx", "xxx");

        if (mysqli_connect_errno()) {
            echo 'Der opstod en fejl ved forbindelsen: ' . mysqli_connect_error();
            exit();
        }
        mysqli_set_charset($mysqli, "utf8");
    }


tænker du sådan her?
Avatar billede stalle Nybegynder
12. oktober 2012 - 05:19 #4
Den store klump er alt det jeg mener har med mysql at gøre, og derfor det eneste der skal ændres.

De mindre klumper er blot for at gøre det mere overskueligt og få rettet til.

Så længe du får lavet klumperne, så de benytter mysqli korrekt, så skal du nok få det til at virke.
Avatar billede tobrukDk Novice
12. oktober 2012 - 05:33 #5
okay, jeg vil lige arbejde lidt videre på det i morgen/i dag (det er jo en ny dag så) jeg arbejder videre på det når jeg er oppe igen :)
Avatar billede tobrukDk Novice
12. oktober 2012 - 09:57 #6
Hvordan skal jeg bygge den her om til mysqli ?


if (empty($last_id)) {
      $result = mysql_query('SELECT COUNT(`id`)-10 FROM `' . $this->_options['db_prefix'] . 'shouts`');
      $last_id = mysql_result($result, 0); // FEHLER
    }
Avatar billede olsensweb.dk Ekspert
13. oktober 2012 - 20:26 #7
#3
private function connect_database(){
        $mysqli_db = new mysqli("localhost", "xxx", "xxx", "xxx");
        if (mysqli_connect_errno()) {
            echo 'Der opstod en fejl ved forbindelsen: ' . mysqli_connect_error();
            exit();
        }
        // på hvilke connection sætter du charset her ??
        mysqli_set_charset($mysqli, "utf8");
        // skulle være denne
        // mysqli_set_charset($mysqli_db, "utf8");
       
        // hvordan bruger du din connection uden for functionen ??
        // skal functionen retunerer en connection, eller har du en variabel i din class der får værdien ?

       
        // return $mysqli_db;
        // $this->conn=$mysqli_db;
    }


#6
det nemme svar er: set [i]i[/b] på alle mysql_xxxx functionerne så de bliver til mysqli_xxxx, det virker for 95% af functionerne.
en af dem der er lavet om er  mysql_query('SELECT der bliver til  mysqli_query($conn,'SELECT, dvs før var connection parameteren parameter 2 og valgfri, nu er den parameter 1 og påkrævet
så er API mysqli men det er stadig "Procedural style", du bør dog senere lave det om til "Object oriented style", og gerne med "Prepared Statements"
Avatar billede tobrukDk Novice
13. oktober 2012 - 23:06 #8
Hvad mener du sådan helt med det der?
Avatar billede olsensweb.dk Ekspert
14. oktober 2012 - 01:22 #9
hvilke del af svaret forstod du ikke ??
det til #3 eller #6
>det nemme svar er: set i på alle mysql_xxxx functionerne så de bliver til mysqli_xxxx, det virker for 95% af functionerne.

som stalle skriver tag en function af gangen.

lav et lille test program og en test db så du kan teste classen.
Avatar billede tobrukDk Novice
14. oktober 2012 - 04:09 #10
så du mener at jeg skal bare skriver mysqli i stede for mysql og tag en af gang og en efter en osv.. og blive ved til jeg er færdig :)
Avatar billede tobrukDk Novice
14. oktober 2012 - 04:29 #11
#9 det min ven siger til mig lige nu det er at han skal have lavet en chat. men så har jeg sådan søge lidt rundt for at finde noget som er lidt mere nemt.

og jeg fandt den her
http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-simple-web-based-chat-application/


<div id="wrapper_chat">
            <div id="menu_chat"> 
                <p class="welcome">Velkommen til <b><?php echo $_SESSION["brugernavn"]; ?></b></p>
                <p class="logout"><a id="exit" href="#">Exit Chat</a></p> 
                <div style="clear:both"></div> 
            </div> 
            <div id="chatbox">
            <?php 
            if(file_exists("log.html") && filesize("log.html") > 0){ 
                $handle = fopen("log.html", "r"); 
                $contents = fread($handle, filesize("log.html")); 
                fclose($handle); 
                echo $contents; 
            } 
            ?>
            </div>
            <form name="message" action=""> 
                <input name="usermsg" type="text" id="usermsg" size="63" /> 
                <input name="submitmsg" type="submit"  id="submitmsg" value="Send" /> 
            </form>
            </div>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
            <script type="text/javascript"> 
            // jQuery Document 
            $(document).ready(function(){ 
                //If user wants to end session 
                $("#exit").click(function(){ 
                    var exit = confirm("Vil du forlade chatten?"); 
                    if(exit==true){window.location = '/forside/';} 
                }); 
            });
            $("#submitmsg").click(function(){ 
                var clientmsg = $("#usermsg").val(); 
                $.post("post.php", {text: clientmsg}); 
                $("#usermsg").attr("value", ""); 
                return false; 
            });
            function loadLog(){ 
                var oldscrollHeight = $("#chatbox").attr("scrollHeight") - 20; //Scroll height before the request 
                $.ajax({ 
                    url: "chat.php", 
                    cache: false, 
                    success: function(html){ 
                        $("#chatbox").html(html); //Insert chat log into the #chatbox div 
                        //Auto-scroll 
                        var newscrollHeight = $("#chatbox").attr("scrollHeight") - 20; //Scroll height after the request 
                        if(newscrollHeight > oldscrollHeight){ 
                            $("#chatbox").animate({ scrollTop: newscrollHeight }, 'normal'); //Autoscroll to bottom of div 
                        } 
                    }, 
                }); 
            }
            </script>
        </div>




post fil her


<?php
session_start(); 
if(isset($_SESSION['name'])){ 
    $text = $_POST['text']; 
    $fp = fopen("chat.php", 'a'); 
    fwrite($fp, "<div class='msgln'>(".date("g:i A").") <b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>"); 
    fclose($fp); 

?>


Jeg tænk det må kun gøre mere lette for mig og ham at lave en chat til ham. men jeg har test og prøve den som jeg lige har skrevet men det er sådan at den ikke gider at skrive indhold til siden eller ligne.


Men jeg tænker lidt der kommer intet op på databasen.
og der bliver intet ligge ind i databasen.
som bevise på at man har skrevet det som man har skrevet..

#ronols Jeg håber du kan komme med et godt råd til mig! :) og sige din mening omkring hvad jeg skal gøre hvis det var dig?. jeg er ligeglad hvad jeg skal lave af arbejde med dog er det bare sådan at min ven kan ikke så meget mysqli i sidste endnu. så er det mig som kommer til at stå med lorten. hvis du kan følge mig?

Spørger bare hvis der er noget du vil vide eller ligne ronols.
Avatar billede tobrukDk Novice
14. oktober 2012 - 04:57 #12
#11

Altså jeg kan godt se fordel ved den.

det kun være at jeg skulle tilføje nogle små ting f.eks at den ligge sig ind i databasen og lave smile og mange andre ting :)


det som jeg skal lave om på den anden det er utroligt meget. det er at skal tag kaldenavn væk og ligne ting. #11 ligesom jeg viser i den der er det meget nemt. jeg skal bare have fået lavet sådan at når man skriver smide den det op på databasen osv..
Avatar billede stalle Nybegynder
14. oktober 2012 - 09:36 #13
Og lave det du har i #11 om til og smide ting i database, virker som et noget større projekt end og skrive det oprindelige om til at benytte mysqli.

Det virker lidt som om, at selvom du tager det oprindelige fra #0 og deler det op i funktioner, så kan du ikke helt gennemskue hvad det er koden gør. Er det korrekt forstået ?

Målet må være, at du tager det hele, funktion for funktion, og forstår hvad det er koden i funktionen gør.
Efterfølgende skal du reelt "bare" skrive en ny, men hvor den benytter sig af mysqli - og det er ikke super mange ting der SKAL laves om for at det virker.

En super måde og lære koden du arbejder med, er faktisk og gøre som ronols gør i #7.
Tag koden linie for linie, og skriv en kommentar til den, der med DINE ord, fortæller hvad det er der sker i koden.

Uanset hvordan du griber det an, vil jeg mene at det er et nødvendigt "onde" og skulle arbejde lidt mere med koden og forstå den.
Avatar billede olsensweb.dk Ekspert
14. oktober 2012 - 10:46 #14
#10 ja,
og så teste classen af, men det kræver du kender din code, for at teste. Lav evt en beskrivende kommentar til hver function / evt linje, med hvad den gør, så kan du lettere overskue din code, teste og vedligeholde den.

#13 enig
Avatar billede tobrukDk Novice
14. oktober 2012 - 15:01 #15
#13 Okay ;)

Men hvis jeg har spørgsmål eller ligne kan jeg så få hjælp her eller hvad? hvis jeg vil høre om noget?
Avatar billede stalle Nybegynder
14. oktober 2012 - 15:08 #16
Selvfølgelig.

Men forsøg at gøre det lidt mere konkret, end blot og ville have hele koden omskrevet.
Avatar billede tobrukDk Novice
14. oktober 2012 - 15:21 #17
okay super ;) jeg vil arbejde på det.
Avatar billede tobrukDk Novice
14. oktober 2012 - 16:27 #18

public function db_insert($rows, $data)
  {
    $mysqli_row = '';
    foreach ($rows as $row) {
      $mysqli_row .= '`' . $row . '`, ';
    }
    $mysqli_row = mb_substr($mysqli_row, 0, -2, $this->_options['charset']);
    $mysqli_data = '';
    foreach ($data as $value) {
      $mysqli_data .= '"' . $value . '", ';
    }
    $mysqli_data = mb_substr($mysqli_data, 0, -2, $this->_options['charset']);
    mysql_query(
    'INSERT INTO `sb_chat-mebeshouts` (' . $mysqli_row . ') VALUES (' . $mysqli_data . ')',
    $this->_db
    );
  }
Avatar billede olsensweb.dk Ekspert
14. oktober 2012 - 17:00 #19
#18
hvad er spørgsmålet ??, noget der skriger i øjene er:
denne linje
mysql_query('INSERT INTO `sb_chat-mebeshouts` (' . $mysqli_row . ') VALUES (' . $mysqli_data . ')', $this->_db);

skal se sådan ud
mysqli_query($this->_db, 'INSERT INTO `sb_chat-mebeshouts` (' . $mysqli_row . ') VALUES (' . $mysqli_data . ')');


dvs der manglede et i i mysql_ og der skulle byttes om på sql og connection
Avatar billede tobrukDk Novice
14. oktober 2012 - 17:16 #20
Det så jeg godt lige efter jeg har havde sendt den


public function db_insert($rows, $data)
    {
        $mysqli_row = '';
        foreach ($rows as $row) {
          $mysqli_row .= '`' . $row . '`, ';
        }
        $mysqli_row = mb_substr($mysqli_row, 0, -2, $this->_options['charset']);
        $mysqli_data = '';
        foreach ($data as $value) {
          $mysqli_data .= '"' . $value . '", ';
        }
        $mysqli_data = mb_substr($mysqli_data, 0, -2, $this->_options['charset']);
        mysqli_query($this->_db, 'INSERT INTO `sb_chat-mebeshouts` (' . $mysqli_row . ') VALUES (' . $mysqli_data . ')');
    }
Avatar billede tobrukDk Novice
14. oktober 2012 - 18:28 #21

if (empty($last_id)) {
            $result = mysqli_query('SELECT COUNT(`id`)-10 FROM `sb_chat-mebeshouts`');
            $last_id = mysql_result($result, 0); // FEHLER
        }


Jeg har problemer med mysql_result ha prøve at skrive mysqli og det virker ikke, hmm
Avatar billede tobrukDk Novice
14. oktober 2012 - 18:48 #22
Det virker lidt nemt og meget hurtiger endnu jeg troede.


<?php
define('SB_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/chat/');
class Shoutbox
{
    /*
    Kan komme ind på databasen
    */
    private $_options = array(
        'db_server'        => 'localhost',
        'db_charset'        => 'utf8',
        'db_user'          => 'x',
        'db_password'      => 'x',
        'db_name'          => 'x',
        'charset'          => 'utf-8',
        'heading'          => 'x',
        'refresh'          => 1.0,
        'spam_protect'      => 1,
        'enable_bbcode'    => true,
        'enable_smilies'    => true
    );
    private $_db = null;
    public function __construct($options = null)
    {
        if (!is_null($options)) {
            $this->_options = array_merge($this->_options, $options);
        }
       
        $this->disable_magic_quotes();
        $this->connect_database();
    }
    private function connect_database(){
        $mysqli_db = new mysqli($this->_options['db_server'], $this->_options['db_user'], $this->_options['db_password'], $this->_options['db_name']);
        if (mysqli_connect_errno()) {
            echo 'Der opstod en fejl ved forbindelsen: ' . mysqli_connect_error();
            exit();
        }
        mysqli_set_charset($mysqli, "utf8");
        return $mysqli_db;
        $this->conn=$mysqli_db;
    }
    private function disable_magic_quotes()
    {
        if (get_magic_quotes_gpc()) {
            $_GET    = $this->remove_magic_quotes($_GET);
            $_POST  = $this->remove_magic_quotes($_POST);
            $_COOKIE = $this->remove_magic_quotes($_COOKIE);
            @ini_set('magic_quotes_gpc', 0);
        }
        if (get_magic_quotes_runtime()) {
            set_magic_quotes_runtime(false);
        }
    }
    private function remove_magic_quotes($data)
    {
        foreach ($data as $key => $value) {
            if (is_array($value)) {
                $data[$key] = $this->remove_magic_quotes($value);
            }
            else {
                $data[$key] = stripslashes($value);
            }
        }
       
        return $data;
    }
    public function db_insert($rows, $data)
    {
        $mysqli_row = '';
        foreach ($rows as $row) {
          $mysqli_row .= '`' . $row . '`, ';
        }
        $mysqli_row = mb_substr($mysqli_row, 0, -2, $this->_options['charset']);
        $mysqli_data = '';
        foreach ($data as $value) {
          $mysqli_data .= '"' . $value . '", ';
        }
        $mysqli_data = mb_substr($mysqli_data, 0, -2, $this->_options['charset']);
        mysqli_query($this->_db, 'INSERT INTO `sb_chat-mebeshouts` (' . $mysqli_row . ') VALUES (' . $mysqli_data . ')');
    }
    public function db_get_messages($last_id)
    {
        settype($last_id, 'integer');
        if (empty($last_id)) {
            $result = mysqli_query('SELECT COUNT(`id`)-10 FROM `sb_chat-mebeshouts`');
            $last_id = mysql_result($result, 0); // FEHLER
        }
        $mysql_string = '';
        $result = mysqli_query(
            'SELECT `id`, `name`, `message`, `time` FROM `sb_chat-mebeshouts` WHERE `id` > " . $last_id . " ORDER BY `id` ASC',
            $this->_db
        );
        while ($row = mysql_fetch_object($result)) {
            if ($row->name == 'Admin-bot') {
                $mysqli_string .= '.append(\'<div id="' . $row->id . '" class="bot"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
                                '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
            }
            else {
                $mysql_string .= '.append(\'<div id="' . $row->id . '"><span class="time" title="' . date('d.m.Y - H:i:s', $row->time) . '">(' . date('H:i', $row->time) . ')</span> ' .
                                '<span class="name">' . $this->clean_input($row->name) . '</span>: <span class="message">' . $this->deal_output($row->message) . '</span></div>\')';
            }
        }
        mysqli_free_result($result);
        return $mysql_string;
    }
    public function deal_output($data)
    {
        return $this->replace_smilies($this->convert_linebreaks($this->set_wordwrap($this->bbcode($this->clean_input($data)))));
    }
    public function db_clean($data)
    {
        return mysql_real_escape_string($data, $this->_db);
    }
    public function clean_input($data)
    {
        return trim(htmlspecialchars(mb_convert_encoding($data, $this->_options['charset'], mb_detect_encoding($data)), ENT_QUOTES, $this->_options['charset'], true));
    }
    public function bbcode($data)
    {
        if ($this->_options['enable_bbcode']) {
            // Replace
            $data = preg_replace('/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $data);
            // Replace
            $data = preg_replace('/\[i\](.*?)\[\/i\]/', '<i>$1</i>', $data);
            // Replace
            $data = preg_replace('/\+).*\](.*)\[\/url\]/', '<a href="$1" target="_blank" rel="nofollow">$2</a>', $data);
            // Replace [url]
            $data = preg_replace('/\[url\](.*)\[\/url\]/', '<a href="$1" target="_blank" rel="nofollow">$1</a>', $data);
        }
       
        return $data;
    }
    private function replace_smilies($text)
    {
        if ($this->_options['enable_smilies']) {
            $image_tag = array('<img src="media/smilies/', '" alt="" />');
            $smilies = array(
                ':-)' => $image_tag[0] . '1.png' . $image_tag[1],
                ';-)' => $image_tag[0] . '2.png' . $image_tag[1],
                ':)'  => $image_tag[0] . '1.png' . $image_tag[1],
                ';)'  => $image_tag[0] . '2.png' . $image_tag[1],
                ':D'  => $image_tag[0] . '3.png' . $image_tag[1],
                ':-D' => $image_tag[0] . '3.png' . $image_tag[1],
                ':P'  => $image_tag[0] . '4.png' . $image_tag[1],
                ';P'  => $image_tag[0] . '5.png' . $image_tag[1],
                ';D'  => $image_tag[0] . '6.png' . $image_tag[1],
                ':('  => $image_tag[0] . '31.png' . $image_tag[1],
                ':-(' => $image_tag[0] . '31.png' . $image_tag[1],
                '=)'  => $image_tag[0] . '7.png' . $image_tag[1],
                '=D'  => $image_tag[0] . '3.png' . $image_tag[1],
                '=P'  => $image_tag[0] . '4.png' . $image_tag[1],
                'xD'  => $image_tag[0] . '8.png' . $image_tag[1],
                ':S'  => $image_tag[0] . '17.png' . $image_tag[1],
                'xS'  => $image_tag[0] . '29.png' . $image_tag[1],
                ':O'  => $image_tag[0] . '14.png' . $image_tag[1],
                '=O'  => $image_tag[0] . '14.png' . $image_tag[1],
                '=/'  => $image_tag[0] . '20.png' . $image_tag[1],
                '=]'  => $image_tag[0] . '21.png' . $image_tag[1],
                '$_$' => $image_tag[0] . '26.png' . $image_tag[1],
                'o_O' => $image_tag[0] . '28.png' . $image_tag[1]
            );
            $text = str_ireplace(array_keys($smilies), array_values($smilies), $text);
        }
        return $text;
    }
    private function convert_linebreaks($text)
    {
        $text = str_replace("\n", '', nl2br($text));
        return $text;
    }
    private function set_wordwrap($text)
    {
        return wordwrap($text, 88, "\n", true);
    }
    public function get_heading()
    {
        return $this->_options['heading'];
    }
    public function get_charset()
    {
        return $this->_options['charset'];
    }
    public function get_refresh_rate()
    {
        return (float) $this->_options['refresh'];
    }
    public function get_spam_protection_rate()
    {
        return (int) $this->_options['spam_protect'];
    }
    public function is_ajax()
    {
        return ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') ? true : false;
    }
    protected function __clone()
    {}
}
?>


I er velkommen til at ret hvis jeg har lavet nogle fejl
Avatar billede olsensweb.dk Ekspert
14. oktober 2012 - 23:58 #23
prøv at kigge på følgende functioner:
private function connect_database(){
public function db_get_messages($last_id)
public function db_clean($data)

der er nogle oplagte fejl, og du finder nok nogle når du tester classen
Avatar billede tobrukDk Novice
15. oktober 2012 - 04:33 #24
jeg kan ikke lige finde fejl og se hvad det er ?
Avatar billede tobrukDk Novice
16. oktober 2012 - 19:47 #25
#23 De virker helt fint og jeg har ingen problemer til server eller andre ting
Avatar billede olsensweb.dk Ekspert
16. oktober 2012 - 20:04 #26
jf din code i #22
kan du anvende din connection ?? (nej)
har du angivet din connetion i alle sql execite ?? (nej)
er rækkefølgen af mysql og connection rigtig alle steder ?? (nej)
anvender du mysqli alle steder ?? (nej)

http://dk1.php.net/mysqli_real_escape_string
http://dk1.php.net/mysqli_query
Avatar billede tobrukDk Novice
16. oktober 2012 - 20:18 #27
#26

Det er lige før at du er min lærer :) (joke)
Avatar billede tobrukDk Novice
16. oktober 2012 - 20:19 #28
#26 Jeg vil lige kigge på det! :)
Avatar billede tobrukDk Novice
16. oktober 2012 - 22:21 #29
Jeg synes i begge skal smide et svar som tak for hjælp!
Avatar billede olsensweb.dk Ekspert
17. oktober 2012 - 11:46 #30
får du her
Avatar billede tobrukDk Novice
18. oktober 2012 - 15:54 #31
#Ronols du få dem men hvis man den anden gerne vil have dem så må han kontakt dig! for at få dem:)
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