{"id":2104,"date":"2025-09-11T15:33:35","date_gmt":"2025-09-11T12:33:35","guid":{"rendered":"https:\/\/saviorhost.com\/blog\/?p=2104"},"modified":"2026-10-22T22:20:29","modified_gmt":"2026-10-22T19:20:29","slug":"whmcs-promotionappliestoservice-hatasi-cozumu-orphan-service-fix-kupon-problemleri-rehberi","status":"publish","type":"post","link":"https:\/\/saviorhost.com\/blog\/whmcs-promotionappliestoservice-hatasi-cozumu-orphan-service-fix-kupon-problemleri-rehberi\/","title":{"rendered":"WHMCS Promotion::appliesToService Hatas\u0131 \u00c7\u00f6z\u00fcm\u00fc | Orphan Service Fix &#038; Kupon Problemleri Rehberi"},"content":{"rendered":"<p>WHMCS&#8217;te kupon veya promosyon uygularken kar\u015f\u0131n\u0131za \u00e7\u0131kan `Promotion::appliesToService(): Argument #1 ($serviceId) must be of type int, null given` hatas\u0131, sistemin hizmet kimli\u011fini okuyamad\u0131\u011f\u0131n\u0131 g\u00f6sterir. WHMCS, promosyonu bir hizmete ba\u011flamaya \u00e7al\u0131\u015f\u0131rken ortada ge\u00e7erli bir hizmet kayd\u0131 bulamaz.<\/p>\n<p>Bu hata \u00e7o\u011funlukla veritaban\u0131ndaki yetim (orphan) hizmet kay\u0131tlar\u0131ndan, silinmi\u015f \u00fcr\u00fcnlere ba\u011fl\u0131 kalan kuponlardan veya \u00fc\u00e7\u00fcnc\u00fc parti mod\u00fcllerin eksik parametre g\u00f6ndermesinden kaynaklan\u0131r. A\u015fa\u011f\u0131da hatan\u0131n k\u00f6k nedenlerini nas\u0131l tespit edece\u011finizi, aray\u00fcz ve SQL ile nas\u0131l d\u00fczeltece\u011finizi ve tekrar ya\u015fanmamas\u0131 i\u00e7in hangi \u00f6nlemleri alman\u0131z gerekti\u011fini bulacaks\u0131n\u0131z.<\/p>\n<div class=\"key-takeaways\">\n<p class=\"key-takeaways-title\"><strong>\u00d6nemli Noktalar<\/strong><\/p>\n<ul>\n<li>Hata, promosyonun hizmet kimli\u011fini null olarak almas\u0131ndan kaynaklan\u0131r; genellikle orphan hizmetler tetikler.<\/li>\n<li>\u00d6nce veritaban\u0131nda orphan kay\u0131tlar\u0131 tespit edin, sonra kuponun &#8220;Applies To&#8221; ayarlar\u0131n\u0131 kontrol edin.<\/li>\n<li>SQL ile toplu d\u00fczeltme yapmadan \u00f6nce mutlaka tam yedek al\u0131n.<\/li>\n<li>\u00dcr\u00fcn silmeden \u00f6nce ba\u011fl\u0131 hizmetleri ta\u015f\u0131mak, hatan\u0131n tekrar\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde \u00f6nler.<\/li>\n<\/ul>\n<\/div>\n<div class=\"table-of-contents\" role=\"navigation\" aria-label=\"\u0130\u00e7indekiler\">\n<p class=\"toc-title\"><strong>\u0130\u00e7indekiler<\/strong><\/p>\n<ul>\n<li><a href=\"#hatanin-teknik-nedeni\">Hatan\u0131n Teknik Nedeni<\/a><\/li>\n<li><a href=\"#hatayi-tetikleyen-senaryolar\">Hatay\u0131 Tetikleyen Senaryolar<\/a><\/li>\n<li><a href=\"#belirtiler\">Belirtiler<\/a><\/li>\n<li><a href=\"#teshis-adimlari\">Te\u015fhis (Diagnostik) Ad\u0131mlar\u0131<\/a><\/li>\n<li><a href=\"#cozum-yontemleri\">\u00c7\u00f6z\u00fcm Y\u00f6ntemleri<\/a><\/li>\n<li><a href=\"#onleyici-tedbirler\">\u00d6nleyici Tedbirler<\/a><\/li>\n<li><a href=\"#sss\">S\u0131k\u00e7a Sorulan Sorular<\/a><\/li>\n<\/ul>\n<\/div>\n<h2 id=\"hatanin-teknik-nedeni\">Hatan\u0131n Teknik Nedeni<\/h2>\n<p>`Promotion::appliesToService()` metodu, bir promosyonun belirli bir hizmete uygulan\u0131p uygulanamayaca\u011f\u0131n\u0131 kontrol eder. Bu metodun ilk parametresi olan `$serviceId`, integer t\u00fcr\u00fcnde bir hizmet kimli\u011fi bekler. \u00c7a\u011fr\u0131 s\u0131ras\u0131nda bu de\u011fer `null` olarak gelirse PHP, t\u00fcr uyu\u015fmazl\u0131\u011f\u0131 nedeniyle `TypeError` f\u0131rlat\u0131r.<\/p>\n<p>WHMCS&#8217;in normal ak\u0131\u015f\u0131nda her hizmet kayd\u0131n\u0131n `tblhosting` tablosunda benzersiz bir `id` de\u011feri vard\u0131r. Promosyon motoru bu kimli\u011fi kullanarak hizmetin hangi \u00fcr\u00fcne ba\u011fl\u0131 oldu\u011funu, hangi fatura d\u00f6neminde oldu\u011funu ve kuponun ko\u015fullar\u0131n\u0131 kar\u015f\u0131lay\u0131p kar\u015f\u0131lamad\u0131\u011f\u0131n\u0131 de\u011ferlendirir. Kimlik null oldu\u011funda bu de\u011ferlendirme zinciri daha ilk ad\u0131mda k\u0131r\u0131l\u0131r.<\/p>\n<p>Sorunun kayna\u011f\u0131 nadiren WHMCS \u00e7ekirde\u011findedir. \u00c7o\u011fu durumda veritaban\u0131ndaki tutars\u0131z kay\u0131tlar veya yanl\u0131\u015f yap\u0131land\u0131r\u0131lm\u0131\u015f promosyonlar bu hatay\u0131 \u00fcretir. \u00c7\u00f6z\u00fcme ge\u00e7meden \u00f6nce hatay\u0131 hangi senaryonun tetikledi\u011fini anlamak gerekir.<\/p>\n<h2 id=\"hatayi-tetikleyen-senaryolar\">Hatay\u0131 Tetikleyen Senaryolar<\/h2>\n<h3 id=\"1-orphan-urunsuz-hizmetler\">1. Orphan (\u00dcr\u00fcns\u00fcz) Hizmetler<\/h3>\n<p>Orphan hizmet, `tblhosting` tablosunda kayd\u0131 bulunan ancak ge\u00e7erli bir \u00fcr\u00fcne ba\u011fl\u0131 olmayan hizmettir. Bu durum genellikle \u015fu \u015fekilde olu\u015fur: bir \u00fcr\u00fcn\u00fc WHMCS aray\u00fcz\u00fcnden silersiniz, ancak o \u00fcr\u00fcne ba\u011fl\u0131 hizmet kay\u0131tlar\u0131 veritaban\u0131nda kalmaya devam eder. `packageid` alan\u0131 art\u0131k var olmayan bir \u00fcr\u00fcn\u00fc i\u015faret eder veya tamamen bo\u015f kal\u0131r.<\/p>\n<p>M\u00fc\u015fteri b\u00f6yle bir hizmete kupon uygulamaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda WHMCS, hizmetin \u00fcr\u00fcn bilgisini \u00e7\u00f6zemez ve promosyon motoruna null kimlik iletir. Sonu\u00e7, do\u011frudan bu TypeError hatas\u0131d\u0131r.<\/p>\n<h3 id=\"2-kuponun-applies-to-listesinde-gecersiz-urunler\">2. Kuponun &#8220;Applies To&#8221; Listesinde Ge\u00e7ersiz \u00dcr\u00fcnler<\/h3>\n<p>WHMCS&#8217;te bir promosyon olu\u015ftururken kuponun hangi \u00fcr\u00fcnlere uygulanaca\u011f\u0131n\u0131 se\u00e7ersiniz. Se\u00e7ili \u00fcr\u00fcnlerden biri daha sonra silinirse, kuponun hedef listesi ge\u00e7ersiz bir referans i\u00e7erir. Kupon \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda WHMCS bu ge\u00e7ersiz referans\u0131 \u00e7\u00f6zmeye \u00e7al\u0131\u015f\u0131r ve hizmet kimli\u011fini null olarak al\u0131r.<\/p>\n<p>Bu senaryo \u00f6zellikle sezonluk kampanyalar veya ge\u00e7ici \u00fcr\u00fcnler i\u00e7in olu\u015fturulan kuponlarda s\u0131k g\u00f6r\u00fcl\u00fcr. Kampanya bittikten sonra \u00fcr\u00fcn silinir, ancak kupon aktif kalmaya devam eder.<\/p>\n<h3 id=\"3-ucuncu-parti-modul-ve-eklentiler\">3. \u00dc\u00e7\u00fcnc\u00fc Parti Mod\u00fcl ve Eklentiler<\/h3>\n<p>Sipari\u015f ak\u0131\u015f\u0131n\u0131, fatura olu\u015fturmay\u0131 veya hizmet y\u00f6netimini \u00f6zelle\u015ftiren mod\u00fcller bazen `Promotion::appliesToService()` metodunu eksik parametreyle \u00e7a\u011f\u0131rabilir. Mod\u00fcl geli\u015ftiricisi, hizmet kimli\u011fini do\u011fru \u015fekilde aktarmad\u0131\u011f\u0131nda veya hizmet hen\u00fcz olu\u015fturulmadan promosyon kontrol\u00fc yapt\u0131\u011f\u0131nda bu hata ortaya \u00e7\u0131kar.<\/p>\n<p>\u00d6zellikle \u00f6zel sipari\u015f formlar\u0131, harici \u00f6deme entegrasyonlar\u0131 ve toplu hizmet ta\u015f\u0131ma ara\u00e7lar\u0131 bu t\u00fcr sorunlara yol a\u00e7abilir. Mod\u00fcl\u00fc ge\u00e7ici olarak devre d\u0131\u015f\u0131 b\u0131rak\u0131p hatan\u0131n devam edip etmedi\u011fini g\u00f6zlemlemek, kayna\u011f\u0131 daraltman\u0131n etkili bir yoludur.<\/p>\n<h3 id=\"4-bozulmus-veritabani-iliskileri\">4. Bozulmu\u015f Veritaban\u0131 \u0130li\u015fkileri<\/h3>\n<p>Nadir durumlarda, ba\u015far\u0131s\u0131z bir y\u00fckseltme veya manuel veritaban\u0131 m\u00fcdahalesi sonucu `tblhosting` ile `tblproducts` aras\u0131ndaki ili\u015fki bozulabilir. Yabanc\u0131 anahtar k\u0131s\u0131tlamalar\u0131 WHMCS&#8217;in baz\u0131 s\u00fcr\u00fcmlerinde tam olarak uygulanmad\u0131\u011f\u0131 i\u00e7in bu t\u00fcr tutars\u0131zl\u0131klar sessizce birikebilir.<\/p>\n<h2 id=\"belirtiler\">Belirtiler<\/h2>\n<p>Bu hatay\u0131 yaln\u0131zca loglarda de\u011fil, aray\u00fczde de fark edebilirsiniz. Belirtiler hatan\u0131n hangi noktada tetiklendi\u011fine g\u00f6re de\u011fi\u015fir:<\/p>\n<ul>\n<li><strong>M\u00fc\u015fteri panelinde hata mesaj\u0131:<\/strong> M\u00fc\u015fteri, hizmet detay sayfas\u0131n\u0131 a\u00e7t\u0131\u011f\u0131nda veya kupon uygulamaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda TypeError mesaj\u0131yla kar\u015f\u0131la\u015f\u0131r.<\/li>\n<li><strong>Kupon uygulanam\u0131yor:<\/strong> Ge\u00e7erli g\u00f6r\u00fcnen bir kupon, belirli hizmetlere uyguland\u0131\u011f\u0131nda sessizce ba\u015far\u0131s\u0131z olur veya hata d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><strong>Fatura olu\u015fturmada sorun:<\/strong> Cron job fatura olu\u015fturmaya \u00e7al\u0131\u015f\u0131rken hata loguna TypeError kayd\u0131 d\u00fc\u015fer ve fatura \u00fcretilemez.<\/li>\n<li><strong>\u00d6deme sonras\u0131 hata:<\/strong> M\u00fc\u015fteri \u00f6demeyi tamamlad\u0131ktan sonra hizmet aktifle\u015ftirme ad\u0131m\u0131nda hata olu\u015fur.<\/li>\n<li><strong>Y\u00f6netici panelinde yava\u015flama:<\/strong> Hatal\u0131 kay\u0131tlar\u0131n \u00e7oklu\u011fu, hizmet listesi sorgular\u0131n\u0131 yava\u015flatabilir.<\/li>\n<\/ul>\n<p>Bu belirtilerden birini g\u00f6r\u00fcyorsan\u0131z, a\u015fa\u011f\u0131daki te\u015fhis ad\u0131mlar\u0131n\u0131 s\u0131rayla uygulay\u0131n. Sorunu erken tespit etmek, m\u00fc\u015fteri \u015fikayetlerinin \u00f6n\u00fcne ge\u00e7menizi sa\u011flar.<\/p>\n<h2 id=\"teshis-adimlari\">Te\u015fhis (Diagnostik) Ad\u0131mlar\u0131<\/h2>\n<h3 id=\"1-orphan-hizmetleri-bulma\">1) Orphan Hizmetleri Bulma<\/h3>\n<p>Veritaban\u0131n\u0131za eri\u015ferek a\u015fa\u011f\u0131daki sorguyu \u00e7al\u0131\u015ft\u0131r\u0131n. Bu sorgu, hi\u00e7bir \u00fcr\u00fcne ba\u011fl\u0131 olmayan veya silinmi\u015f bir \u00fcr\u00fcn\u00fc i\u015faret eden t\u00fcm hizmet kay\u0131tlar\u0131n\u0131 listeler:<\/p>\n<pre><code class=\"language-sql\">SELECT id, userid, packageid, domain, domainstatus\nFROM tblhosting\nWHERE packageid IS NULL\n   OR packageid NOT IN (SELECT id FROM tblproducts);\n<\/code><\/pre>\n<p>Sorgu sonucunda d\u00f6nen her sat\u0131r, promosyon motorunun null kimlik almas\u0131na neden olabilecek potansiyel bir sorun kayna\u011f\u0131d\u0131r. Sonu\u00e7lardaki `domainstatus` alan\u0131na dikkat edin; &#8220;Active&#8221; durumundaki kay\u0131tlar \u00f6ncelikli olarak d\u00fczeltilmelidir \u00e7\u00fcnk\u00fc bunlar m\u00fc\u015fterinin aktif olarak kulland\u0131\u011f\u0131 hizmetlerdir.<\/p>\n<h3 id=\"2-promosyon-ayarlarini-inceleme\">2) Promosyon Ayarlar\u0131n\u0131 \u0130nceleme<\/h3>\n<p>WHMCS y\u00f6netici panelinde <em>Configuration \u2192 System Settings \u2192 Promotions<\/em> yolunu izleyin. \u015e\u00fcpheli kuponu a\u00e7\u0131n ve &#8220;Applies To&#8221; b\u00f6l\u00fcm\u00fcn\u00fc kontrol edin. Burada se\u00e7ili \u00fcr\u00fcnlerin h\u00e2l\u00e2 mevcut olup olmad\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<\/p>\n<p>Silinmi\u015f bir \u00fcr\u00fcn se\u00e7iliyse, kupon d\u00fczenleme sayfas\u0131nda bu \u00fcr\u00fcn genellikle eksik veya bozuk bir etiketle g\u00f6r\u00fcn\u00fcr. Kuponu kaydetmeden \u00f6nce ge\u00e7ersiz \u00fcr\u00fcnleri listeden \u00e7\u0131kar\u0131n ve yaln\u0131zca aktif \u00fcr\u00fcnleri se\u00e7in.<\/p>\n<h3 id=\"3-log-kontrolu\">3) Log Kontrol\u00fc<\/h3>\n<p><em>Utilities \u2192 Logs \u2192 Activity Log<\/em> b\u00f6l\u00fcm\u00fcnden hatan\u0131n tam olarak hangi i\u015flem s\u0131ras\u0131nda olu\u015ftu\u011funu inceleyin. Log kayd\u0131ndaki zaman damgas\u0131, hatay\u0131 tetikleyen m\u00fc\u015fteri kimli\u011fi ve i\u015flem t\u00fcr\u00fc (\u00f6rne\u011fin kupon uygulama, fatura olu\u015fturma) size \u00f6nemli ipu\u00e7lar\u0131 verir.<\/p>\n<p>Ayr\u0131ca PHP error log&#8217;unu da kontrol edin. TypeError mesaj\u0131n\u0131n tam stack trace&#8217;i, hatan\u0131n hangi mod\u00fclden veya dosyadan kaynakland\u0131\u011f\u0131n\u0131 g\u00f6sterir. Stack trace i\u00e7inde \u00fc\u00e7\u00fcnc\u00fc parti bir mod\u00fcl\u00fcn dosya yolu g\u00f6r\u00fcn\u00fcyorsa, sorunun kayna\u011f\u0131 b\u00fcy\u00fck olas\u0131l\u0131kla o mod\u00fcld\u00fcr.<\/p>\n<h3 id=\"4-ucuncu-parti-modulleri-test-etme\">4) \u00dc\u00e7\u00fcnc\u00fc Parti Mod\u00fclleri Test Etme<\/h3>\n<p>Yak\u0131n zamanda bir mod\u00fcl y\u00fcklediyseniz veya g\u00fcncellediyseniz, mod\u00fcl\u00fc ge\u00e7ici olarak devre d\u0131\u015f\u0131 b\u0131rak\u0131p hatan\u0131n tekrar olu\u015fup olu\u015fmad\u0131\u011f\u0131n\u0131 g\u00f6zlemleyin. Hata kayboluyorsa, mod\u00fcl\u00fcn geli\u015ftiricisiyle ileti\u015fime ge\u00e7in veya alternatif bir \u00e7\u00f6z\u00fcm aray\u0131n.<\/p>\n<p>Mod\u00fclleri devre d\u0131\u015f\u0131 b\u0131rak\u0131rken canl\u0131 sipari\u015f ak\u0131\u015f\u0131n\u0131 etkilememek i\u00e7in bak\u0131m penceresi planlamak ak\u0131ll\u0131ca olur. Test s\u0131ras\u0131nda bir test m\u00fc\u015fterisiyle kupon uygulamay\u0131 deneyerek hatay\u0131 g\u00fcvenle yeniden \u00fcretebilirsiniz.<\/p>\n<h2 id=\"cozum-yontemleri\">\u00c7\u00f6z\u00fcm Y\u00f6ntemleri<\/h2>\n<h3 id=\"yontem-a-whmcs-arayuzu-ile-onarim-onerilen\">Y\u00f6ntem A \u2014 WHMCS Aray\u00fcz\u00fc ile Onar\u0131m (\u00d6nerilen)<\/h3>\n<p>Bu y\u00f6ntem, teknik bilgisi s\u0131n\u0131rl\u0131 kullan\u0131c\u0131lar i\u00e7in en g\u00fcvenli yoldur. Veritaban\u0131na do\u011frudan m\u00fcdahale gerektirmez ve her ad\u0131m\u0131 geri al\u0131nabilir.<\/p>\n<ol>\n<li><strong>Orphan hizmetleri d\u00fczeltin:<\/strong> <em>Clients \u2192 Services<\/em> sayfas\u0131nda, te\u015fhis sorgusunda buldu\u011funuz hizmet kay\u0131tlar\u0131n\u0131 a\u00e7\u0131n. Her kayd\u0131 do\u011fru \u00fcr\u00fcne ba\u011flay\u0131n veya kay\u0131t art\u0131k kullan\u0131lm\u0131yorsa silin.<\/li>\n<li><strong>Promosyonu g\u00fcncelleyin:<\/strong> <em>Configuration \u2192 System Settings \u2192 Promotions<\/em> alt\u0131nda ilgili kuponu a\u00e7\u0131n. &#8220;Applies To&#8221; listesinden ge\u00e7ersiz \u00fcr\u00fcnleri \u00e7\u0131kar\u0131n ve de\u011fi\u015fiklikleri kaydedin.<\/li>\n<li><strong>\u00d6nbelle\u011fi temizleyin:<\/strong> <em>Utilities \u2192 System \u2192 System Cleanup<\/em> alt\u0131ndan \u00f6nbelle\u011fi temizleyin. Bu ad\u0131m, eski verilerin h\u00e2l\u00e2 bellekte tutulmas\u0131n\u0131 \u00f6nler.<\/li>\n<li><strong>Test edin:<\/strong> Test m\u00fc\u015fterisiyle kuponu yeniden uygulay\u0131n. Hata mesaj\u0131n\u0131n kayboldu\u011funu ve kuponun do\u011fru \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<\/li>\n<\/ol>\n<div class=\"sm-note\"><strong>\u0130pucu:<\/strong> Orphan hizmet say\u0131s\u0131 azsa (10&#8217;un alt\u0131nda), aray\u00fczden tek tek d\u00fczeltmek SQL&#8217;e g\u00f6re \u00e7ok daha g\u00fcvenlidir. Her kayd\u0131n m\u00fc\u015fteri ge\u00e7mi\u015fini ve fatura durumunu g\u00f6rerek karar verebilirsiniz.<\/div>\n<h3 id=\"yontem-b-sql-ile-toplu-duzeltme-ileri-seviye\">Y\u00f6ntem B \u2014 SQL ile Toplu D\u00fczeltme (\u0130leri Seviye)<\/h3>\n<p>Orphan hizmet say\u0131s\u0131 fazlaysa ve hepsinin ayn\u0131 \u00fcr\u00fcne ba\u011flanmas\u0131 gerekti\u011finden eminseniz, SQL ile toplu g\u00fcncelleme yapabilirsiniz. Ancak bu y\u00f6ntem geri al\u0131nmas\u0131 zor hatalara yol a\u00e7abilir.<\/p>\n<div class=\"sm-note sm-note-warning\"><strong>Dikkat:<\/strong> Bu sorguyu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce veritaban\u0131n\u0131n tam yede\u011fini al\u0131n. Yanl\u0131\u015f bir packageid de\u011feri, hizmetlerin yanl\u0131\u015f \u00fcr\u00fcnle faturaland\u0131r\u0131lmas\u0131na neden olabilir.<\/div>\n<pre><code class=\"language-sql\">UPDATE tblhosting\nSET packageid = 123\nWHERE packageid IS NULL\n   OR packageid NOT IN (SELECT id FROM tblproducts);\n<\/code><\/pre>\n<p>Sorgudaki `123` de\u011ferini, bu hizmetlerin ba\u011flanmas\u0131n\u0131 istedi\u011finiz ger\u00e7ek \u00fcr\u00fcn kimli\u011fiyle de\u011fi\u015ftirin. Hangi \u00fcr\u00fcn\u00fcn do\u011fru oldu\u011fundan emin de\u011filseniz, \u00f6nce `tblproducts` tablosundan aktif \u00fcr\u00fcnleri listeleyin:<\/p>\n<pre><code class=\"language-sql\">SELECT id, name, type\nFROM tblproducts\nWHERE hidden = 0\nORDER BY name;\n<\/code><\/pre>\n<div class=\"sm-note\"><strong>\u0130pucu:<\/strong> Toplu g\u00fcncelleme yerine, her hizmetin hangi \u00fcr\u00fcne ba\u011flanmas\u0131 gerekti\u011fini m\u00fc\u015fteri baz\u0131nda belirlemek daha do\u011frudur. \u00d6rne\u011fin ayn\u0131 m\u00fc\u015fterinin ba\u015fka hizmetleri varsa, onlar\u0131n packageid de\u011ferlerini referans alabilirsiniz.<\/div>\n<h3 id=\"yontem-c-kuponu-yeniden-olusturma\">Y\u00f6ntem C \u2014 Kuponu Yeniden Olu\u015fturma<\/h3>\n<p>Kupon ayarlar\u0131ndaki ge\u00e7ersiz referanslar\u0131 temizlemek zor geliyorsa, en pratik \u00e7\u00f6z\u00fcm kuponu s\u0131f\u0131rdan olu\u015fturmakt\u0131r. Eski kuponu devre d\u0131\u015f\u0131 b\u0131rak\u0131n, ayn\u0131 ko\u015fullarla yeni bir kupon olu\u015fturun ve yaln\u0131zca mevcut \u00fcr\u00fcnleri hedefleyin.<\/p>\n<p>Bu y\u00f6ntem \u00f6zellikle \u00e7ok say\u0131da ge\u00e7ersiz referans i\u00e7eren veya uzun s\u00fcredir kullan\u0131lan kuponlarda etkilidir. Yeni kuponun kodunu m\u00fc\u015fterilerinize duyurmay\u0131 unutmay\u0131n; eski kupon kodunu kullanan m\u00fc\u015fteriler hata almaya devam edebilir.<\/p>\n<h3 id=\"yontem-d-ucuncu-parti-modulu-guncelleme-veya-kaldirma\">Y\u00f6ntem D \u2014 \u00dc\u00e7\u00fcnc\u00fc Parti Mod\u00fcl\u00fc G\u00fcncelleme veya Kald\u0131rma<\/h3>\n<p>Te\u015fhis ad\u0131m\u0131nda sorunun kayna\u011f\u0131n\u0131 bir mod\u00fcl olarak belirlediyseniz, \u00f6ncelikle mod\u00fcl\u00fcn g\u00fcncel bir s\u00fcr\u00fcm\u00fcn\u00fcn olup olmad\u0131\u011f\u0131n\u0131 kontrol edin. Geli\u015ftiriciler bu t\u00fcr hatalar\u0131 genellikle sonraki s\u00fcr\u00fcmlerde d\u00fczeltir.<\/p>\n<p>G\u00fcncelleme yoksa veya sorun devam ediyorsa, mod\u00fcl\u00fc kald\u0131r\u0131p yerine WHMCS&#8217;in yerle\u015fik \u00f6zellikleriyle ayn\u0131 i\u015flevi sa\u011flayan bir alternatif aray\u0131n. Mod\u00fcl\u00fc kald\u0131rmadan \u00f6nce, mod\u00fcl\u00fcn olu\u015fturdu\u011fu verilerin yede\u011fini almay\u0131 ihmal etmeyin.<\/p>\n<h2 id=\"onleyici-tedbirler\">\u00d6nleyici Tedbirler<\/h2>\n<p>Bu hatay\u0131 bir kez \u00e7\u00f6zd\u00fckten sonra tekrar ya\u015famamak i\u00e7in \u015fu al\u0131\u015fkanl\u0131klar\u0131 edinin:<\/p>\n<ul>\n<li><strong>G\u00fcnl\u00fck veritaban\u0131 yede\u011fi al\u0131n:<\/strong> Otomatik yedekleme plan\u0131 olu\u015fturun ve yedeklerin geri y\u00fcklenebilir oldu\u011funu d\u00fczenli olarak test edin.<\/li>\n<li><strong>WHMCS&#8217;i g\u00fcncel tutun:<\/strong> Her g\u00fcncellemeden \u00f6nce s\u00fcr\u00fcm notlar\u0131n\u0131 okuyun ve yedek al\u0131n. G\u00fcncellemeler genellikle bu t\u00fcr tutars\u0131zl\u0131klar\u0131 \u00f6nleyen veritaban\u0131 d\u00fczeltmeleri i\u00e7erir.<\/li>\n<li><strong>\u00dcr\u00fcn silmeden \u00f6nce ba\u011f\u0131ml\u0131l\u0131klar\u0131 kontrol edin:<\/strong> Bir \u00fcr\u00fcn\u00fc silmeden \u00f6nce, o \u00fcr\u00fcne ba\u011fl\u0131 hizmet say\u0131s\u0131n\u0131 sorgulay\u0131n. Ba\u011fl\u0131 hizmet varsa \u00f6nce bunlar\u0131 ba\u015fka bir \u00fcr\u00fcne ta\u015f\u0131y\u0131n veya hizmetleri sonland\u0131r\u0131n.<\/li>\n<li><strong>Kuponlar\u0131 d\u00fczenli denetleyin:<\/strong> Aktif kuponlar\u0131n &#8220;Applies To&#8221; listelerini periyodik olarak g\u00f6zden ge\u00e7irin. Ge\u00e7ersiz \u00fcr\u00fcnleri temizleyin.<\/li>\n<li><strong>Cron ve loglar\u0131 izleyin:<\/strong> Haftal\u0131k olarak Activity Log ve PHP error log&#8217;unu taray\u0131n. TypeError hatalar\u0131n\u0131 erken yakalamak, m\u00fc\u015fteri etkilenmeden m\u00fcdahale etmenizi sa\u011flar.<\/li>\n<li><strong>Test ortam\u0131 kullan\u0131n:<\/strong> B\u00fcy\u00fck de\u011fi\u015fiklikleri canl\u0131 ortamda yapmadan \u00f6nce staging ortam\u0131nda deneyin.<\/li>\n<\/ul>\n<p>D\u00fczenli bak\u0131m rutininin par\u00e7as\u0131 olarak orphan hizmet sorgusunu ayda bir \u00e7al\u0131\u015ft\u0131rmak, sorunun sessizce b\u00fcy\u00fcmesini engeller. Sorgu sonucunda yeni kay\u0131tlar beliriyorsa, bunlar\u0131n neden olu\u015ftu\u011funu ara\u015ft\u0131r\u0131n; yaln\u0131zca semptomu de\u011fil, k\u00f6k nedeni de \u00e7\u00f6z\u00fcn.<\/p>\n<p>WHMCS bar\u0131nd\u0131ran sunucunuzun kaynak yetersizli\u011fi de benzer hatalara yol a\u00e7abilir. E\u011fer hata loglar\u0131nda yaln\u0131zca yo\u011fun saatlerde bu TypeError g\u00f6r\u00fcn\u00fcyorsa, <a href=\"https:\/\/saviorhost.com\/linux-web-hosting\">linux hosting<\/a> altyap\u0131n\u0131z\u0131n PHP bellek limiti ve veritaban\u0131 ba\u011flant\u0131 havuzu ayarlar\u0131n\u0131 g\u00f6zden ge\u00e7irin.<\/p>\n<h2 id=\"sss\">S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<h3 id=\"whmcste-orphan-hizmet-kaydi-nedir\">WHMCS&#8217;te orphan hizmet kayd\u0131 nedir?<\/h3>\n<p>Orphan hizmet, `tblhosting` tablosunda kayd\u0131 bulunan ancak ge\u00e7erli bir \u00fcr\u00fcne (`tblproducts`) ba\u011fl\u0131 olmayan hizmettir. Genellikle bir \u00fcr\u00fcn silindi\u011finde, o \u00fcr\u00fcne ba\u011fl\u0131 hizmet kay\u0131tlar\u0131n\u0131n veritaban\u0131nda kalmas\u0131yla olu\u015fur.<\/p>\n<h3 id=\"bu-hatayi-duzeltmek-icin-veritabanina-dogrudan-mudahale-sart-mi\">Bu hatay\u0131 d\u00fczeltmek i\u00e7in veritaban\u0131na do\u011frudan m\u00fcdahale \u015fart m\u0131?<\/h3>\n<p>Hay\u0131r. Orphan hizmet say\u0131s\u0131 azsa, WHMCS aray\u00fcz\u00fcnden her hizmeti do\u011fru \u00fcr\u00fcne ba\u011flayarak sorunu \u00e7\u00f6zebilirsiniz. SQL yaln\u0131zca \u00e7ok say\u0131da kayd\u0131n toplu d\u00fczeltilmesi gerekti\u011finde kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h3 id=\"kuponu-sildikten-sonra-hata-devam-ederse-ne-yapmaliyim\">Kuponu sildikten sonra hata devam ederse ne yapmal\u0131y\u0131m?<\/h3>\n<p>Hata devam ediyorsa sorun kuponda de\u011fil, hizmet kay\u0131tlar\u0131ndad\u0131r. Orphan hizmet sorgusunu yeniden \u00e7al\u0131\u015ft\u0131r\u0131n ve t\u00fcm sonu\u00e7lar\u0131 d\u00fczeltti\u011finizden emin olun. Ayr\u0131ca \u00fc\u00e7\u00fcnc\u00fc parti mod\u00fclleri ge\u00e7ici olarak devre d\u0131\u015f\u0131 b\u0131rak\u0131p test edin.<\/p>\n<h3 id=\"orphan-hizmetleri-silmek-yerine-neden-duzeltmeliyim\">Orphan hizmetleri silmek yerine neden d\u00fczeltmeliyim?<\/h3>\n<p>Orphan hizmetler genellikle m\u00fc\u015fterinin ge\u00e7mi\u015f fatura ve hizmet kay\u0131tlar\u0131n\u0131 i\u00e7erir. Silmek, m\u00fc\u015fterinin ge\u00e7mi\u015f verilerini kaybetmesine neden olabilir. Hizmet h\u00e2l\u00e2 aktifse do\u011fru \u00fcr\u00fcne ba\u011flamak, faturalaman\u0131n kesintisiz devam etmesini sa\u011flar.<\/p>\n<h3 id=\"bu-hata-whmcsin-hangi-surumlerinde-gorulur\">Bu hata WHMCS&#8217;in hangi s\u00fcr\u00fcmlerinde g\u00f6r\u00fcl\u00fcr?<\/h3>\n<p>Hata, PHP 7 ve \u00fczeri s\u00fcr\u00fcmlerle \u00e7al\u0131\u015fan WHMCS s\u00fcr\u00fcmlerinde, \u00f6zellikle tip g\u00fcvenli\u011fi art\u0131r\u0131lm\u0131\u015f s\u00fcr\u00fcmlerde daha s\u0131k rapor edilir. S\u00fcr\u00fcmden ba\u011f\u0131ms\u0131z olarak orphan hizmet ve ge\u00e7ersiz promosyon hedefleri her s\u00fcr\u00fcmde soruna yol a\u00e7abilir.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WHMCS&#8217;te kupon veya promosyon uygularken kar\u015f\u0131n\u0131za \u00e7\u0131kan `Promotion::appliesToService(): Argument #1 ($serviceId) must be of type int, null given` hatas\u0131, sistemin&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2105,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[73],"tags":[],"class_list":["post-2104","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-whmcs"],"_links":{"self":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts\/2104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/comments?post=2104"}],"version-history":[{"count":3,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts\/2104\/revisions"}],"predecessor-version":[{"id":2952,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts\/2104\/revisions\/2952"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/media\/2105"}],"wp:attachment":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/media?parent=2104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/categories?post=2104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/tags?post=2104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}