Cand programam un site web pe care sunt postate anunturi de vanzare de produse, de exemplu imobiliare, auto si nu numai, adica atunci cand dorim sa prezentam produsul oferit vrem sa si evidentiem mai multe caracteristici ale produsului pe categorii, cu siguranta o astfel de prezentare vă va fi de folos.
In acest articol voi considera ca vand un apartament pentru care vreau sa prezint printre altele si finisajele acestuia.
La finisaje voi dori sa evidentiez urmatoarele caracteristici:
- gresie
- faianta
- parchet
- tamplarie termopan
- usa metalica
Toate acestea vor face parte dintr-un formular in care cel care introduce anuntul va bifa cate un checkbox pentru fiecare caracteristica legata de Finisaj pe care o respecta apartamentul pus in vanzare.
Dupa cum spuneam in articol, scopul este de a construi un formular in care utilizatorul sa poata bifa mai multe caracteristici din aceeasi clasa.
Problema
Sa manipulam printr-un singur camp MySQL mai multe informatii.
Solutie
Aplicam solutia la un exemplu in care la anuntul de vanzare al unui apartament dorim sa dam informatii suplimentare despre Finisaje.
Creati o baza de date test si in ea proiectati tabela, finisaje si tabela anunturi, care vor cuprinde informatiile conform exemplului ales sau folositi fisierul test.sql din arhiva descarcata:
CREATE TABLE `finisaje` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` char(2) NOT NULL, `nume` char(250) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1; INSERT INTO `finisaje` VALUES ('1', '1', 'gresie'); INSERT INTO `finisaje` VALUES ('2', '2', 'faianta'); INSERT INTO `finisaje` VALUES ('3', '3', 'parchet'); INSERT INTO `finisaje` VALUES ('4', '4', 'tamplarie termopan'); INSERT INTO `finisaje` VALUES ('5', '5', 'usa metalica'); CREATE TABLE `anunturi` ( `id` int(10) NOT NULL AUTO_INCREMENT, `anunt` char(10) NOT NULL, `finisaje` char(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Creati fisierul cu care vor fi manipulate informatiile si il salvati sub numele demo.php. In acest moment nu acordam atentie stilului.
<?php //pentru dezactivarea erorilor de tip Notice; 1 pentru faza de incercari ini_set('display_errors', '0'); //conectarea la baza de date; modificati dupa necesitati function connecttodb($servername,$dbname,$dbuser,$dbpassword){ global $link; $link=mysql_connect ("$servername","$dbuser","$dbpassword"); if(!$link){die("Could not connect to MySQL");} mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error()); } connecttodb("localhost","test","root",""); //citim anuntul la care vrem sa modificam informatiile despre finisari //aici este doar un singur anunt cu numele 12535 (ID=1) $id=1; //valoarea poate fi citita dintr-un GET $anunt="12535"; $query="SELECT * FROM anunturi WHERE id='$id'"; $result=mysql_query($query); $row=mysql_fetch_array($result); $finisaje=$row['finisaje']; //daca exista valoare, sirul gasit aici, de forma, de ex. "1,3,4", se transforma intr-o matrice if(strlen($finisaje)<>0){ $finisaje=explode(',',$finisaje); } //citim valorile trimise in caz de modificare //daca au fost trimise valori cu Submit if(isset($_POST['submit'])){ $finisaje=$_POST['finisaje']; $id=$_POST['id']; if(strlen($finisaje)<>0){ $finisaje=implode(',',$finisaje); } $query="UPDATE anunturi SET finisaje='$finisaje' WHERE id='$id'"; $result=mysql_query($query); } ?>
Explicatii
Exemplul nu poate fi folosit ca atare, dar parti din el pot fi inserate in orice script care ar dori sa faca acelasi gen de operatii.
Multe multumiri...
Internetului ca exista si celor care ne mai spun pe gratis cate ceva, chiar daca i-a costat mult timp sa invete!
Daca articolul v-a fost util, va rugam sa lasati un comentariu.