• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل با extends کردن
#1
سلام دوستان من یک کلاس ساختم و میخوام یک کلاس دیگه رو به این کلاس extends کنم ولی نمیشه لطفا کمک کنید.

من سه تا فایل php ساختم
به صورت زیر

-- این یک فرم ثبت نام هست که اگر کاربری یک بار ثبت نام کنه و اگر دو باره با همون ایمیل بخواد ثبت نام کنه دیکه اجازه نمیده و میگه شما قبلا ثبت نام کردید.
-- حالا مشکل من اینه که توی فایل test2.php من میخوام قسمت اتصال به پایگاه داده
کد پی‌اچ‌پی:
$link mysql_connect("$c""$bv""$av"); 
یوزرنیم ، پسورد و نام هاست رو از توی فایل configuration.php اون ها رو extends کنم همون طور که توی test2.php می بینید.
حالا مشکل من اینه که وقتی extends JConfig رو قرار میدم و به این صورت مینویسم class ModJnSampleFormsRegister extends JConfig وقتی submit رو میزنم تا اطلاعاتی که توی فرم وارد کردم ذخیره بشن صفحه بعد فقط یک صفحه سفید میاد و این کار انجام نمیشه
ولی اگر توی
کد پی‌اچ‌پی:
$link mysql_connect("localhost""root""root"); 
به صورت دستی یوزرنیم ، پسورد و نام هاست رو بدم کار میکنه و مشکلی نداره

-- قبلا یک بار به این صورت کد نوشته بودم مشکلی نداشت کار میکرد ولی الان با اضافه کردن extends JConfig کار نمیکنه
-- در ضمن با mamp server نسخه ویندوز کار میکنم


نام فایل: test.php
کد پی‌اچ‌پی:
<form method="post" action="test2.php">
    <
hgroup>
        <
h3>ثبت نام اولیه کلاس ها</h3
    </
hgroup>
    <
table>
        <
tr>
            <
td><label for="register-name">نام و نام خانوادگی:* </label></td>
            <
td><input type="text" name="name" id="register-name" required aria-required="true"></td>
        </
tr>
        <
tr>
            <
td><label for="register-email">ایمیل:* </label></td>
            <
td><input type="text" name="email" id="register-email" required aria-required="true"></td>
        </
tr>
        <
tr>
            <
td><label for="register-mobile">شماره موبایل: </label></td>
            <
td><input type="text" name="mobile" id="register-mobile" maxlength="11"></td>
        </
tr>
        <
tr>
            <
td><label for="register-city">شهر: </label></td>
            <
td><input type="text" name="city" id="register-city"></td>
        </
tr>
        <
tr>
            <
td><label for="register-address">آدرس: </label></td>
            <
td><textarea name="address"></textarea></td>
        </
tr>
        <
tr>
            <
td><input type="submit" name="submit" value="Submit"></td>
        </
tr>
    </
table>
</
form


نام فایل: test2.php
کد پی‌اچ‌پی:
<?php

class ModJnSampleFormsRegister extends JConfig
{


    public function 
Forms()
    {
        


        
$name $_POST['name']; 
        
$email $_POST['email'];
        
$mobile $_POST['mobile'];
           
$city $_POST['city'];
           
$address $_POST['address'];


            
$Variables = new JConfig();
            
$av=$Variables->password;
            
$bv=$Variables->user;
            
$c=$Variables->host;
            
$d=$Variables->db;
            

        
$link mysql_connect("$c""$bv""$av");

        if(!
$link)
        {
            echo 
'cannot connect database';
            exit;
        }

        
mysql_query("SET character_set_results=utf8;",$link);
        
mysql_query("SET character_set_client=utf8;",$link);
        
mysql_query("SET character_set_connection=utf8;",$link);
        
mysql_query("SET character_set_database=utf8;",$link);
        
mysql_query("SET character_set_server=utf8;",$link);

        
mysql_select_db('$db');
        
        
$query1 "SELECT email from jnevis_jn_ads_customer WHERE email = '$email'";           
        
$result1 mysql_query($query1);

        if(!
$result1)
        {
            echo 
'کوئری مشکل دارد';
            exit;
        }

        while(
$Row mysql_fetch_object($result1))
        {
            
$fg $Row->email;
        }
      



        if(
$email != $fg)
        
        
$query "insert into jnevis_jn_ads_customer
                (name,email,mobile,city,address) values
                ('"
.$name."','".$email."','".$mobile."','".$city."','".$address."')";
        

        
$result mysql_query($query);

        if(
$result)
            echo 
mysql_affected_rows().'<b>ثبت نام شما انجام شد</b>';


        else{
            echo 
'قبلا ثبت نام کردید '.$email.' شما با ایمیل';
            exit;
        }

        
mysql_close($link);
    }
}

?>




<?php


