Какво ще рече unexpected T_VARIABLE?

misho

Registered
Parse error: syntax error, unexpected T_VARIABLE

Получавам следната грешка, когато извикам метода connect. Защо? Как да си направя връзката към БД в класа? Ето и какво съм написал:

Код:
class CheckResult
 {
  function connect($name) {
   $link = mysql_connect('localhost', '***', '***') or die ('Не мога да се свържа с БД!');
   mysql_select_db('***', $link);
   mysql_query("SET CHARACTER SET utf8");  
  
   $info= mysql_query ("SELECT `name`, `last` FROM `list` WHERE `name` = '$name'") or die(mysql_error());
   $info= mysql_fetch_assoc ($info);
   return $info['last'];
  }

  const LASTVERSION_CHROME = $this->connect('Chrome');


}
 
Код:
 class CheckResult
 {
  function connect($name) {
   $link = mysql_connect('localhost', '***', '***') or die ('Не мога да се свържа с БД!');
   mysql_select_db('***', $link);
   mysql_query("SET CHARACTER SET utf8"); 
 
   $info= mysql_query ("SELECT `name`, `last` FROM `list` WHERE `name` = '$name'") or die(mysql_error());
   $info= mysql_fetch_assoc($info);
   return $info['last'];
  }

  const LASTVERSION_CHROME = $this->connect('Chrome');


}
 
И къде е разликата? :shock: Освен интервала след mysql_fetch_assoc, което не променя нищо. :lol:
 
Принципно тази грешка ти я дава, когато си забравил да завършиш реда със ; и на следващия има променлива или си забравил да поставиш . някъде, но тук не виждам такоав нещо :lol:
Когато дефинираш променлива или константа в клас, не можеш да задаваш стойността и да е променлива, дори и да започва с $this, защото класа още не е извикан ($c = new CheckResutl()) и $this все още не съществува :)
Така трябва да рабити :)

Код:
	class CheckResult{

		const LASTVERSION_CHROME = '';

		public function __construct(){

			$this -> LASTVERSION_CHROME = $this->connect('Chrome');
		}
		
		public function connect( $name ) {

			$link = mysql_connect( 'localhost', '', '' ) or die ( 'Не мога да се свържа с БД!' );
			mysql_select_db( '', $link );
			mysql_query( "SET CHARACTER SET utf8" ); 

			$info= mysql_query( "SELECT `name`, `last` FROM `list` WHERE `name` = '$name'" ) or die( mysql_error() );
			$info= mysql_fetch_assoc($info);
			return $info['last'];
			
		}

	}
 
Вече няма грешка, но има друг проблем. По-долу правя следната проверка:

Код:
if($version < self::LASTVERSION_CHROME)
{}
else {}
Проблемът е, че независимо каква стойност задам на LASTVERSION_CHROME в БД (по-голяма или по-малка от $version), винаги резултата е този от else. Когато не вземам информацията от БД, а си я въведа директно във файла, няма проблеми. :idea:
 
Замисли се дали наистина ти трябва константа при положение, че я променяш динамично. Няма смисъл.

Код:
class CheckResult{ 

      public $LASTVERSION_CHROME = ''; 

      public function __construct(){ 

         $this -> LASTVERSION_CHROME = $this->connect('Chrome'); 
      } 
       
      public function connect( $name ) { 

         $link = mysql_connect( 'localhost', '', '' ) or die ( 'Не мога да се свържа с БД!' ); 
         mysql_select_db( '', $link ); 
         mysql_query( "SET CHARACTER SET utf8" ); 

         $info= mysql_query( "SELECT `name`, `last` FROM `list` WHERE `name` = '$name'" ) or die( mysql_error() ); 
         $info= mysql_fetch_assoc($info); 
         return $info['last']; 
          
      } 

   }

И си проверявай с $this->LASTVERSION_CHROME

Константите не са направени за това, за което ги ползваш.
 
StormBreaker, направих го както ми каза. :wink:

Но се оказа, че това, което казах за проверката по-горе не е съвсем точно. Аз искам да сравня две така изглеждащи числа - 5.0.375.55. Ако въведа цифра от 1 до 9 или число близко до посоченото, резултата е какъвто очаквам, но ако напиша 10 или 10.52.0.2.555 или нещо подобно го приема за по-малко. За да го примее за поголямо трябва да напиша 60.52.0.2.555, например. Т.е. явно сравнява само първата цифра и при съвпаданеие само прави проверка и за следващите или...не знам. :lol:
Как да ги сравня реално? Да махна точките, за да се получи цяло число ли или има друг начин?
 
И аз се чудех как ще стане, но ги сравняваше, ратботеше, докато не пробвах с двуцифрено. Е, значи освен да махна точките, май друго не остана.
 

Back
Горе