Verificare smile-uri si adaugare in baza de date

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje:328

Verificare smile-uri si adaugare in baza de date

Hmmm , folosesc codul acesta de afisare smile-uri

Cod: Selectaţi tot

<?php function smileuri($text){
    $semne = array(
        ':iarna1:',
        ':iarna2:',
        ':iarna3:',
        ':iarna4:'..........................);
    $imagine = array(
    "<img src=/users/smile-uri/big/iarna1.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna2.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna3.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna4.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna5.gif style=width:50px;>".............................
);
            $schimba = str_replace($semne, $imagine, $text);

            return $schimba;
            }
?>
iar la afisare

Cod: Selectaţi tot

<?php echo ''.smileuri($roi['comentariu']).'';?>
Ceea ce doresc este asa: Sa verific daca comentariul care il inserez in baza de date contine si smile-urile adaugate in codul de mai sus, daca exista doresc ca in loc sa imi insereze in baza de date
:iarna1: sa inserese <img src=/blabla.jpg> si restul de comentariu.

Exemplu:
1) Com test cu smile :iarna1122: pentru baza de date
Comm adaugat in baza de date : Com test cu smile <img src=/blalbalimaginea.png> pentru baza de date
2) Comm fara smile pentru baza de date
Comm adaugat in baza de date : Comm fara smile pentru baza de date

Sper ca m-am facut inteles :D

steell Mesaje:190
str_replace va returna true daca este facuta vreo inlocuire. deci te folosesti de asta pentru a verifica daca exista sau nu vreun smile in comentariu.

Cod: Selectaţi tot

if(str_replace(bla, bla, com)) {
// exista smile
}
else {
// nu exista smile
} 
sper ca te-ai prins.

cadou Mesaje:328
In loc de str_replace ... nu se poate adauga si un array ?
pentru ca am o gramada de cod de smile-uri de adaugat si sa fie toate pe un rand e o nebunie totala asa ca vreau sa am pe mai multe randuri. Exemplu:

Cod: Selectaţi tot

bla,bla,blab,alm,
vla,doa,rand,
bla,blab,a,
com
am incercat ceva de genu:

Cod: Selectaţi tot

$xxxxxxx = array(
':iarna1:', ':iarna2:', ':iarna3:',
//test 
':iarna4:', ':iarna5:'

if(str_replace($xxxxxxx, $coment))
{
//bla bla
}
 

MarPlo Mesaje:4343
Salut
Nu se intelege clar ce vrei sa spui cu: "In loc de str_replace ... nu se poate adauga si un array", dar poti folosi si preg_replace().
Vezi daca iti e de folos functia de la: Transformare cod PHPBB si smiles in HTML.

cadou Mesaje:328
Ce parere ai este scris corect ?

Cod: Selectaţi tot

$coment = $_POST['comentariu'];
$a = array(
':iarna1:', 
':iarna2:',
':iarna3:',    
':iarna8:'
);
$b = array(
':paste1:', 
':paste2:',    
':paste3:',
':paste4:',    
':paste5:',    
':paste6:'
);

if(str_replace($a, $b, $coment)) {
  // are smile-uri deci face ce vreau eu
}
else {
  // nu are smile-uri deci continua cum vroiam initial
}
 
De mers , merge !

steell Mesaje:190
Pai tu inlocuiesti formulele la smile-uri intre ele? :lol: Parca ideea era sa inlocuiesti formula cu locatia imaginii respective cum ai scris in primul post. Deci in $b trebuie sa pui locatia catre fiecare smile nu formulele pentru smile-uri

cadou Mesaje:328
Pai hai ca postez tot codu ca sa te prinzi ce am facut :)
Cel putin l-am testat si este ceea ce vroiam

Cod: Selectaţi tot

$coment = $_POST['comentariu'];

$a = array(
        ':iarna1:', ':iarna2:',    ':iarna3:',    ':iarna4:',    ':iarna5:',    ':iarna6:',    ':iarna7:',
        ':iarna8:',    ':iarna9:',    ':iarna10:', ':iarna11:', ':iarna12:', ':iarna13:'
// ............. etc ... sunt o gramada //
);
$b = array(
        ':paste1:', ':paste2:',    ':paste3:',    ':paste4:',    ':paste5:',    ':paste6:',
        ':paste7:', ':paste8:',    ':paste9:',    ':paste10:', ':paste11:', ':paste12:',
        ':paste13:', ':paste14:', ':paste15:', ':paste16:'
// ......... etc sunt o gramada ..... //
);
if(str_replace($a, $b, $coment)) {
// pentru ca are smile am functia urmatoare
function smileuri($text){
    $semne = array(
':iarna1',
':iarna2:',
':iarna3:',
':iarna4:'
// si multe altele .... //
);
$imagine = array(
    "<img src=/users/smile-uri/big/iarna1.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna2.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna3.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna4.gif style=width:50px;>",
    "<img src=/users/smile-uri/big/iarna5.gif style=width:50px;>"
// si multe altele  .... //
);
$schimba = str_replace($semne, $imagine, $text);
            return $schimba;
            }
$comm = smileuri($coment); 
// adica comul daca are smile-urile prezentate mai sus inlocuieste semnu cu imaginea
}
else{
$comm = $coment; // adica comul original
}
 

MarPlo Mesaje:4343
Daca formatul de cuvinte si smiles au un anumit tipar /sablon logic, poti folosi preg_replace(), cu RegExp ca sa simplifici codul.
De exemplu:

Cod: Selectaţi tot

$txt = 'text oarecare :iarna1: si :iarna8: , continuare ...';
$word_smile = ':iarna([0-9]+):';
$img_smile = '<img src="/users/smile-uri/big/iarna$1.gif" style="width:50px;">';
$str = preg_replace($word_smile, $img_smile, $txt);
echo $str;
 
- $1 in preg_replace() reprezinta valoarea data de prima paranteza (...) cu RegExp.

cadou Mesaje:328
Ok, dar inseamna ca mie daca tasteaza cineva " :iarna10234: " imaginea va fi

Cod: Selectaţi tot

<img src="/users/smile-uri/big/iarna10234.gif>
Iar eu am imagini pana la 30 ! deci ar fi cam incorect

MarPlo Mesaje:4343
Daca inveti sa folosesti bine expresiile regulate, te ajuta mult in lucrul cu siruri si simplificarea codului.
In cazul de sus, daca numarul e pana la 30 inclusiv, se poate folosi variabila $word_smile cu un array cu 2 tipare regexp (primul pentru imagini de la 1 la 9, al doilea pt. imagini de la 10 la 30):

Cod: Selectaţi tot

$word_smile = array('<:iarna([1-9]):>', ':iarna([1-2][0-9]|30):');
 
- Daca sunt de exemplu pana la 32 poti adauga dupa 30 : '...|21|32 .

Subiecte similare