[ go_ste @ 13.02.2011. 14:23 ] @
Najpre pozdrav svima !

Pre nekoliko dana sam postavio sajt na jedan free hosting kako bih isprobao sve funkcionalnosti (pre prelaska na novi hosting) ali se sada javlja greska koju nisam dobijao na predhodnom hostingu. Poruka je sledeca:
"Warning: strlen() expects parameter 1 to be string, array given in /home1/.../index.php on line 138"


Code:
<?
                    $sqlCategories = "SELECT * FROM products, categories where products.CategoryID=categories.CategoryID and products.SellerID=".$_REQUEST['SellerID']." and productstatus=1 order by Category asc";
                    $resultCategories = mysql_query($sqlCategories, $conn);
                    if (@mysql_num_rows($resultCategories)!=0){
                    $strcategory="";
                        while($row_categories = @mysql_fetch_array($resultCategories))
                        {            
                        $categoryduplicate=0;
                            $arrcat = explode(",",$strcategory);
                            for($i=0;$i<strlen($arrcat);$i++)
                            {
                                if($arrcat[$i]==$row_categories['CategoryID'])
                                {
                                    $categoryduplicate=1;
                                }                                    
                            }
                            if($categoryduplicate==0)
                            {
                                if($strcategory=="")
                                    {
                                        $strcategory=$row_categories['CategoryID'];
                                    }
                                    else
                                    {
                                        $strcategory=$strcategory.",".$row_categories['CategoryID'];
                                    }                
                            $sqlCategories2 = "SELECT * FROM products where CategoryID=".$row_categories['CategoryID']." and productstatus=1 and SellerID=".$_REQUEST['SellerID'];
                            $resultCategories2 = mysql_query($sqlCategories2, $conn);                            
                            echo "
                            <Tr>
                                <td width='3'><img src='../images/arrow.gif'></td>
                                <td class='content'><a href='products.php?CategoryID=".$row_categories['CategoryID']."&SellerID=".$_REQUEST['SellerID']."&Category=".$row_categories['Category']."' class='industry'>".$row_categories['Category']."</a> [".@mysql_num_rows($resultCategories2)."]</td>
                            </Tr>
                            ";
                            }
                        }
                    }                
                ?>


Koliko sam uspeo da saznam, problem je u for($i=0;$i<strlen($arrcat);$i++) koja vraca pogresan podatak ili kako vec, ali ne uspevam to da resim. Probao sam sa mb_strlen (mada nisam siguran da sam to dobro zamenio) ali nista. Da li ovo sve ima veze sa prelaskom na free hosting (nesto sa verzijom PHP-a, PHP 5.2 i PHP 5.3) ili je problem u kodu.

Hvala unapred !!!

[ Bojan Kopanja @ 13.02.2011. 14:32 ] @
Greska ti lepo kaze da strlen trazi string kao parametar a ti si sa explode dobio array...

uradi ovako:

Code:
for($i=0;$i<count($arrcat)-1;$i++)
[ go_ste @ 13.02.2011. 16:10 ] @
Hvala na brzom i efikasnom odgovoru... to je to...

Hvala !!!
[ go_ste @ 03.03.2011. 15:10 ] @
Ovaj problem je resen ali sada imam drugi problem na istoj stranici i koliko vidim sa istim upitom.
On prikazuje sve proizvode jednog korisnika po kategorijama. Problem je sto sada ukoliko u jednoj kategoriji postoji vise proizvoda (recimo 3) on to prikaze dva puta npr:

Kategorija jedan [3]
Kategorija jedan [3]


Hvala unapred !!!
[ kiklop74 @ 03.03.2011. 16:05 ] @
Citat:
Bojan Kopanja: Greska ti lepo kaze da strlen trazi string kao parametar a ti si sa explode dobio array...

uradi ovako:

Code:
for($i=0;$i<count($arrcat)-1;$i++)


Bolje je ovako:

Code:

for($i=0,$count=count($arrcat)-1;$i<$count;$i++) {


A jos bolje koristiti foreach

Code:

foreach($arrcat as $value) {



[ go_ste @ 03.03.2011. 18:34 ] @
Citat:
kiklop74: Bolje je ovako:

Code:

for($i=0,$count=count($arrcat)-1;$i<$count;$i++) {


A jos bolje koristiti foreach

Code:

foreach($arrcat as $value) {



To je OK i ta greska sa strlen funkcijom se vise ne javlja. Problem je sto se jedna kategorija ispisuje dva puta ukoliko u njoj ima vise proiazvoda.Na stranici se prikazuju proizvodi po kategorijama. Problem je sto sada ukoliko u jednoj kategoriji postoji vise proizvoda (recimo 3) on to prikaze dva puta npr:

Kategorija jedan [3]
Kategorija jedan [3]


a tu je i kod jos jednom:

Code:
<?
                    $sqlCategories = "SELECT * FROM products, categories where products.CategoryID=categories.CategoryID and products.SellerID=".$_REQUEST['SellerID']." and productstatus=1 order by Category asc";
                    $resultCategories = mysql_query($sqlCategories, $conn);
                    if (@mysql_num_rows($resultCategories)!=0){
                    $strcategory="";
                        while($row_categories = @mysql_fetch_array($resultCategories))
                        {            
                        $categoryduplicate=0;
                            $arrcat = explode(",",$strcategory);
                            for($i=0;$i<strlen($arrcat);$i++)
                            {
                                if($arrcat[$i]==$row_categories['CategoryID'])
                                {
                                    $categoryduplicate=1;
                                }                                    
                            }
                            if($categoryduplicate==0)
                            {
                                if($strcategory=="")
                                    {
                                        $strcategory=$row_categories['CategoryID'];
                                    }
                                    else
                                    {
                                        $strcategory=$strcategory.",".$row_categories['CategoryID'];
                                    }                
                            $sqlCategories2 = "SELECT * FROM products where CategoryID=".$row_categories['CategoryID']." and productstatus=1 and SellerID=".$_REQUEST['SellerID'];
                            $resultCategories2 = mysql_query($sqlCategories2, $conn);                            
                            echo "
                            <Tr>
                                <td width='3'><img src='../images/arrow.gif'></td>
                                <td class='content'><a href='products.php?CategoryID=".$row_categories['CategoryID']."&SellerID=".$_REQUEST['SellerID']."&Category=".$row_categories['Category']."' class='industry'>".$row_categories['Category']."</a> [".@mysql_num_rows($resultCategories2)."]</td>
                            </Tr>
                            ";
                            }
                        }
                    }                
                ?>




[ kiklop74 @ 03.03.2011. 21:41 ] @
Na stranu sto ovaj kod predstavlja ono najgore u losem PHP programiranju (a i programiranju uopste) moram da pitam sta ti u stvari zelis tacno da postignes sa ovim kodom?

Meni se cini da nepotrebno komplikujes odredjivanje da li se ponavlja kategorija ili ne.

Ako je to ono sto ti treba to se lakse odredjuje ovako:

Code:

$sqlCategories = "SELECT * FROM products p, categories c
                  WHERE    p.CategoryID=c.CategoryID 
                       AND p.SellerID={$sellerid} 
                       AND productstatus=1 
                       GROUP BY Category ASC";


I onda ne treba da odredjujes da li se kategorija ponavlja jer ce baza da vrati svaku kategoriju samo jednom. Ostale probleme u kodu ne bih da pominjem ovom prilikom.