• 6 odgovora
  • 2.387 pregleda
Problem sa strlen() funkcijom 13.02.2011. u 14:23 · pre 191 meseci #1
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 !!!

Re: Problem sa strlen() funkcijom 03.03.2011. u 15:10 · pre 190 meseci #4
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 !!!
Re: Problem sa strlen() funkcijom 03.03.2011. u 16:05 · pre 190 meseci #5
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) {



Potpis
Tko leti vrijedi
Re: Problem sa strlen() funkcijom 03.03.2011. u 18:34 · pre 190 meseci #6
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>
                            ";
                            }
                        }
                    }                
                ?>




Re: Problem sa strlen() funkcijom 03.03.2011. u 21:41 · pre 190 meseci #7
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.



Potpis
Tko leti vrijedi
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme