Avatar billede andrew Nybegynder
23. oktober 2008 - 22:31 Der er 25 kommentarer og
1 løsning

mySql til multi-array

Hej.

Jeg er ved at lave en gæstebog, og har derfor lavet en database til mine smileys, som jeg ønskerat få hentet ind i et array, hvorfra der så kan søges efter "kommandoer" som bliver erstattet af billede.

Fx. :) => images/smileys/smile.gif

Jeg kan bare ikke få det til at virke. Har prøvet følgende:


HENTER SMILEYS FRA DATABASE IND TIL ARRAY:

$query = mysql_query("SELECT * FROM guestbook_smiley");

if(mysql_num_rows($query)) {

    while ($row = mysql_fetch_array($query)) {

        $smileylist[] = array($row['picture'] => $row['cmd']);

    }

}


DEREFTER HAR JEG FLG. FUNKTION TIL AT FINDE OG ERSTATTE FRA "KOMMANDOER" TIL ET BILLEDE:

function insertsmiley($message) {

    foreach ($smileylist as $smileypic => $smileycmd) {

        return str_replace ($smileycmd, $smileypic, $message);
    }
}



KØRSEL AF FUNKTION:

$echo insertsmiley(":)";



Jeg ønsker så at få udskrevet "images/smileys/smile.gif" i stedet. Kan I følge mig?
Avatar billede andrew Nybegynder
23. oktober 2008 - 22:32 #1
RETTELSE:

echo insertsmiley(":)");
Avatar billede olebole Juniormester
23. oktober 2008 - 22:45 #2
<ole>

Mine spørgsmål er:
*) Hvad sker der?
*) Hvad sker der ikke?
*) Får du nogen fejlmeddelelser?
*) Har du slået fejlmeddelelser til?
*) Hvad er dit spørgsmål?  =)

/mvh
</bole>
Avatar billede andrew Nybegynder
23. oktober 2008 - 22:49 #3
Mit spørgsmål er, at jeg ikke kan få det til at virke. Jeg får fejlmeddelelsen "Warning: Invalid argument supplied for foreach()"

Så der sker sådanset ikke noget.
Avatar billede andrew Nybegynder
23. oktober 2008 - 22:51 #4
Jeg ønsker som sagt, at hente min database ind i et array, hvorfra så jeg kan bruge en "foreach" for at søge efter smileys, såsom :) :D mm.

Eller har du en anden mulig løsning? Jeg ønsker at bruge min database!
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 22:54 #5
Din funktion kender ikke noget til det array. Tag det med som parameter:


function insertsmiley($message,$smileylist) {

    foreach ($smileylist as $smileypic => $smileycmd) {

        return str_replace ($smileycmd, $smileypic, $message);
    }
}
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 22:55 #6
Desuden vil du få fejl hvis der ikke er noget i din tabel. Derfor:

$smileylist=array();  // opretter tomt array

$query = mysql_query("SELECT * FROM guestbook_smiley");

if(mysql_num_rows($query)) {

    while ($row = mysql_fetch_array($query)) {

        $smileylist[] = array($row['picture'] => $row['cmd']);

    }

}
Avatar billede erikjacobsen Ekspert
23. oktober 2008 - 22:57 #7
Og desuden så får du max replacet een smiley. Du skal:

function insertsmiley($message,$smileylist) {

    foreach ($smileylist as $smileypic => $smileycmd) {

        $message =  str_replace ($smileycmd, $smileypic, $message);
    }
  return $message;
}
Avatar billede andrew Nybegynder
23. oktober 2008 - 23:06 #8
Der er indsat data i databasen. Har nu følgende kode:

function insertsmiley($message,$smileylist) {

    foreach ($smileylist as $smileypic => $smileycmd) {

        $message =  str_replace ($smileycmd, $smileypic, $message);
    }
  return $message;
}

$query = mysql_query("SELECT * FROM guestbook_smiley");

$smileylist=array();  // opretter tomt array

if(mysql_num_rows($query)) {

    $smileylist = array();

    while ($row = mysql_fetch_array($query)) {

        $smileylist = array($row['picture'] => $row['cmd']);

    }

}

echo insertsmiley(":)", $smileylist);





Den udskriver kun ":)"
Avatar billede andrew Nybegynder
23. oktober 2008 - 23:12 #9
Jeg har ":)" og ":D" i min database. Når jeg skriver ":)" sender den blot det retur. Hvis jeg skriver ":D" så sender den billedet retur..
Avatar billede andrew Nybegynder
23. oktober 2008 - 23:28 #10
Det virker som om den overskriver min array, når den indsætter en ny?
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 09:06 #11
Jeg kan så undre mig over, at du ændrer kode fra dit spørgsmål, som ingen har foreslået du skal ændre. Prøv at tage den forfra, een gang til.
Avatar billede andrew Nybegynder
24. oktober 2008 - 15:21 #12
OK, det var I et forsøg på at selv at finde løsningen!

Jeg har flg. kode og kan ikke finde fejlen, der gør at jeg kun får ændret den sidste smiley. Vil du hjælpe???