     $t 
= new ModJnSampleFormsRegister();
    
$x $t->Forms();
    echo 
$x

?>



نام فایل: configuration.php
کد پی‌اچ‌پی:
<?php
class JConfig {
    public 
$offline '0';
    public 
$offline_message 'این سایت موقتا به دلیل تعمیرات در دسترس نیست.<br /> لطفا بعداً مراجعه فرمایید.';
    public 
$display_offline_message '1';
    public 
$offline_image '';
    public 
$sitename 'mhtk';
    public 
$editor 'tinymce';
    public 
$captcha '0';
    public 
$list_limit '20';
    public 
$access '1';
    public 
$debug '0';
    public 
$debug_lang '0';
    public 
$dbtype 'mysqli';
    public 
$host 'localhost';
    public 
$user 'root';
    public 
$password 'root';
    public 
$db 'joomla_test';
    public 
$dbprefix 'jnevis_';
    public 
$live_site '';
    public 
$secret '0gK8tdLUhqxCFHEk';
    public 
$gzip '0';
    public 
$error_reporting 'default';
    public 
$helpurl 'https://help.joomla.org/proxy/index.php?option=com_help&keyref=Help{major}{minor}:{keyref}';
    public 
$ftp_host '';
    public 
$ftp_port '';
    public 
$ftp_user '';
    public 
$ftp_pass '';
    public 
$ftp_root '';
    public 
$ftp_enable '0';
    public 
$offset 'UTC';
    public 
$mailonline '1';
    public 
$mailer 'mail';
    public 
$mailfrom '';
    public 
$fromname 'mhtk';
    public 
$sendmail '/usr/sbin/sendmail';
    public 
$smtpauth '0';
    public 
$smtpuser '';
    public 
$smtppass '';
    public 
$smtphost 'localhost';
    public 
$smtpsecure 'none';
    public 
$smtpport '25';
    public 
$caching '0';
    public 
$cache_handler 'file';
    public 
$cachetime '15';
    public 
$cache_platformprefix '0';
    public 
$MetaDesc '';
    public 
$MetaKeys '';
    public 
$MetaTitle '1';
    public 
$MetaAuthor '1';
    public 
$MetaVersion '0';
    public 
$robots '';
    public 
$sef '1';
    public 
$sef_rewrite '0';
    public 
$sef_suffix '0';
    public 
$unicodeslugs '0';
    public 
$feed_limit '10';
    public 
$feed_email 'none';
    public 
$log_path 'C:\\MAMP\\htdocs\\joomla2/logs';
    public 
$tmp_path 'C:\\MAMP\\htdocs\\joomla2/tmp';
    public 
$lifetime '15';
    public 
$session_handler 'database';
    public 
$memcache_persist '1';
    public 
$memcache_compress '0';
    public 
$memcache_server_host 'localhost';
    public 
$memcache_server_port '11211';
    public 
$memcached_persist '1';
    public 
$memcached_compress '0';
    public 
$memcached_server_host 'localhost';
    public 
$memcached_server_port '11211';
    public 
$redis_persist '1';
    public 
$redis_server_host 'localhost';
    public 
$redis_server_port '6379';
    public 
$redis_server_auth '';
    public 
$redis_server_db '0';
    public 
$proxy_enable '0';
    public 
$proxy_host '';
    public 
$proxy_port '';
    public 
$proxy_user '';
    public 
$proxy_pass '';
    public 
$massmailoff '0';
    public 
$MetaRights '';
    public 
$sitename_pagetitles '0';
    public 
$force_ssl '0';
    public 
$session_memcache_server_host 'localhost';
    public 
$session_memcache_server_port '11211';
    public 
$session_memcached_server_host 'localhost';
    public 
$session_memcached_server_port '11211';
    public 
$frontediting '1';
    public 
$cookie_domain '';
    public 
$cookie_path '';
    public 
$asset_id '1';

