wmaraci reklam

PHPMailer ve Parse error: syntax error, unexpected 'use' (T_USE) HATASI

6 Mesajlar 1.584 Okunma
pst.net
wmaraci reklam

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

Merhabalar...

PHPmailler kullanıyorum, koşulsuz gönderi yapan kodları ilk satırı şçyle;

use PHPMailer\PHPMailer\PHPMailer; 

Fakat ben bu kodların çalışmasını verilerin post edilmesi şartına bağlamak için else içine koyduğumda başlıktaki hata ortaya çıkıyor.
Nette araştırdım ama henüz çözemedim.

<?php
if (isset($_POST['register']))
{
    $test_message_nam=$_POST["message_nam"]; 
    $test_message_ema=$_POST["message_ema"]; 
    $test_message_sub=$_POST["message_sub"]; 
    $test_message_txt=$_POST["message_txt"]; 
}

else
{
    use PHPMailer\PHPMailer\PHPMailer; 
    ...
}
?>


Koda nasıl bir müdahalede bulunmak gerekiyor sizce?

Şimdiden teşekkür ederim...

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
reklam

bytokca bytokca WM Aracı Kimlik Onayı
  • Üyelik 29.11.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Yazılım
  • Konum Konya
  • Ad Soyad H** T**
  • Mesajlar 48
  • Beğeniler 1 / 26
  • Ticaret 1, (%100)

BEYAZMASTER adlı üyeden alıntı

Merhabalar...

PHPmailler kullanıyorum, koşulsuz gönderi yapan kodları ilk satırı şçyle;

use PHPMailer\PHPMailer\PHPMailer; 

Fakat ben bu kodların çalışmasını verilerin post edilmesi şartına bağlamak için else içine koyduğumda başlıktaki hata ortaya çıkıyor.
Nette araştırdım ama henüz çözemedim.

<?php
if (isset($_POST['register']))
{
    $test_message_nam=$_POST["message_nam"]; 
    $test_message_ema=$_POST["message_ema"]; 
    $test_message_sub=$_POST["message_sub"]; 
    $test_message_txt=$_POST["message_txt"]; 
}

else
{
    use PHPMailer\PHPMailer\PHPMailer; 
    ...
}
?>


Koda nasıl bir müdahalede bulunmak gerekiyor sizce?

Şimdiden teşekkür ederim...

 

Kodları temizlemeden post ederseniz hacklenirsiniz.

Şu şekilde birşey istiyorsunuz sanırım.

 

<form role="form" action="form_submit.php" method="POST" name="FormInformation">
<input type="hidden" name="RegisterForm" value="FormInformation" />

<label>Adınız</label>
<input type="text" name="yourname"/>

<label>Telefon Numaranız</label>
<input type="text" name="yourphone"/>

<label>E-posta Gönderilsin</label>
<input type="checkbox" value="0" name="checkbox"/>
</form>

 

form_submit.php

function temizlikYap( $str ) {
    if (! empty($str)) {
        $str = trim( $str );
        $str = strip_tags( $str );
        $str = htmlspecialchars( stripslashes( $str ));
        $str = htmlentities( $str );
        return $str;
    }
}

if ((isset($_POST["RegisterForm"])) && ($_POST["RegisterForm"] == "FormInformation")) {  //post edilen RegisterForm FormInformation a eşitse işlemleri başlat.

$checkbox      = filter_input(INPUT_POST, 'checkbox', FILTER_SANITIZE_NUMBER_INT);
$adiniz           = temizlikYap($_POST['yourname']);
$telefonunuz = temizlikYap($_POST['yourphone']);

// Veritabanına kaydedilecekse --> INSERT INTO table

if(isset($checkbox)){

// E-posta gönderme bilgileri.
use PHPMailer\PHPMailer\PHPMailer;

// PHPMailer güncel sınıfı -> https://github.com/PHPMailer/PHPMailer 

}


}

 

Baştada dediğim gibi kodlar temizlenmeden gönderilmez. 

CSRF, XSS açıklarını yok ettiğinizden emin olun.

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

bytokca adlı üyeden alıntı

BEYAZMASTER adlı üyeden alıntı

Merhabalar...

