PDA

View Full Version : مشکل با تابع mysql_fetch_assoc



e601
دوشنبه 22 اردیبهشت 1393, 14:50 عصر
سلام
من مشکل عجیبی دارم که کلافم کرده ! نمیدونم این تابع mysql_fetch_assoc چرا جواب نمیده !


$con = mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db", $con) or die(mysql_error());
mysql_query("SET NAMES 'utf8'", $con);

$rs = mysql_query("SELECT * FROM `table` WHERE `id`=$resid");
$num_rows = mysql_num_rows($rs);

echo "num_rows : $num_rows<br><br>";

if($num_rows>0){
while ($row = mysql_fetch_assoc($rs)) {
$uid = $row["userid"];
$email = $row["email"];
}
}


کجای این کد مشکل داره؟ دستور echo رو برای این گذاشتم که مطمئن بشم کوئری خالی نیست و رکورد رو پیدا میکنه ولی نمیدونم چرا تابع mysql_fetch_assoc مقادیر فیلدها رو به من نمیده !!!!

MMSHFE
دوشنبه 22 اردیبهشت 1393, 14:57 عصر
الان چه خروجی دارین؟ mysql_error رو هم اکو کنید.

e601
دوشنبه 22 اردیبهشت 1393, 15:06 عصر
اصلا نه ارور میده نه مقدار دهی میکنه !
من میخوام از اون دو متغیر در ادامه کد استفاده کنم ولی هیچی داخلش قرار نمیگیره !

MMSHFE
دوشنبه 22 اردیبهشت 1393, 15:09 عصر
خوب خطاهای MySQL رو که PHP نشون نمیده. باید با دستور زیر بعد از اجرای کوئری ببینید چه خطایی داشتین:

echo mysql_error();

Mori Bone
دوشنبه 22 اردیبهشت 1393, 15:11 عصر
از mysql_fetch_array استفاده کن:متفکر:

MMSHFE
دوشنبه 22 اردیبهشت 1393, 15:13 عصر
این تابع (mysql_fetch_array) مصرف حافظه 2 برابر داره. استفاده ازش رو ابداً توصیه نمیکنم.

e601
دوشنبه 22 اردیبهشت 1393, 15:16 عصر
جناب شهرکی اونجایی که از دستور
echo "num_rows : $num_rows<br><br>"; استفاده کردم عدد 1 رو برمیگردونه یعنی 1 رکورد پیدا کرده و قاعدتا اروری نداشته که یک رکورد پیدا کرده.
ولی بازم واسه اینکه مطمئن بشم ، دستور شما رو هم تست کردم و اروری نمایش نداد !

e601
دوشنبه 22 اردیبهشت 1393, 15:18 عصر
از mysql_fetch_array استفاده کن:متفکر:

قبل اینکه اینجا سوال رو مطرح کنم از این تابع هم استفاده کردم ولی اونم هیچی جواب نداد !

MMSHFE
دوشنبه 22 اردیبهشت 1393, 15:19 عصر
خوب پس باید توی حلقه while با print_r محتوای row$ رو نشون بدین ببینیم چی توشه.

e601
دوشنبه 22 اردیبهشت 1393, 15:28 عصر
آقا دستور print_r میگه row$ حاوی اطلاعات رکورد هست !

Array ( [userid] => 27 [email] => email@gmail.com )

ولی چرا اون 2 تا متغیر مقدار دهی نمیشن؟!!!

MMSHFE
دوشنبه 22 اردیبهشت 1393, 15:33 عصر
خوب الان متغیرها مقدار دارن که. شما چیزی echo نکردین توی حلقه while

e601
دوشنبه 22 اردیبهشت 1393, 15:37 عصر
خوب الان متغیرها مقدار دارن که. شما چیزی echo نکردین توی حلقه while

درسته. اینجا اکو نکردم ولی در ادامه کد (که اینجا نذاشتم) باید اکو بشن ولی چیزی نمایش داده نمیشه !

MMSHFE
دوشنبه 22 اردیبهشت 1393, 15:45 عصر
کد کامل رو بگذارین.

e601
دوشنبه 22 اردیبهشت 1393, 16:04 عصر
این کد مربوط به صفحه verify.php هست که برای درگاه پرداخت پارس پال نوشتم. کدهای عملیاتی طبق مستندات خودشون هست و عملیات پرداخت بصورت کامل و بدون مشکل انجام میشه. فقط موقعی که در نهایت میخوام شماره پیگیری و تاریخ و ... رو نشون بدم متغیرها خالی هستن !


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>گزارش عملیات</title>

</head>

<body>

<div class="page" dir="rtl">

<div class="rep">
<div class="head">
<div class="title">
<h2>نتیجه عملیات</h2>
</div>
</div>
<div style="clear:both;"></div>
<br /><hr />
<div class="body">