  پاسخ
تشکر شده توسط :
#2
Huh
extend چرا؟ نیازی نداری که... اگر میخوای به متغیر های داخل این فایل configuration.php دسترسی پیدا کنی فقط نمونه شو بساز: ;()configs = new JConfig$
extend بیشتر برای Override کردن و استفاده از متدهای کلاس والد/super هستش - یا تغییر رفتار اونها

نکته 1: در ضمن مقادیری که ثابت هستن رو با const یا static تعریف کن.
به صرفه تر، اصولی تر و بهینه تره
نکته 2: برای این کلاس شما، از نظر طراحی و اصول شی گرایی کلاس نوع final بهترینه: final class JConfig
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط : Null
#3
کاری که گفتین رو انجام دادم ولی نشد.
میشه این تیکه کدو بنویسین و بگین کجا قرارش بدم
  پاسخ
تشکر شده توسط :
#4
خود شما هم انجامش دادی:
کد پی‌اچ‌پی:
$Variables = new JConfig();
            
$av=$Variables->password;
            
$bv=$Variables->user;
            
$c=$Variables->host;
            
$d=$Variables->db

فقط extends JConfig رو از class ModJnSampleFormsRegister حذف کن...
این کامپونت مال جوملا هستش؟
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط :
#5
اره دارم برای جوملا 3 یک ماژول می نویسم.


این تیکه کد که خب این طوری هست و extends JConfig رو از class ModJnSampleFormsRegister حذف کردم وقتی submit رو میزنم تا داده های فرم ذخیره بشن این کار انجام نمیشه و فقط یک صفحه سفید میاد.
فکر کنم ERROR باشه چون MAMP فکر کنم ERROT ها رو نشون نمیده ولی WAMP یا XZAMP نشون میدن
کد پی‌اچ‌پی:
$Variables = new JConfig();
            
$av=$Variables->password;
            
$bv=$Variables->user;
            
$c=$Variables->host;
            
$d=$Variables->db;
            

        
$link mysql_connect("$c""$bv""$av");

        if(!
$link)
        {
            echo 
'cannot connect database';
            exit;
        }

        
mysql_query("SET character_set_results=utf8;",$link);
        
mysql_query("SET character_set_client=utf8;",$link);
        
mysql_query("SET character_set_connection=utf8;",$link);
        
mysql_query("SET character_set_database=utf8;",$link);
        
mysql_query("SET character_set_server=utf8;",$link);

        
mysql_select_db('$db'); 


حالا من سه تا فایل دیگه به نام های register.html ، register.php و ch7-1.php درست کردم و کد هامو یکم تغییر دادم ولی بازم نشد. لطفا اگه میشه راهنمایی کن ممنون.
اینجا من فعلا خواستم به متغییر پسورد توی فایل configuration.php دسترسی داشته باشم.

نام فایل register.html
کد پی‌اچ‌پی:
<form method="post" action="modules/mod_jn_sample/forms/ch7-1.php">
    <
hgroup>
        <
h3>ثبت نام اولیه کلاس ها</h3
    </
hgroup>
    <
table>
        <
tr>
            <
td><label for="register-name">نام و نام خانوادگی:* </label></td>
            <
td><input type="text" name="name" id="register-name" required aria-required="true"></td>
        </
tr>
        <
tr>
            <
td><label for="register-email">ایمیل:* </label></td>
            <
td><input type="text" name="email" id="register-email" required aria-required="true"></td>
        </
tr>
        <
tr>
            <
td><label for="register-mobile">شماره موبایل: </label></td>
            <
td><input type="text" name="mobile" id="register-mobile" maxlength="11"></td>
        </
tr>
        <
tr>
            <
td><label for="register-city">شهر: </label></td>
            <
td><input type="text" name="city" id="register-city"></td>
        </
tr>
        <
tr>
            <
td><label for="register-address">آدرس: </label></td>
            <
td><textarea name="address"></textarea></td>
        </
tr>
        <
tr>
            <
td><input type="submit" name="submit" value="Submit"></td>
        </
tr>
    </
table>
</
form

نام فایل: register.php
کد پی‌اچ‌پی:
<?php

class ModJnSampleFormsRegister
{

    protected 
$item;

    public function 
setFor($r)
    {
        
$this->item $r;
    }

    public function 
getFor()
    {
        return 
$this->item;
    }

