Konuyu görüntüle
IUCODERS FORUM > Programlama > PHP > hata nerde
Yazar
cguzel


avatar

Kayıt: 11.02.2010
03.05.2010-16:31 #68459
merhaba arkadaşlar. aşağıdaki php kodunda bir hata veriyor. hatayı bu kısımda gösteriyor. " return(&conn); "

sebebi ne olabilir. çözemedim bir türlü.
parametreler doğru. fakat conn da bir hata var yine algılayamadım. thinking


public function getConnection()
{
if($this->conn == "")
{
$conn = mysql_connect(HOST,USR,PSW);
mysql_select_db(DB);
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';");
$this->conn = $conn;
}
return($conn);
}





Yazar
cguzel


avatar

Kayıt: 11.02.2010
03.05.2010-16:33 #68460
Notice: Undefined variable: conn in C:wampwwwdenemedb.php on line 20
merhaba




HATA YUKARIDAKİ GİBİ. "merhaba" yazısını database den alıyor. bağlantıda bir sorun olsa merhaba yazısı çıkmaz diye düşünüyorum.





Yazar
fonemi


avatar

Kayıt: 09.01.2007
03.05.2010-16:39 #68461
return $this->conn olmalı





Yazar
cguzel


avatar

Kayıt: 11.02.2010
03.05.2010-16:43 #68462
evet. "this" ekleyince o hata kayboldu.
fakat şimdi başka bir yerden kaynaklı mantıksal hata var gibi geliyor.

teşekkürler.





Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
03.05.2010-16:51 #68463
<?php
//database bağlantı sınıfı
	class Database {
		private $db_host = DB_SERVER; 					//DB Host
		private $db_user = DB_SERVER_USERNAME;			//DB User
		private $db_pass = DB_SERVER_PASSWORD;			//DB Password
		private $db_name = DB_DATABASE;					//DB Name
		
		private $con = FALSE;								//Control of connection
		private $result = array(); 						//results of SQL queries
		
		function Connect () {
			if(!$this->con){									//if $con is false, state is true
				$con_mysql = @mysql_connect($this->db_host, $this->db_user, $this->db_pass );
				if($con_mysql) { 								//if mysql is connected
					$con_db = @mysql_select_db($this->db_name);
					if($con_db) {								//if db is selected
						$this->con = TRUE;
						@mysql_query("SET NAMES 'utf8'");
						@mysql_query("SET CHARACTER SET utf8");
						@mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");
						session_start();
						return TRUE;							//if db is selected the connection is OK
					} else {
						return FALSE;							//db is not selected		
					}
				} else {
					return FALSE;								//mysql is not connected
				}
			} else {
				return TRUE;									//$con is false, so return true
			}
		}
		
		function Disconnect() {
			if($this->con) {									//if connection is open
				if(@mysql_close()) {							//if the connection is closed down
					$this->con = FALSE;						//the status of the connection is reseted
					$this->result = null;					//the result value of the queries is free
					$this->connect();							
					$this->db_name = DB_DATABASE;
					return TRUE;								//return TRUE
				} else {
					return FALSE;								//return FALSE
				}
			}
		}
	}
?>






I see the ghosts of navigators but they are lost







Yazar
cguzel


avatar

Kayıt: 11.02.2010
03.05.2010-16:56 #68464
teşekkürler tekrardan





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
04.05.2010-01:43 #68471
public function getConnection()
{
if($this->conn == "")
{
$conn = mysql_connect(HOST,USR,PSW);
mysql_select_db(DB);
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';");
$this->conn = $conn;
}
return($conn);
}

Burada $conn değişkenini if bloğu içinde tanımladığın için dışarıda "Undefined variable" uyarısı alıyorsun. Değişkeni if bloğundan önce tanımlaman gerekiyor ($conn=false; gibi). Hatanın teknik açıklaması bu. Fakat algoritmik açıdan zaten fenomi'nin dediği gibi return($this->conn) şeklinde olması gerekiyor.