<?php
$MerchantID = '0000000';
$ParspalPassword = '*******';

if(isset($_POST['status']) && $_POST['status'] == 100){

$Status = $_POST['status'];
$Refnumber = $_POST['refnumber'];
$Resnumber = $_POST['resnumber']; //Your Order ID

//اتصال به دیتابیس
$con = mysql_connect("localhost", "user", "pss") or die(mysql_error());
mysql_select_db("acounts", $con) or die(mysql_error());
mysql_query("SET NAMES 'utf8'", $con);

$rs = mysql_query("SELECT * FROM `payments` WHERE `payid`=$Resnumber");
$num_rows = mysql_num_rows($rs);

echo "num_rows : $num_rows<br><br>";

if($num_rows>0){

while ($row = mysql_fetch_assoc($rs)) {
print_r($row);
$uid = $row["userid"];
$email = $row["email"];
$Price = $row["price"];
$date = new jDateTime(true, true, 'Asia/Tehran');
$start_date = $date->date("l j F Y", $row["start"]);
$expire_date = $date->date("l j F Y", $row["expire"]);
echo "<br>uid:$uid<br>
email:$email<br>
Price:$Price<br>
start_date:$start_date<br>
expire_date:$expire_date<br>";
}

$client = new SoapClient('http://merchant.parspal.com/WebService.asmx?wsdl');

$res = $client->VerifyPayment(array("MerchantID" => $MerchantID , "Password" =>$ParspalPassword , "Price" =>$Price,"RefNum" =>$Refnumber ));

$Status = $res->verifyPaymentResult->ResultStatus;
$PayPrice = $res->verifyPaymentResult->PayementedPrice;

if($Status == 'success')// Your Peyment Code Only This Event
{
echo "<p>پرداخت شما با موفقیت انجام شد.<br />
<br />
نام کاربری شما : $email<br />
تاریخ سفارش : $start_date<br />
تاریخ انقضا : $expire_date<br />
مبلغ : $PayPrice<br />
شماره پیگیری : $Refnumber<br />
<br /></p>";

}else{
echo "<p>خطا در عملیات پرداخت:<br /></p>
<p style='text-align:left'>$Status<br /></p>";
}

}else{

echo "<p style='color:red;font-weight:bold'>اطلاعات پرداخت معتبر نمیباشد.</p><br />";

}

}
else
{
echo '<p>
اطلاعات پرداخت معتبر نمیباشد.
<br /></p>';
};
?>

</div>
</div>

</div>

</body>

</html>

MMSHFE
دوشنبه 22 اردیبهشت 1393, 16:17 عصر
اینو تست کنید:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>گزارش عملیات</title>
</head>
<body>
<div class="page" dir="rtl">
<div class="rep">
<div class="head">
<div class="title">
<h2>نتیجه عملیات</h2>
</div>
</div>
<div style="clear:both;"></div>
<hr />
<div class="body">
<?php
$MerchantID = '0000000';
$ParspalPassword = '*******';
if(isset($_POST['status']) && $_POST['status'] == 100) {
$Status = $_POST['status'];
$Refnumber = $_POST['refnumber'];
$Resnumber = $_POST['resnumber']; //Your Order ID
//اتصال به دیتابیس
$con = mysql_connect('localhost', 'user', 'pss') or die(mysql_error());
mysql_select_db('acounts', $con) or die(mysql_error());
mysql_query('SET NAMES \'utf8\'', $con);
mysql_set_charset('utf8');
$rs = mysql_query("SELECT `userid`,`email`,`price`,`start`,`expire` FROM `payments` WHERE (`payid`='{$Resnumber}') LIMIT 1");
if($rs && mysql_num_rows($rs) > 0) {
list($uid, $email, $price, $start_date, $expire_date) = mysql_fetch_assoc($rs);
mysql_free_result($rs);
$date = new jDateTime(true, true, 'Asia/Tehran');
echo "uid:{$uid}<br />" . PHP_EOL;
echo "email:{$email}<br />" . PHP_EOL;
echo "Price:{$Price}<br />" . PHP_EOL;
echo "start_date:{$start_date}<br />" . PHP_EOL;
echo "expire_date:{$expire_date}<br />" . PHP_EOL;
$client = new SoapClient('http://merchant.parspal.com/WebService.asmx?wsdl');
$res = $client->VerifyPayment(array("MerchantID" => $MerchantID , "Password" =>$ParspalPassword , "Price" =>$price,"RefNum" =>$Refnumber));
$Status = $res->verifyPaymentResult->ResultStatus;
$PayPrice = $res->verifyPaymentResult->PayementedPrice;
if($Status == 'success') { // Your Peyment Code Only This Event
echo '<p>پرداخت شما با موفقیت انجام شد.<br />' . PHP_EOL;
echo "نام کاربری شما : {$email}<br />" . PHP_EOL;
echo "تاریخ سفارش : {$start_date}<br />" . PHP_EOL;
echo "تاریخ انقضا : {$expire_date}<br />" . PHP_EOL;
echo "مبلغ : {$PayPrice}<br />" . PHP_EOL;
echo "شماره پیگیری : {$Refnumber}<br />" . PHP_EOL;
echo '</p>';
}
else {
echo '<p>خطا در عملیات پرداخت:</p>' . PHP_EOL;
echo "<p style=\"text-align:left\">{$Status}</p>" . PHP_EOL;
}
}
else {
echo '<p style="color:red;font-weight:bold">اطلاعات پرداخت معتبر نمیباشد.</p>' . PHP_EOL;
}
}
else
{
echo '<p>اطلاعات پرداخت معتبر نمیباشد.</p>' . PHP_EOL;
}
?>
</div>
</div>
</div>
</body>
</html>

