PDA

View Full Version : اشکال در زبان php



sina365
جمعه 29 خرداد 1394, 14:35 عصر
سلام دوستان.

من می خواستم اسکریپتی بنویسم که فایل پی اچ پی آماده ایجاد بکنه.
یعنی کد نویسی های داخل اون فایل پی اچ پی جدید رو از قبل نوشته ام وبا استفاده از دستور اف رایت اون فایل رو ایجاد می کردم.
خودتون امتحان کنید:
متغیر codes در واقع کد هایی هستند که باید رایت بشه.کمی دقت کنید:
$codes = "$_POST['name']";

syntax ها همه طبق اصول هستند اما ارور میده.
ربطی به رایت کردنش نداره خود همین دستوری که نوشتم مشکل داره.

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in F:\Xampp Server\htdocs\test\phpmacker.php on line 42


توی stack over flow مثل اینکه اونجا هم مطرح شده اما من متوجه نشدم چی نوشتن:

http://stackoverflow.com/questions/8400018/syntax-error-unexpected-t-encapsed-and-whitespace-expecting-t-string-or-t-vari

راه جایگزینی هست؟

fatima-php
جمعه 29 خرداد 1394, 16:06 عصر
کدتون و مقداری که داره توسط فرم ارسال میشه رو بگذارین. همینطوری نمیشه فهمید مشکل از چیه. تا به یه مشکل برخورد میکنید هم نگین اشکال از PHP چون به احتمال 99.999999٪ درصد مشکل از کد شماست.

sina365
شنبه 30 خرداد 1394, 21:33 عصر
کدتون و مقداری که داره توسط فرم ارسال میشه رو بگذارین. همینطوری نمیشه فهمید مشکل از چیه. تا به یه مشکل برخورد میکنید هم نگین اشکال از PHP چون به احتمال 99.999999٪ درصد مشکل از کد شماست.


نه عزیزم من مقدار رو از کاربر نمی گیرم. خود
$_POST['name']
مقدار متغیر $codes هست.این یه رشته متنیه.جملش هم اینه:
.$_POST['name']
این دستور نیست.رشته هست.
چون می خوام این رو یادستو اف رایت ، رایت کنم توی یه فایل جدید با پسوند پی اچ پی.تا اتوماتیک فایل پی اچ پی ایجاد کنه.
کل کدی که توی فایل ایجاد شده رایت می کنم بزرگتره.مشکل همین یه تیکه هست ومنم فقط همین یک تکه از رشته رو اینجا گذاشتم.
به stack ower flow هم که لینک دادم خواهش میکنم یه سری بزنید.همین مشکل من اونجا هم مطرح شده اما انگلیسی بود متوجه نشدم.

sina365
شنبه 30 خرداد 1394, 21:34 عصر
اشتباه املایی:
با دستور اف رایت
نه
یا دستور اف رایت

fatima-php
شنبه 30 خرداد 1394, 23:49 عصر
توی اون لینک گفتن ساختار HEREDOC رو به درستی نبسته. نباید بعد از Delimiter چیزی بنویسید. اول اینکه کدهاتون رو توی تگ PHP نگذاشتین که خوانا باشه و راحت بشه خوند. ثانیاً وقتی خطا دارین، باید چند خط اطراف خطا (حداقل دو سه خط) رو بگذارین چون ممکنه خطا از خطوط قبلی باشه. نگران نباشین کد شما تا وقتی سناریوی کارتون مشخص نباشه، بدرد کسی نمیخوره و ما هم فقط میخوایم راهنمایی کنیم. پس از گذاشتن کد هراس نداشته باشین.

pbm_soy
یک شنبه 31 خرداد 1394, 02:04 صبح
سلام دوستان.

من می خواستم اسکریپتی بنویسم که فایل پی اچ پی آماده ایجاد بکنه.
یعنی کد نویسی های داخل اون فایل پی اچ پی جدید رو از قبل نوشته ام وبا استفاده از دستور اف رایت اون فایل رو ایجاد می کردم.
خودتون امتحان کنید:
متغیر codes در واقع کد هایی هستند که باید رایت بشه.کمی دقت کنید:
$codes = "$_POST['name']";