PHPmailler kullanıyorum, koşulsuz gönderi yapan kodları ilk satırı şçyle;

use PHPMailer\PHPMailer\PHPMailer; 

Fakat ben bu kodların çalışmasını verilerin post edilmesi şartına bağlamak için else içine koyduğumda başlıktaki hata ortaya çıkıyor.
Nette araştırdım ama henüz çözemedim.

<?php
if (isset($_POST['register']))
{
    $test_message_nam=$_POST["message_nam"]; 
    $test_message_ema=$_POST["message_ema"]; 
    $test_message_sub=$_POST["message_sub"]; 
    $test_message_txt=$_POST["message_txt"]; 
}

else
{
    use PHPMailer\PHPMailer\PHPMailer; 
    ...
}
?>


Koda nasıl bir müdahalede bulunmak gerekiyor sizce?

Şimdiden teşekkür ederim...

 

Kodları temizlemeden post ederseniz hacklenirsiniz.

Şu şekilde birşey istiyorsunuz sanırım.

 

<form role="form" action="form_submit.php" method="POST" name="FormInformation">
<input type="hidden" name="RegisterForm" value="FormInformation" />

<label>Adınız</label>
<input type="text" name="yourname"/>

<label>Telefon Numaranız</label>
<input type="text" name="yourphone"/>

<label>E-posta Gönderilsin</label>
<input type="checkbox" value="0" name="checkbox"/>
</form>

 

form_submit.php

function temizlikYap( $str ) {
    if (! empty($str)) {
        $str = trim( $str );
        $str = strip_tags( $str );
        $str = htmlspecialchars( stripslashes( $str ));
        $str = htmlentities( $str );
        return $str;
    }
}

if ((isset($_POST["RegisterForm"])) && ($_POST["RegisterForm"] == "FormInformation")) {  //post edilen RegisterForm FormInformation a eşitse işlemleri başlat.

$checkbox      = filter_input(INPUT_POST, 'checkbox', FILTER_SANITIZE_NUMBER_INT);
$adiniz           = temizlikYap($_POST['yourname']);
$telefonunuz = temizlikYap($_POST['yourphone']);

// Veritabanına kaydedilecekse --> INSERT INTO table

if(isset($checkbox)){

// E-posta gönderme bilgileri.
use PHPMailer\PHPMailer\PHPMailer;

// PHPMailer güncel sınıfı ->   https://github.com/PHPMailer/PHPMailer   

}


}

 

Baştada dediğim gibi kodlar temizlenmeden gönderilmez. 

CSRF, XSS açıklarını yok ettiğinizden emin olun.

 
Üstadım çok teşekkür ediyorum detaylı cevabınız ve kod için...

Birazdan deneyip sonucu paylaşacağım...


Deneme sonrası;

Temizlik fonsiyonunu başta oluşturmak alttaki kodları daha sade kılmış, elinize sağlık...

Email gönder checkbox'ını hangi durumlarda kullanmak gerekir diye hala düşünüyorum, varlık sebebini açıklayabilirseniz sevinirim...

Konunun çıkış noktası olan;
Parse error: syntax error, unexpected 'use' (T_USE) sorunu ise hala devam etmekte üstadım...    : (

Yeni öğrenen biri olarak benim yapamamam normalniş... : )

Küçük bir dokunuş gerek ama ne1?

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (04.05.2022 16:56)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

bytokca bytokca WM Aracı Kimlik Onayı
  • Üyelik 29.11.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Yazılım
  • Konum Konya
  • Ad Soyad H** T**
  • Mesajlar 48
  • Beğeniler 1 / 26
  • Ticaret 1, (%100)
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

function temizlikYap( $str ) {
    if (! empty($str)) {
        $str = trim( $str );
        $str = strip_tags( $str );
        $str = htmlspecialchars( stripslashes( $str ));
        $str = htmlentities( $str );
        return $str;
    }
}