e601
دوشنبه 22 اردیبهشت 1393, 16:59 عصر
جناب شهرکی من چون در حال انجام تغییرات هستم ، علاوه بر کد پیشنهادی شما خودم هم یکسری آیتم مورد نیاز رو اضافه کردم ولی این کد هم مشکل داره.
اگر امکانش هست سورس زیر رو یه نگاهای بندازید ببینید کم و کسری چی داره که کار نمیکنه !
از شما بسیار بسیار ممنونم که وقت میذارید و به سایر اعضا راهنمایی ارائه میکنید.


<?php

$MerchantID = '0000000';
$ParspalPassword = '********';

if(isset($_POST['status']) and $_POST['status'] == 100){

$Status = $_POST['status'];
$Refnumber = $_POST['refnumber'];
$Resnumber = $_POST['resnumber']; //Your Order ID

//اتصال به دیتابیس
$con = mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("acounts", $con) or die(mysql_error());
mysql_query('SET NAMES \'utf8\'', $con);
mysql_set_charset('utf8');
$rs = mysql_query("SELECT `userid`,`email`,`price`,`description`,`start`,`ex pire` FROM `payments` WHERE (`payid`='{$Resnumber}') LIMIT 1");

if($rs and mysql_num_rows($rs) > 0) {

list($uid, $email, $price, $description, $start_date, $expire_date) = mysql_fetch_assoc($rs);
mysql_free_result($rs);
$date = new jDateTime(true, true, 'Asia/Tehran');
$start_date = $date->date("l j F Y", $start_date);
$expire_date = $date->date("l j F Y", $expire_date);
echo "uid:{$uid}<br />" . PHP_EOL;
echo "email:{$email}<br />" . PHP_EOL;
echo "Price:{$Price}<br />" . PHP_EOL;
echo "start_date:{$start_date}<br />" . PHP_EOL;
echo "expire_date:{$expire_date}<br />" . PHP_EOL;

$client = new SoapClient('http://merchant.parspal.com/WebService.asmx?wsdl');

$res = $client->VerifyPayment(array("MerchantID" => $MerchantID , "Password" =>$ParspalPassword , "Price" =>$Price,"RefNum" =>$Refnumber ));

$Status = $res->verifyPaymentResult->ResultStatus;
$PayPrice = $res->verifyPaymentResult->PayementedPrice;

if($Status == 'success')// Your Peyment Code Only This Event
{
mysql_query("UPDATE `users` SET `active`=1 WHERE (`id`={$uid})");
mysql_query("UPDATE `payments` SET `refnumber`='{$Refnumber}',`success`=1 WHERE (`payid`={$Resnumber})");
echo "<p>کاربر گرامی : مراحل ثبت نام و پرداخت حق عضویت شما با موفقیت به انجام رسید. از شما سپاسگذاریم. اطلاعات پرداختی شما به شرح زیر میباشد :<br />". PHP_EOL;
echo "<br />". PHP_EOL;
echo "تاریخ ثبت نام/تمدید : {$start_date}". PHP_EOL;
echo "تاریخ انقضای عضویت : {$expire_date}". PHP_EOL;
echo "مبلغ پرداختی : {$PayPrice}". PHP_EOL;
echo "شماره پیگیری : {$Refnumber}". PHP_EOL;
echo "<br /></p>";

}else{
echo "<p>خطا در پردازش عملیات پرداخت. عضویت در سایت سایت بدرستی انجام نشد. گزارش خطا :<br /></p>". PHP_EOL;
echo "<p style='text-align:left'>{$Status}<br /></p>". PHP_EOL;
}

}else{

echo "<p style='color:red;font-weight:bold'>اطلاعات پرداخت معتبر نمیباشد. مراحل عضویت در سایت بدرستی طی نشده است.</p><br />". PHP_EOL;

}

}
else
{
echo '<p>اطلاعات پرداخت معتبر نمیباشد.<br /></p>'. PHP_EOL;
}

?>