Autor Zpráva
kuba123
Profil *
Můžete poradit jak vyřešit toto? Nejsem si jist zde While je správně použité nebo použít jiný příkaz?

WHILE(list($k,$i)=explode(",","birthday, gender, bodytype, orientation, cat, country, city, height, weight, search_gender, sign, regdate, editdate, usertype")):
// SOME CODE HERE
ENDWHILE

Celá metoda zde:

   public function getQuery($type){
      $sr = explode(',',C_SR_COLUMNS);
      if ( $type=="general" ){
         // POŘADÍ VSTUPNÍCH SUBSTRINGŮ JE DANÉ TABULKOU!
        WHILE(list($k,$i)=explode(",","birthday, gender, bodytype, orientation, cat, country, city, height, weight, search_gender, sign, regdate, editdate, usertype")):
          IF ( $k>=4 AND $k<=19 AND $k<>14 AND $k<>18):
             // Zde se vytváří
             switch($i):
                case "cat": $i="purposes"; // přejmenovat požadavek na jméno sloupce
                case "sign": $i="horo"; // přejmenovat požadavek na jméno sloupce
                case "regdate": CorrectDate($i);
                case "editdate": CorrectDate($i);
                default:
                $this->query->columns .= (IsAccess($sr[$k])) ? ",$i" : "";
             endswitch;
          ENDIF;
        ENDWHILE;
      return $this->query->columns;
     }
   }



(Vypadá to že while se zacyklilo)
Alphard
Profil
Není rozumné volat explode() znovu při každé iteraci, nikdy se nedostanete dál než k prvnímu prvku. Jak má fungovat ten list nevím, zpracuje jen první 2 proměnné, žádná z nich nebude klíč. Switch nebude fungovat správně, protože v jednotlivých prvcích pole budou na začátku mezery. Opravdu chcete vše nechat propadnout, nemá tam být i break?

Měl byste se vrátit k základům.
kuba123
Profil *
break tam nemá být, ten je správně
peta
Profil
explode - rozdeli string do pole podle carky, tato operace se vzdy zdari pro tvuj string
list - vytahne ve tvem pripade prvni 2 prvky z pole, tj $k='birthday'; $i=' gender'; (viz Alphard, explodujes podle carky bez mezery, takze mezera zustava), tato operace se pro tve pole vzdy zdari
WHILE(true) - takze, kdyz to cele prepises, zustane ti while s podminkou true, coz podle manualu znamena nekonecny cyklus, http://cz2.php.net/while
Navic je zcela zbytecne v kazdem cyklu opakovat tutez operaci, viz Alphard.

Mno, a pak tu mas ty dalsi veci, ktere Alphard zminuje.
$i=' gender'; - jestlize $i bude vzdy gender, pak je zbytecny switch($i), protoze vysledek bude vzdy
$this->query->columns .= (IsAccess($sr[$k])) ? ",$i" : "";
A protoze $k bude vzdy $k='birthday';, tak nedojde ani k tomuhle ifu:
IF ( $k>=4 AND $k<=19 AND $k<>14 AND $k<>18): // navic si nejsem jisty, zda php zkousne <> misto !== a tez je rozdil mezi && a and. Prijde mi to jako prepis neceho z packalu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0