syntax ها همه طبق اصول هستند اما ارور میده.
ربطی به رایت کردنش نداره خود همین دستوری که نوشتم مشکل داره.

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in F:\Xampp Server\htdocs\test\phpmacker.php on line 42


توی stack over flow مثل اینکه اونجا هم مطرح شده اما من متوجه نشدم چی نوشتن:

http://stackoverflow.com/questions/8400018/syntax-error-unexpected-t-encapsed-and-whitespace-expecting-t-string-or-t-vari

راه جایگزینی هست؟

من مشکل اصلی شما را اینجوری فهمیدم که میخواهید داخل یک متغیر رشته ای دستورات php را ذخیره کنید درسته؟
اگر جواب مثبت باشد اولین نکته اینه که دستورات نوشته شده در php در زمان اجرا تماما کامپایل و اجرا میشوند حتی انهائی که در داخل رشته گذاشته اید!
البته نظراتان را به تفاوت و کاربرد علامتهای تک کوتیشن (') و دابل کوتیشن (") در متغییرهای رشته ای جلب میکنم متغییرهای نوشته شده در داخل تک کوتیشن در زمان نمایش و یا اجرا ترجمه و تفسیر نمیشوند ولی شما برای ایجاد متغییر رشته ای از دابل کوتیشن استفاده کرده اید پس در زمان اجرا سعی میکند مقدار متغییر $POST['name'] را در متغییر شما ذخیره کند

به مثال ساده زیر و خروجی آن توجه کنید توجه کنید


$t='Hii';
$x="ZZ$t ZZ";
echo $x."<br>";

$x='ZZ$t ZZ';
echo $x."<br>";

$tt='Hii echo $t';

$x="ZZ$tt ZZ";
echo $x."<br>";

$x='ZZ$tt ZZ';
echo $x."<br>";


چهارتا دستور echo که چهار خط زیر را به عنوان خروجی نمایش خواهد داد
ZZHii ZZ
ZZ$t ZZ
ZZHii echo $t ZZ
ZZ$tt ZZ

همینطور برای تفسیر مقادیر رشته ها که دارای دستورات php هستند میتوانید از تابع eval نیز استفاده کنید که فکر نمیکنم اینجا مورد استفاده ای برای شما داشته باشد

sina365
یک شنبه 31 خرداد 1394, 12:27 عصر
سلام.
بله من حدودا یک ساله که برنامه نویسی می کنم.متوجه این موارد هستم.
به خاطر شما هم که بود یک بار دیگه باز بینی کردم واین بار رشته ام را تکه تکه کردم.
جاهایی که دستوری بود با تک کوتیشن وجاهایی که رشته متنی بود با دبل کوتیشن مشخص کردم.
این بار مشکل حل شد:
ظاهرا من در خواندن وفهمیدن مطلب stack ower flow دچار اشتباه شدم واین موضوع رابه گردن php انداختم.
من از همه عذر می خواهم.
اینم کد:


$pagecodes='
<html><head><title>بازگردانی گذرواژه</title></head><body>
<center>
<h2></h2>تغییر گذرواژه<br/><br/>
<form method=""post" action="">
<input type="text" name="newpassword"/><br/>لطفا گذرواژه را مجددا وارد نمایید<br/>
<input type="text" name="renewpassword"/>
<input type="submit" value="تغییر گذرواژه"/>
</form></center></body></html>
<?php
if(isset($_POST[ '."'newpassword '".'])
&& isset($_POST['."'renewpassword'".']) ){

if($_POST['."'renewpassword'".'] ==! null || $_POST['."'newpassword'".'] ==! null && strlen($_POST['."'renewpassword'".'])>8 && $_POST['."'renewpassword'".']===$_POST['."'newpassword'".']){}else die("<br/><center><q>گذرواژه شماباید حداقل 8 حرف و هردو یکسان باشند</center></q>");



$newpassword=addslashes($_POST['."'newpassword'".']);

echo "گذر واژه جدیدشما".$password;

}





else die("<center><code><b><pre style="text-shadow:0 0 2px red;"><q>لطفا گذرواژه مناسبی که حداقل شامل 8 کاراکتر باشد انتخاب کنید وآن را دوبار واردنمایید</q></center></code></pre></b>");

?>

';






$filename="file.php";
$file= fopen( $filename,'w');
fwrite($file,$pagecodes);
fclose($file);