@mrflz

session_start() fonksiyonunun veritabanı bağlantısı içinde çağrılmaması daha uygundur. Özel bir session handler kullandığınızda karışıklık yaratabilir. Bir de Disconnect() metodunun içinde neden tekrar Connect() çağrılıyor?

Bu arada tek bir instance'ı olması gereken class'lar için singleton pattern kullanmanızı öneririm.





Let`s make this world a better place to live !

Yazar
cguzel


avatar

Kayıt: 11.02.2010
05.05.2010-00:59 #68492
arkadaşlar. sorunumu çözdüm.
hata veriyor dediğim kısım gibi bir çok hata aldım. Fakat dosyaları olduğu gibi bir linux servere aktarıp çalıştırdığımda bu hataların hiç birini vermedi. yani bu hataları sadece benim bilgisayarımda veriyor.

hatalardan biri, bu başlıktaki ilk sorumdu. onun dışında kendi bilgisayarımda localhostta çalışırken değişkenlerimde hata vermemesi için en başta hepsine false ataması yapıyodum. ama host üzerinde bu hatayı vermedi.
diğer bir hata verdiği kısım ise " session_start() "
" A session had already been started - ignoring session_start() in C:wampwww ..... " hatası idi.
bunun sebebi ne olabilir. bu benim diğer projeler içinde kendi bilgisayarımda çalışmama engel gibi görünüyor.

biri yardım etsin thinking





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
05.05.2010-01:16 #68494
cguzel yazdi
 
arkadaşlar. sorunumu çözdüm.
hata veriyor dediğim kısım gibi bir çok hata aldım. Fakat dosyaları olduğu gibi bir linux servere aktarıp çalıştırdığımda bu hataların hiç birini vermedi. yani bu hataları sadece benim bilgisayarımda veriyor.

hatalardan biri, bu başlıktaki ilk sorumdu. onun dışında kendi bilgisayarımda localhostta çalışırken değişkenlerimde hata vermemesi için en başta hepsine false ataması yapıyodum. ama host üzerinde bu hatayı vermedi.
diğer bir hata verdiği kısım ise " session_start() "
" A session had already been started - ignoring session_start() in C:wampwww ..... " hatası idi.
bunun sebebi ne olabilir. bu benim diğer projeler içinde kendi bilgisayarımda çalışmama engel gibi görünüyor.

biri yardım etsin thinking

PHP hata denetimi konfigürasyonlarından kaynaklanıyor. Kendi bilgisayarında error_reporting = E_ALL | E_STRICT olarak ayarlanmıştır. Internetteki sunucular genellikle sadece yüksek seviyeli hataları print etmek üzere konfigüre edilmiştir. Yoksa senin hatalarını başkaları da tespit edebiliyorsa bu saldırganlar için bir avantajdır.





Let`s make this world a better place to live !

Yazar
cguzel


avatar

Kayıt: 11.02.2010
05.05.2010-15:35 #68505
peki bunu değiştirmek gereklimi.
benim için bir sorun teşkil edermi tam olarak.
hangisine göre kendimi ayarlamalıyım.





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
05.05.2010-16:47 #68506
Senin bir şeyleri değiştirmene gerek yok, bu olay sadece hata mesajlarının print edilmesi ile alakalı. Yalnızca header gönderen bir fonksiyondan önce olulşabilecek uyarılar ekstradan "cannot modify header information" hatasına neden olabilir. Local'de ignore etmek istediğin uyarılar varsa error_reporting değerini ona göre değiştirebilirsin (Detaylar: http://www.php.net/manual/en/errorfunc.constants.php) Ben local'de "E_ALL | ~E_NOTICE" değerini tercih ederim. Ama PHP'de yeni olanlar için "E_ALL | E_STRICT" daha uygundur.





Let`s make this world a better place to live !

Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb