PDA

View Full Version : سوال: دریافت نشدن مقدار توسط برنامه در pdo



ravand
چهارشنبه 23 بهمن 1392, 20:31 عصر
سلام
مشکل عجیبی که برام پیش امده و بد جور کلافه ام کرده اینه که من رشته ای رو به برنامه ی زیر ارسال میکنم هیچ خروجی بهم نمیده جز یک اخطار:

<?php
Header('Cache-Control: no-cache');
if(isset($_GET['tag'])){
$tag=$_GET['tag'];
try {
include "connet.php";
$dbh->exec("SET CHARACTER SET utf8");
$sth = $dbh->query("select * from `mahsoli` where tag='{$tag}'");
foreach($sth as $row) {
$noo=$row['noo'];
$tozih=$row['tozih'];
}

}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
?>
لینک ارسال هم مثلا اینطوریه:

http://localhost/ravand/tag.php?tag=رشته
اینم اخطارش:

Notice: Undefined variable: noo in F:\wamp\www\ravand\tag.php on line 460
Call Stack
# Time Memory Function Location
1 0.0020 156056 {main}( ) ..\tag.php:0


( ! ) Notice: Undefined variable: tozih in F:\wamp\www\ravand\tag.php on line 464
Call Stack
# Time Memory Function Location
1 0.0020
به این خط توجه کنید:

$tag=$_GET['tag'];
وقتی زیرش مقدار متغییر رو چاپ میکنم چاپ میشه ولی نمیدونم چرا مقدار توسط select دریافت نمیشه!
یعنی اگه اینطوری باشه چاپ میشه:

$tag=$_GET['tag'];
echo $tag;
و حالا اگه بیام به جای دستور بالا اینطوری بنویسم برنامه اخطار نمیده و درست کار میکنه و خروجی میده:

$tag="رشته";
به نظر شما چه مشکلی میتونه داشته باشه؟
هر کاری کردم هیچ فایده ای نداشت!!!!!!!!!!!!!!!!!!!!

sadegh1362
چهارشنبه 23 بهمن 1392, 21:11 عصر
سلام
اولا به نظر من عبارت شرطی داخل sql رو از آکولاد در بیارید .
دوما کد داخل فایل connect.php چی هست؟
آیا تو تابع نوشته شده یا جداست . در اینطور مواقع بهتره از require استفاده می کنیم .

اگر تابع connect در صفحه connect داری باید فرا خونی بشه . در اینجا sql شما اصلا به دیتابیس وصل میشه ؟

ravand
چهارشنبه 23 بهمن 1392, 22:17 عصر
اولا به نظر من عبارت شرطی داخل sql رو از آکولاد در بیارید .
کدوم عبارت شرطی؟ if(isset رو منظوتون هست؟
دیگه اینکه این دستور include حتما درست کار میکنه که وقتی من اینطوری می نویسم خروجی میده:

$tag="رشته";
اگه خروجی نمیداد می گفتیم حق با شماست. و مشکل از include است.

آیا تو تابع نوشته شده یا جداست . در اینطور مواقع بهتره از require استفاده می کنیم .
در چه مواقعی؟
include و require از نظر شما چه فرقی با هم دارند؟ اینجا اون کاری رو که من میخواسم بهش رسیدم.
مشکل من اینه که این دستور مقداری رو نمیگیره :

$tag=$_GET['tag'];
که بده به این خط:

$sth = $dbh->query("select * from `mahsoli` where tag='{$tag}'");

sadegh1362
چهارشنبه 23 بهمن 1392, 22:31 عصر
منظورم عبارت
$sth = $dbh->query("select * from `mahsoli` where tag='{$tag}'");
دستور where است .
عبارت
$tag=$_GET['tag'];
مقدار می گیره چون به دلیل تابع isset اگر مقدار نگیره اصلا وارد شرط نمی شه . وارد می شه چون خطایی که داره می ده به دو مقداره
$noo=$row['noo'];$tozih=$row['tozih'];
هستش
پس وارد شرط میشه . مقدار query شما در خط 8 مشکل داره.
در ضمن شما اگر می خواید مقدار یک متغیر یا یک post رو ببینید . می تونید از تابع var_dump استفاده کنید . هر مقداری رو در این تابع بذارید اگر مقداری براش set نشده باشه مقدار null بر می گردونه. و اگر مقداری در اون باشه اون رو به طور منظم نشون می ده .
یعنی به این صورت :
var_dump($_GET['tag']);

ravand
پنج شنبه 24 بهمن 1392, 07:32 صبح
من واقعا نمی فهمم منظور شما چیه؟
احساس میکنم شما به جای اینکه بهم بگید مشکل چیه؟ بهم میگید این برنامه چطوری کار میکنه! منم میدونم برنامه چطوری کار میکنه. ولی نمیدونم چرا اخطار میده!
این شرط if(isset اینجا بودنش هیچ مشکلی بوجود نمیاره. چون من این شرط رو برداشتم بازم برنامه اخطار داد! اصلا من همیشه این شرط رو توی برنامه های mysql به کار بردم و مشکلی پیش نیومده.

مقدار query شما در خط 8 مشکل داره.
مشکلش چیه؟
من این قسمت رو چک کردم:

$sth = $dbh->query("select * from `mahsoli` where tag='{$tag}'");
حتی دیدم رشته به متغییر $tag هم داده شده ولی نمیدونم چرا برنامه هیچ خروجی نمیده! و فقط اخطار میده!!!!!!!!!

sadegh1362
پنج شنبه 24 بهمن 1392, 19:31 عصر
به این اخطار نگاه کنید

Notice: Undefined variable: noo in F:\wamp\www\ravand\tag.php on line 460
این منظورش اینه که مقدار
$row['noo']وجود نداره و متغیر $row خالیه.
منم نگفتم گذاشتن isset مشکلی ایجاد می کنه . من گفتم چون شما این تابع رو گذاشتین و اگر عبارت $_GET['tag'] مقدار نداشته باشه اصلا وارد شرط نمی شه . اما ... اخطاری که سیستم به شما می ده ماله بعده این خطه یعنی عبارت $_GET['tag'] مشکلی نداره و داره مقدار رو از url میگیره . خب حالا می ریم سره query .

از اونجایی که خطای شما داره میگه مقداره noo و tozih ست نشده پس نتیجه می گیریم که مقدار query شما ایراد داره .

درضمن در pdo وقتی می خواید مقداری بدید به عبارت درون query می تونید به این شکل بدید :

$qur = $dbh->prepare("select * from `mahsoli` where tag=:tag ");

$qur->bindvalue(":tag",$tag);

$qur->execute();

$all_res=$qur->fetchAll(PDO::FETCH_ASSOC);


ویا به این صورت :
$sth = $dbh->query("select * from `mahsoli` where tag='{$tag}'");
$sth->execute();
$all_res=$sth->fetchAll(PDO::FETCH_ASSOC);

امیدوارم مشکل حل بشه.