Dalam artikel kali
ini, saya mencoba merangkum beberapa pertanyaan yang sering ditanyakan seputar error di php yang mereka jumpai dan bagaimana cara
mengatasinya.
Bunyi Error:
1.
Warning: mysql_fetch_array(): supplied argument is not
2.
a valid MySQL result resource in ....
1.
Warning: mysql_num_rows(): supplied argument is not
2.
a valid MySQL result resource in ...
Error di atas disebabkan ada query SQL yang salah. Bisa jadi karena sintaks perintah query SQL nya salah, misalnya kurang tanda petik untuk menyatakan string dll. Selain itu bisa juga terjadi karena nama field dan tabel yang salah penulisannya.
Solusi:
Coba cek kembali statement query SQL Anda. Pastikan tidak ada lagi kesalahan dalam penulisannya. Untuk proses debugging query SQL (mengetahui letak kesalahannya), Anda bisa menambahkan statement
die(mysql_error())
pada perintah mysql_query()
nya. Contoh:1.
$query
=
"....."
;
2.
mysql_query(
$query
)
or
die
(mysql_error());
3.
.
4.
.
Bunyi Error:
1.
Warning: session_start() [
function
.session-start]:
2.
Cannot send session cookie - headers already sent by
3.
(output started at ... ) in ... on line ...
1.
Warning: session_start() [
function
.session-start]:
2.
Cannot send session cache limiter - headers already sent
3.
(output started at ...) in ... on line ...
Error di atas biasanya terjadi pada penggunaan session. Sewaktu memberikan perintah
session_start()
,
terdapat baris perintah di atasnya yang menampilkan string atau kode
html ke browser. Sebagai contoh, perhatikan script berikut ini:1.
<?php
2.
echo
"Hallo..."
;
3.
session_start();
4.
?>
1.
<html>
2.
<head>
3.
<title>....</title>
4.
</head>
5.
<?php
6.
session_start();
7.
?>
session_start()
. Nah… inilah yang menyebabkan error. Selain contoh di atas, error juga bisa muncul dari script yang berbentuk seperti ini1.
<?php
2.
include
"header.php"
;
3.
session_start();
4.
?>
session_start()
tidak ada echo atau
kode html, namun error akan tetap muncul apabila isi dari script
header.php terdapat echo atau kode html juga, misalnyaheader.php
1.
<?php
2.
echo
"hallo"
;
3.
?>
Pastikan sebelum perintah
session_start()
tidak terdapat perintah echo atau kode html apapun.Bunyi Error:
1.
Warning: Cannot modify header information – headers already sent by
2.
(output started at ...) in ...
Peringatan di atas biasanya muncul ketika Anda melakukan redirecting menggunakan perintah
1.
header(
"Location: ..."
);
header("Location: ...")
tidak boleh ada string apapun yang ditampilkan di browser, meskipun itu kode HTML (sama seperti penyebab error di session_start()
sebelumnya). Sebagai contoh perhatikan script berikut ini:1.
<?php
2.
echo
"<p>Hallo Apa kabar?</p>"
;
3.
header(
"Location: test.php"
);
4.
?>
header()
terdapat
string yang ditampilkan ke browser. Inilah yang mengakibatkan muncul
peringatan tsb. Lantas bagaimana dengan script berikut ini?1.
<?php
2.
$a
= 10;
3.
if
(
$a
< 0)
echo
"Nilai A negatif"
;
4.
else
header(
"Location: test.php"
);
5.
?>
header()
terdapat string yang ditampilkan ke browser. Mengapa demikian? ya..
meskipun di situ terdapat perintah untuk menampilkan string ke browser,
namun perintah tersebut tidak pernah dijalankan karena nilai $a
nya positif.Solusi:
Pastikan sebelum perintah
header("Location: ...")
tidak ada kode HTML atau perintah echo
apapun. Jika Anda mengincludekan suatu script di atas header("Location: ...")
pastikan dalam script yang diincludekan tersebut tidak ada kode HTML atau echo
.Bunyi Error:
1.
Warning: mysql_connect() [
function
.mysql-connect]:
2.
Access denied
for
user ‘root’@'localhost’ (using password: YES) in ...
Error di atas disebabkan karena koneksi yang gagal ke MySQL. Penyebab gagalnya bisa jadi disebabkan nama user atau password yang salah.
Solusi:
Pastikan username dan password koneksi ke MySQL Anda sudah benar ketika menggunakan perintah koneksi
mysql_connect("namahost", "namauser", "passworduser");
Bunyi Error:
1.
Parse error: syntax error, unexpected T_STRING,
2.
expecting T_OLD_FUNCTION
or
T_FUNCTION
or
T_VAR
or
‘}’ in ...
Penyebab pastinya, saya kurang mengetahuinya. Namun biasanya ini terjadi karena penggunaan versi PHP yang rendah (versi di bawah PHP 5) untuk menjalankan script PHP yang menggunakan OOP.
Solusi:
Coba upgrade versi PHP Anda, atau gunakan PHP dengan versi yang lebih tinggi.
Bunyi Error:
1.
Parse error: syntax error, unexpected T_ELSE in ...
Error tersebut muncul sebagai akibat penulisan sintaks IF … ELSE yang tidak sesuai aturan. Perhatikan contoh penggunaan IF ELSE yang salah di bawah ini
1.
<?php
2.
$a
= 5;
3.
if
(
$a
> 0)
$status
=
"A lebih besar dari 0"
4.
else
(
$a
< 0)
$status
=
"A lebih kecil dari 0"
5.
else
$status
=
"A sama dengan 0"
6.
?>
else ($a < 0)
kurang IF, seharusnya1.
<?php
2.
$a
= 5;
3.
if
(
$a
> 0)
$status
=
"A lebih besar dari 0"
;
4.
else
if
(
$a
< 0)
$status
=
"A lebih kecil dari 0"
;
5.
else
$status
=
"A sama dengan 0"
;
6.
?>
Pastikan struktur statement yang Anda gunakan berbentuk seperti ini
1.
<?php
2.
if
(syarat1) statement1;
3.
else
if
(syarat2) statement2;
4.
else
if
(syarat3) statement3;
5.
.
6.
.
7.
else
statementX;
8.
?>
01.
<?php
02.
if
(syarat1)
03.
{
04.
statement;
05.
statement;
06.
.
07.
.
08.
}
09.
else
if
(syarat2)
10.
{
11.
statement;
12.
statement;
13.
.
14.
.
15.
}
16.
.
17.
.
18.
else
19.
{
20.
statement;
21.
statement;
22.
.
23.
.
24.
}
25.
?>
Bunyi Error:
1.
Fatal error: Call to undefined
function
: ...
Error tersebut disebabkan karena nama function yang digunakan tidak ada atau tidak dikenal oleh PHP. Jika function tersebut adalah built in function, misalnya
str_split()
bisa jadi hal ini disebabkan pada versi PHP yang digunakan belum ada
function tersebut. Jika function tersebut adalah function buatan
sendiri, bisa jadi anda lupa menyisipkan ke dalam script atau
meng-include-kannya.Solusi:
Jika function yang tidak dikenal adalah built in function, maka lakukan upgrade versi PHP yang lebih tinggi. Sedangkan jika function yang tidak dikenal adalah buatan sendiri, pastikan Anda sudah meng-includekan di dalam scriptnya sehingga bisa dikenal. Contohnya:
function.php
1.
<?php
2.
function
jumlah(
$a
,
$b
)
3.
{
4.
return
$a
+
$b
;
5.
}
6.
?>
1.
<?php
2.
include
"function.php"
;
3.
echo
jumlah(9, 10);
// akan menghasilkan 19
4.
?>
script.php
1.
<?php
2.
function
jumlah(
$a
,
$b
)
3.
{
4.
return
$a
+
$b
;
5.
}
6.
7.
echo
jumlah(9, 10);
// akan menghasilkan 19
8.
?>
Bunyi Error:
1.
Parse error: parse error, unexpected
$end
Error di atas disebabkan karena kurangnya tanda penutup kurung kurawal. Contohnya:
1.
<?php
2.
if
(
$a
> 1)
3.
{
4.
echo
"Nilai A lebih dari 1"
;
5.
?>
1.
<?php
2.
while
(
$a
> 1)
3.
{
4.
.
5.
.
6.
.
7.
?>
<?php
dan <?
. Contohnya01.
<?php
02.
if
(syarat)
03.
{
04.
statement1;
05.
statement2;
06.
?>
07.
08.
<?
09.
statement3;
10.
statement4;
11.
}
12.
?>
<?
saja. Nah... terkadang suatu server hanya membolehkan tanda pembuka script PHP menggunakan <?php
, sehingga untuk blok kedua tidak dianggap sebagai script, dan.. akibatnya statement IF nya dianggap tidak ada tanda }
penutup. Solusi:
Pastikan tanda kurung kurawal penutup tidak lupa menuliskannya. Jika ternyata kasus yang Anda hadapi sama seperti contoh kasus terakhir (perbedaan tanda pembuka script PHP), konsistenkan penulisan tanda pembukanya menggunakan
<?php
supaya aman.Bunyi Error:
1.
Parse error: syntax error, unexpected T_STRING
Error tersebut disebabkan karena penggunaan tanda petik (double quote atau single quote) yang tidak tepat untuk menyatakan suatu string. Sebuah string harus diapit oleh dua buah tanda petik. Sebagai contoh:
1.
<?php
2.
$a
=
"ini sebuah string"
;
3.
?>
1.
<?php
2.
$a
=
'ini sebuah string'
;
3.
?>
1.
<?php
2.
$a
=
"ini sebuah "
string";
3.
?>
1.
<?php
2.
$a
=
'ini sebuah '
string';
3.
?>
Solusi:
Pastikan di dalam sebuah string, anda mengapitnya dengan hanya 2 buah tanda petik saja. Jika Anda bermaksud menyisipkan tanda petik dalam sebuah string, gunakan tanda
\"
atau \'
, contoh1.
<?php
2.
$a
=
"ini sebuah \" string"
;
3.
?>
1.
<?php
2.
$a
=
'ini sebuah \' string'
;
3.
?>
Bunyi Error:
1.
Notice: Undefined index: ...
1.
Notice: Undefined variable: ...
Sebenarnya itu bukan error, namun sekedar peringatan saja bahwa ada variabel atau index array yang belum terdefinisi sebelumnya. Di beberapa versi PHP peringatan tersebut muncul, namun di versi yang lain tidak muncul. Berikut ini contohnya:
1.
<?php
2.
if
(
$a
> 0)
3.
{
4.
....
5.
}
6.
?>
$a
langsung diberikan statement pengecekan IF, padahal nilai $a
ini tidak ada sebelumnya. Nah... di beberapa versi PHP, akan muncul peringatan 1.
Notice: Undefined variable: a
$a
ini sudah didefinisikan sebelumnya misalnya1.
<?php
2.
$a
= 10;
3.
if
(
$a
> 0)
4.
{
5.
....
6.
}
7.
?>
1.
<?php
2.
if
(
$_GET
[
'test'
] == 0)
3.
{
4.
....
5.
}
6.
?>
$_GET['test']
belum terdefinisi sebelumnya atau belum ada nilainya (belum ada request GET untuk parameter 'test').Solusi:
Sebenarnya peringatan di atas bisa saja diabaikan karena tidak berpengaruh pada kinerja script atau proses yang terjadi di dalamnya. Namun, jika Anda ingin menghilangkan peringatan tersebut caranya adalah dengan memodifikasi parameter
1.
error_reporting
= ...
Tambahkanlah nilai "
& ~E_NOTICE
" pada nilai parameternya, contoh:1.
error_reporting
= E_ALL & ~E_NOTICE
Bunyi Error:
1.
Fatal error: Maximum execution time of ... seconds exceeded in ...
Error di atas disebabkan karena lama eksekusi sebuah script PHP telah mencapai batas maksimumnya. Jika Anda menggunakan AppServ atau XAMPP, default maximum execution time nya diset 30 detik. Jika lama eksekusi script yang Anda buat melebihi 30 detik, maka akan muncul error di atas.
Solusi:
Anda dapat meningkatkan atau menambah max execution time pada file php.ini, dengan cara carilah parameter
1.
max_execution_time = ...
1.
max_execution_time = 9999
Kalau perlu, lakukan analisis algoritma pada script Anda apabila dirasa tidak efisien sehingga mengakibatkan running time yang lama.
Bunyi Error:
Bukan Error sih, tapi kegagalan dalam proses upload file ketika Anda membuat script upload file.
Penyebab:
Kegagalan dalam proses upload file itu disebabkan oleh ukuran file yang terlalu besar melebihi batas maksimum yang diperbolehkan oleh PHP sesuai di file php.ini.
Solusi:
Anda dapat mengubah batas maksimum file size untuk upload ini dengan mengubah parameter
1.
upload_max_filesize = ...
1.
post_max_size = ...
Berikut ini contoh pengubahan batas maksimum upload file hingga 80 Mb.
1.
upload_max_filesize = 80M
1.
post_max_size = 80M
1.
<
input
type
=
"hidden"
name
=
"MAX_FILE_SIZE"
value
=
"80000000"
/>
Solusi di atas hanya akan bisa menyelesaikan permasalahan upload jika file diupload ke folder atau direktori tertentu yang ada di server. Namun, jika file diupload ke database server, seperti pada artikel lain yang pernah dibahas, maka solusi di atas tidak menyelesaikan masalah karena adanya batasan limit file size pada tipe data yang memungkinkan untuk menyimpan data file, misalnya tipe data blob, medium blob, atau long blob.
OK.. mudah-mudahan artikel di atas bisa bermanfaat bagi Anda yang ingin belajar PHP, namun terkendala beberapa macam error yang belum tahu penyebabnya dan solusinya.
0 komentar:
Post a Comment