if ((isset($_POST["RegisterForm"])) && ($_POST["RegisterForm"] == "FormInformation")) {  //post edilen RegisterForm FormInformation a eşitse işlemleri başlat.

$checkbox      = filter_input(INPUT_POST, 'checkbox', FILTER_SANITIZE_NUMBER_INT);
$adiniz           = temizlikYap($_POST['yourname']);
$telefonunuz = temizlikYap($_POST['yourphone']);

// Veritabanına kaydedilecekse --> INSERT INTO table

if(isset($checkbox)){

// Detaylı bilgi ve PHPMailer güncel sınıfı ->  https://github.com/PHPMailer/PHPMailer  

try {
    //Server settings
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
    $mail->isSMTP();                                            //Send using SMTP
    $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
    $mail->Username   = 'user@example.com';                     //SMTP username
    $mail->Password   = 'secret';                               //SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
    $mail->Port       = 465;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`

    //Recipients
    $mail->setFrom('from@example.com', 'Mailer');
    $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient
    $mail->addAddress('ellen@example.com');               //Name is optional
    $mail->addReplyTo('info@example.com', 'Information');
    $mail->addCC('cc@example.com');
    $mail->addBCC('bcc@example.com');

    //Attachments
    $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name

    //Content
    $mail->isHTML(true);                                  //Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}


}


}

 

Kolama yapınızı bu şekilde kendinize göre ayarlayın. Yinede sorun yaşıyorsanız, PHPMailer sınıfını ve dosyalarını silin. 

Sonra https://github.com/PHPMailer/PHPMailer bu linke girin. PHPMailer sınıfını tekrar indirin. Sayfada aşağıya doğru indiğinizde PHPMailer sınıfının nasıl kullanıldığını ve bir demo kodlarını göreceksiniz. Kendi projenize göre editlersiniz.

 

BEYAZMASTER

kişi bu mesajı beğendi.

wmaraci
Mersin evden eve nakliyat

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

bytokca adlı üyeden alıntı

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

function temizlikYap( $str ) {
    if (! empty($str)) {
        $str = trim( $str );
        $str = strip_tags( $str );
        $str = htmlspecialchars( stripslashes( $str ));
        $str = htmlentities( $str );
        return $str;
    }
}

if ((isset($_POST["RegisterForm"])) && ($_POST["RegisterForm"] == "FormInformation")) {  //post edilen RegisterForm FormInformation a eşitse işlemleri başlat.

$checkbox      = filter_input(INPUT_POST, 'checkbox', FILTER_SANITIZE_NUMBER_INT);
$adiniz           = temizlikYap($_POST['yourname']);
$telefonunuz = temizlikYap($_POST['yourphone']);

// Veritabanına kaydedilecekse --> INSERT INTO table

if(isset($checkbox)){

// Detaylı bilgi ve PHPMailer güncel sınıfı ->    https://github.com/PHPMailer/PHPMailer    

try {
    //Server settings
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
    $mail->isSMTP();                                            //Send using SMTP
    $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
    $mail->Username   = 'user@example.com';                     //SMTP username
    $mail->Password   = 'secret';                               //SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
    $mail->Port       = 465;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`

    //Recipients
    $mail->setFrom('from@example.com', 'Mailer');
    $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient
    $mail->addAddress('ellen@example.com');               //Name is optional
    $mail->addReplyTo('info@example.com', 'Information');
    $mail->addCC('cc@example.com');
    $mail->addBCC('bcc@example.com');

    //Attachments
    $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name

    //Content
    $mail->isHTML(true);                                  //Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}


}


}

 

Kolama yapınızı bu şekilde kendinize göre ayarlayın. Yinede sorun yaşıyorsanız, PHPMailer sınıfını ve dosyalarını silin. 

Sonra https://github.com/PHPMailer/PHPMailer bu linke girin. PHPMailer sınıfını tekrar indirin. Sayfada aşağıya doğru indiğinizde PHPMailer sınıfının nasıl kullanıldığını ve bir demo kodlarını göreceksiniz. Kendi projenize göre editlersiniz.

 

 


Üstadım çözüme ulaşana kadar verdiğiniz destek için çok teşekkür ediyorum...
Elinize emeğinize sağlık, şu anda çalışır hale geldi...


&


Ek olarak şunları söylemeliyim & söyleyebilirim & sormalıyım;


* PHPmailler'in birkaç gün önce indirdiğim en son versiyonu kullanıyordum, versiyon farkı yok diyebiliriz.


* Şu 3 dosyayı en başından beri include etmiş durumdaydım;
require "PHPMailer_masterl/src/Exception.php";
require "PHPMailer_masterl/src/PHPMailer.php";
require "PHPMailer_masterl/src/SMTP.php";


Bu 3 dosyayı include etmek zorunlu sanırım...!?




* Şu 3 satırı en üste almak sanırım yaşadığım problemin çözümü oldu;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

Bu 3 satırı yazmak zorunlu mu sizce?
Formsuz ve şartsız test dosyamda sadece ilk satır vardı ve gönderim yapıyordu...!?
2. ve 3.satırın varlık sebebini anlayamadım...

Ve neden alt satırlarda iken çalışmıyordu hala benim için bir muamma olmaya devam ediyor... !?



Bu 3 satırım altındaki dosya son sürümde yok o yüzden include edemedim;
require 'vendor/autoload.php';
Yokken de çalışıyor, neden var ve fonksiyonu nedir bu da muamma benim açımdan... !?



Alt satırlarla ilgili merak ettiğim birkaç husus olsa da sizi yormamak için gündeme getirmeyeceğim...
Fakat şunu pas geçemem;
Ggithub.com'daki örnekte şu satır var, doğrudur:
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption

Benim test örneğimdeki kodlar arasında ise onun yerine şu satır var;
$mail->SMTPSecure = "tls";

Hangisi daha doğru ve ideal değerlendiremiyorum...!?

Bahsettiğim test örneğini şu detaylı makaleden edinmiştim;
https://muhammedyaman.com/phpmailer-kullanimi-php-smtp-mail-gonderme/

ARADAKİ FARKLARI DA TAM KIYASLAYAMIYORUM KONUYA TAM HAKİ OLMADIĞIM İÇİN...



Son bir soru ile bitireyim üstadım;
Githubdan master dosyasını defalarca indirmeme rağmen zip içinden sadece src, ve language klasörleri çıkıyor.
https://github.com/PHPMailer/PHPMailer adresinde gözüken diğer klasörler çıkmıyor!
Bunun da nedenini çözemedim...!?

Kök dizindeki dosyaların ne olduğunu, özellikle de get_oauth_token.php dosyasının ne olduğunu sormuyorum artık...




Hem üstteki faydalı yanıtları verirken ve hem de bu uzun cevabımı okurken yeterince vaktinizi aldım.
Üstte değinmi olduğum noktalara ışık tutmak için vaktiniz kalmamış olabilir...
Hiç sorun değil...
Saygıyla karşılarım...

SON GÜNLERDEKİ TÜM KATKILARINIZ İÇİN TOPLUCA TEŞEKKÜR EDİYORUM...
ALLAH RAZI OLSUN...

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (04.05.2022 19:44)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

bytokca bytokca WM Aracı Kimlik Onayı
  • Üyelik 29.11.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Yazılım
  • Konum Konya
  • Ad Soyad H** T**
  • Mesajlar 48
  • Beğeniler 1 / 26
  • Ticaret 1, (%100)

Hiçbir dosya gereksiz değil. 

require 'vendor/autoload.php'; // composer kullanarak dosyalar çekilirse gelir. siz indirdiğiniz için manuel eklemelerde gerek yoktur ki zaten gelmez.
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Açıklamasında da belirtildiği üzere TLS şifrelemesini etkinleştirmek içindir.
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// classları okuyor bunlar

 

Aslında bütün sorularınıza tek tek cevap vermek isterdim ama artık sorun çözüldüğüne göre uzatmak istemem.

Aslında bu sınıfın detaylı açıklamasını neyi nasıl kullanmanız gerektiğini https://github.com/PHPMailer/PHPMailer bu linkde görebilirsiniz. Biraz incelerseniz sorularınıza cevap bulabilirsiniz.

SON GÜNLERDEKİ TÜM KATKILARINIZ İÇİN TOPLUCA TEŞEKKÜR EDİYORUM...
ALLAH RAZI OLSUN...

Rica ederim. Amacımız yardımcı olabilmek. Sizdende Allah razı olsun

BEYAZMASTER

kişi bu mesajı beğendi.

wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al