function insertsmiley($message,$smileylist) {

    foreach ($smileylist as $smileypic => $smileycmd) {

        $message = str_replace ($smileycmd, '<img src="/'.$smileypic.'">', $message);
    }
  return $message;
}

$query = mysql_query("SELECT * FROM guestbook_smiley");

$smileylist = array();  // opretter tomt array

if(mysql_num_rows($query)) {


    while ($row = mysql_fetch_array($query)) {
   
        $smileylist = array($row['picture'] => $row['cmd']);

    }

}

echo insertsmiley(":):D:D:D Min tekst:)her:D:):)", $smileylist);
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 15:27 #13
Det er bare linien fra dit spørgsmål, du ikke skal ændre:

      $smileylist[] = array($row['picture'] => $row['cmd']);
Avatar billede andrew Nybegynder
24. oktober 2008 - 15:30 #14
Ok, det har jeg prøvet. Dette resultere desværre bare i en masse 0'er. Meget underligt.
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 15:33 #15
Okay - men så har vi nok et problem et andet sted. Lige et øjeblik.
Avatar billede andrew Nybegynder
24. oktober 2008 - 15:36 #16
Hov.. Det er ikke en masse nuller, men numre, som angiver placeringen af smileys i mit array.
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 17:15 #17
Yeps. Det er det du be'r den om. Du kan gøre noget i retning af nedenstående, som du kan se i funktion på http://n0p.com/850158.php  - det kan også gøres smartere. Jeg skriver værdierne direkte i stedet for at hente fra database:

<?php

function insertsmiley($message,$smileylist) {
    foreach ($smileylist as $smileycmd =>) {
        $message = str_replace ($smileycmd, '<img src="/'.$smileypic.'">', $message);
    }
  return $message;
}

$smileylist = array();  // opretter tomt array
$smileylist[":D"] = "smil";
$smileylist[":)"] = "stortsmil";

echo insertsmiley(":):D:D:D Min tekst:)her:D:):)", $smileylist);
?>
Avatar billede andrew Nybegynder
24. oktober 2008 - 17:44 #18
Jeg kan ikke umiddelbart finde ud af få hentet smileys fra min database. Har du nogen løsning på det?
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 18:09 #19
Du skal bare putte $row['picture']  og $row['cmd'] ind de rigtige steder.

Man kan også:

<?php
$smileylist = array();  // opretter tomt array
$smileylist[":D"] = "<img src=\"smil.gif\">";
$smileylist[":)"] = "<img src=\"stortsmil.gif\">";

echo strtr(":):D:D:D Min tekst:)her:D:):)", $smileylist);
?>
Avatar billede andrew Nybegynder
24. oktober 2008 - 18:50 #20
Som sagt ønskede jeg at beholde databasen da jeg skulle bruge smileys i en anden sammenhæng.

Er det ikke muligt via en kode, at få "udskrevet" mit arrays værdi, så der bliver skrevet en adresse til et billede?
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 19:26 #21
Jeg kan ikke lige se hvad du konkret spørger om. Ovenstående er jo bare eksempler du skal tilpasse til din kode.
Avatar billede andrew Nybegynder
24. oktober 2008 - 21:57 #22
Okay. Jeg prøver en gang til:

Jeg ønsker at hente nogle smileys fra en mysql database, og det skal være en database! Disse smileys skal udskiftes som billeder i stedet for de kendte smiley-tegn såsom ":)", ":D", ":S" osv.

Ovenstående kunne evt. udføres via en funktion, hvor der sendes en streng med tekst, som så bliver returneret med smileys som billeder. Ovenstående kunne udføres med denne kode, men der opstår en fejl, når smileys skal findes i funktionen.


function insertsmiley($message,$smileylist) {

    foreach ($smileylist as $smileypic => $smileycmd) {

        $message = str_replace ($smileycmd, '<img src="/'.$smileypic.'">', $message);
    }
  return $message;
}

$query = mysql_query("SELECT * FROM guestbook_smiley");

$smileylist = array();  // opretter tomt array

if(mysql_num_rows($query)) {


    while ($row = mysql_fetch_array($query)) {
   
        $smileylist = array($row['picture'] => $row['cmd']);

    }

}

echo insertsmiley("Hej :) Dette er min tekst :D", $smileylist);
Avatar billede erikjacobsen Ekspert
24. oktober 2008 - 22:00 #23
Hvis du begynder at bruge noget af det kode, der er blevet givet dig, så kan vi hjælpe dig videre. Men det er simpelthen nytteløst, hvis du ikke gider se hvad vi skriver.
Avatar billede andrew Nybegynder
24. oktober 2008 - 23:35 #24
Jeg har fået koden til at virke nu. Tak for hjælpen.. Smider du et svar??
Avatar billede erikjacobsen Ekspert
25. oktober 2008 - 00:10 #25
Nej tak. Jeg samler slet ikke på point.
Avatar billede andrew Nybegynder
25. oktober 2008 - 00:19 #26
Okay.. Men tak alligevel!
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

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