    public function 
Forms()
    {
        



        
$name $_POST['name']; 
        
$email $_POST['email'];
        
$mobile $_POST['mobile'];
           
$city $_POST['city'];
           
$address $_POST['address'];



        
$link mysql_connect("localhost""root"$this->item);

        if(!
$link)
        {
            echo 
'cannot connect database';
            exit;
        }

        
mysql_query("SET character_set_results=utf8;",$link);
        
mysql_query("SET character_set_client=utf8;",$link);
        
mysql_query("SET character_set_connection=utf8;",$link);
        
mysql_query("SET character_set_database=utf8;",$link);
        
mysql_query("SET character_set_server=utf8;",$link);

        
mysql_select_db('joomla_test');
        
        
$query1 "SELECT email from jnevis_jn_ads_customer WHERE email = '$email'";           
        
$result1 mysql_query($query1);

        if(!
$result1)
        {
            echo 
'کوئری مشکل دارد';
            exit;
        }

        while(
$Row mysql_fetch_object($result1))
        {
            
$fg $Row->email;
        }
      



        if(
$email != $fg)
        
        
$query "insert into jnevis_jn_ads_customer
                (name,email,mobile,city,address) values
                ('"
.$name."','".$email."','".$mobile."','".$city."','".$address."')";
        

        
$result mysql_query($query);

        if(
$result)
            echo 
mysql_affected_rows().'<b>ثبت نام شما انجام شد</b>';


        else{
            echo 
'قبلا ثبت نام کردید '.$email.' شما با ایمیل';
            exit;
        }

        
mysql_close($link);
    }
}

?>

نام فایل: ch7-1.php
کد پی‌اچ‌پی:
<?php
include_once('register.php');

     
$t = new ModJnSampleFormsRegister();
     

$Variables = new JConfig();
$av=$Variables->password;


     
$t->setFor($av);
    
$x $t->Forms();
    echo 
$x
    echo 
$t->getFor();    

?>
  پاسخ
تشکر شده توسط :
#6
نقل قول:دارم برای جوملا 3 یک ماژول می نویسم.
یا خدا Angel


Idea نمایش خطا ها به نوع/نرم افزار سرور ارتباطی نداره، بلکه به تنظیمان PHP یا همون php.ini ربط داره(بجز htaccess)

این کد رو موقتی در اول همه فایلهات بزن ببین چه خطایی میده موقع submit:
کد پی‌اچ‌پی:
error_reporting(E_ALL);
ini_set('display_errors'TRUE);
ini_set('log_errors'TRUE); 
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط :
#7
من تازه کارم ببخشید.

کدی که دادید رو گذاشتم پیغام زیر رو داد



Warning: main(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in C:\MAMP\htdocs\joomla2\modules\mod_jn_sample\forms\ch7-1.php on line 7

Fatal error: Class 'JConfig' not found in C:\MAMP\htdocs\joomla2\modules\mod_jn_sample\forms\ch7-1.php on line 7



فکر کنم تذکد امنیتی میده و باید یک سری تنظیمات انجام بدم ولی دقیقا نمیدونم چه کاری باید بکنم[/code]
  پاسخ
تشکر شده توسط :
#8
طبق اخطاری که داد من کد زیر رو توی فایل register.php به اول کد هام اضافه کردم

کد پی‌اچ‌پی:
date_default_timezone_set('Asia/Tehran'); 

الان فقط خطای زیر رو میده:

Fatal error: Class 'JConfig' not found in C:\MAMP\htdocs\joomla2\modules\mod_jn_sample\forms\ch7-1.php on line 7
  پاسخ
تشکر شده توسط : Y.P.Y
#9
نقل قول:Class 'JConfig' not found
یعنی PHP نمی تونه کلاس JConfig رو پیدا کنه
پس باید فایل این کلاس JConfig رو که configuration.php هست رو Include کنی، مثل فایل register.php که include کردی

مثلاً اینطوری:
نام فایل: ch7-1.php
کد پی‌اچ‌پی:
<?php
include_once('register.php');
include_once(
'configuration.php'); // <------------- !!

     
$t = new ModJnSampleFormsRegister();
     

$Variables = new JConfig();
$av=$Variables->password;


     
$t->setFor($av);
    
$x $t->Forms();
    echo 
$x
    echo 
$t->getFor();    

?>
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط :
#10
فایل configuration.php رو یک کپی گرفتم و اوردم توی پوشه ای که سه تا فایل register.html ، register.php و ch7-1.php قرار داره کپی کردم همون طور که شما گفتید کد زیر رو اضافه کردم
کد پی‌اچ‌پی:
include_once('configuration.php'); 

کاملا درست شد و کار میکنه.
--------
اما من باید به اون configuration.php اصلی که چند تا پوشه از پوشه من که توش فایل های register.html ، register.php و ch7-1.php هستن عقب تره رو include کنم .توی ادرس دهی include نمیشه فایل های عقب تر یعنی والد رو ادرس بدم فقط فایل هایی که توی همون پوشه هستن و پوشه جلوتر یعنی فرزند رو میتونم آدرس بدم.

راهی وجود داره ؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان