PDA

View Full Version : سوال: دانلود اطلاعات دلخواه از دیتابیس با php



viiictor
پنج شنبه 26 تیر 1393, 05:47 صبح
سلام اساتید
از عنوان تاپیک مشخص هست !
من یه سایت دارم کاربرا موقع ثبت نام یک سری مشخصات وارد میکنن که طبیعتا توی دیتابیس ذخیره و نگه داری میشه !
حالا من میخوام مثلا یک یا دو ستون از هر سطر رو در قالب یک فایل متنی دانلود کنم !
مثلا ستون هایی با نام :
name
number
رو به اینصورت توی فایل متن بده بهم

name;number
amir;123456

ایا امکان پذیره این کار ؟


دیتابیس = mysql مدیریت دیتابیس : phpmyadmin کنترل پنل : cpanel سیستم مدیریت محتوی سایت : vbulletin

viiictor
پنج شنبه 26 تیر 1393, 05:50 صبح
امیدوارم منظورم رو درست رسونده باشم!
فرض کنید 100 تا کاربر یه سری مشخصات دارن من فقط دوتا ازون یه سری مشخصات رو میخوام دریافت کنم :دی
اگه امکان این کار هست بگید تا اسم سطون ها و دیگر مشخصاتی که برای نوشتن فایل php نیاز هست رو در اختیارتون بزارم

viiictor
پنج شنبه 26 تیر 1393, 06:41 صبح
دوستان من خودم اینو نوشتم ! اوکی هم هست !

(سوالم رو بعد از کد ها نوشتم :دی)




<?PHP


$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT field6,field5 FROM table1';

mysql_select_db('database_1');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
echo "User Mobile Number :{$row[0]} <br> ".
"User Real Name : {$row[1]} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>


این الان از دیتابیس database_1 و جدول table1 ستون های field5 , field6 رو زیر هم نشون میده !
حالا اگه بخوام فقط کسایی که فیلد 6 شون دارای مقدار هست (خالی نیست) رو نشون بده باس چیکار کنم ؟
واسه این که در قالب یک فایل بده دانلود کنم و فایل رو روی سرور نگه نداره باس چه کنم ؟

miladamirzadeh
پنج شنبه 26 تیر 1393, 23:22 عصر
برای نشون دادن اینکه فیلدی خالی هست یا نه باید قاعده ای داشته باشی. اگر منظورت مقدار NULL هست می تونی از کوئری زیر استفاده کنی.


SELECT field5,field6 FROM table1 WHERE NOT field6 IS NULL

اما در مورد خروجی فایل، خود MySQL این مورد رو پشتیبانی می کنه، می تونی از کد زیر استفاده کنی:


SELECT field5,field6 FROM table1
INTO OUTFILE '/tmp/table.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'


حالا تکنیک برداشتن این فایل از روی سرور و انتقال اون به سمت کلاینت میشه مساله ی PHP.

viiictor
جمعه 27 تیر 1393, 02:40 صبح
ممنون این کد دومی که دادید باید توی php استفاده شه و دانلود و پاک کردن (خالی کردن محتوی فایل) روی سرور با php انجام بشه ؟ کد اول رو هم جایگزین قبلی توی فایل خودم بکنم دیگه فیلد6 خالی ها رو توی خروجی نمیاره ؟ ممنونم

miladamirzadeh
جمعه 27 تیر 1393, 10:13 صبح
ممنون این کد دومی که دادید باید توی php استفاده شه و دانلود و پاک کردن (خالی کردن محتوی فایل) روی سرور با php انجام بشه ؟ کد اول رو هم جایگزین قبلی توی فایل خودم بکنم دیگه فیلد6 خالی ها رو توی خروجی نمیاره ؟ ممنونم
دقیقا! موفق باشید.

viiictor
جمعه 27 تیر 1393, 20:50 عصر
$sql = 'SELECT field5,field6 FROM table1 WHERE NOT field6 IS NULL';



اینطوری قرار دادم هیچ فرقی نکرد ! هنوز اون هایی که فیلد6 خالی دارن رو هم میاره !

miladamirzadeh
جمعه 27 تیر 1393, 22:25 عصر
$sql = 'SELECT field5,field6 FROM table1 WHERE NOT field6 IS NULL';



اینطوری قرار دادم هیچ فرقی نکرد ! هنوز اون هایی که فیلد6 خالی دارن رو هم میاره !
پس فیلد خالی مقدار NULL نداره. باید ببینید چه مقداری تو اون فیلد ذخیره شده. شاید '' باشه و یا رشته ای خالی.

viiictor
یک شنبه 29 تیر 1393, 00:04 صبح
دیتابیس mysql هست و با phpmyadmin مدیریت میشه !

اگر خالی باشه باید کدوم از این ها رو استفاده کنم و به چه صورتی ؟

''
""
' '
" "

ممنون

viiictor
یک شنبه 29 تیر 1393, 23:11 عصر
up !

اگه میشه به من بگید چطوری به این فایل بفهمونم اونایی که فیلد حالی دارن رو نشون نده ! فقط همین مونده متشکرم!

ars31277
دوشنبه 30 تیر 1393, 08:44 صبح
up !

اگه میشه به من بگید چطوری به این فایل بفهمونم اونایی که فیلد حالی دارن رو نشون نده ! فقط همین مونده متشکرم!

از یه دستور شرطی کمک بگیرید که در زیر نوشتم

<?PHP


$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT field6,field5 FROM table1';

mysql_select_db('database_1');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
if($row[6]!='')
{


echo "User Mobile Number :{$row[0]} ".
"User Real Name : {$row[1]} ".
"--------------------------------";
}
}


echo "Fetched data successfully\n";
mysql_close($conn);
?>

viiictor
سه شنبه 31 تیر 1393, 00:48 صبح
اقا ممنون اما این سری یه صفحه خالی میاره آخرش مینویسه Fetched data successfully

viiictor
سه شنبه 31 تیر 1393, 01:02 صبح
اقا حلش کردم ممنون خیلی کمکم کردین ! فقط یه سوال دیگه که زیاد واجب نیست اما واسه حرفه ای تر شدنش خوبه ! چطور به کمک همون if که نوشتین بهش بگیم فیلد هایی که غیر عدد هستن (هر چیزی غیر از اعداد) و کمتر یا بیشتر از 11 کاراکتر هستن رو نشون نده ! مثلا کاربر به جای شماره همراهش اومده اسمشو نوشته ! یا شماره رو اشتباه زده تعداد رقم هاش زیاده یا کمه ! اونا رو هم نیاره !

احسان!
سه شنبه 31 تیر 1393, 08:31 صبح
برای پیدا کردن نوع داده ی یه متغییر میتونید از تابع gettype یا توابع is_*(مثلا is_string )و... استفاده کنید.(توابعی هم برای گرفتن طول وجود داره.خودتون هم میتونید با یه آرایه به راحتی حساب کنید.ولی روش اصولی این نیست.بهتره که قبل از ذخیره فرم داخل پایگاه داده بررسی کنید که اطلاعات درسته یا نه.به این کار اعتبار سنجی( form validation )میگن.

ars31277
سه شنبه 31 تیر 1393, 13:25 عصر
اقا حلش کردم ممنون خیلی کمکم کردین ! فقط یه سوال دیگه که زیاد واجب نیست اما واسه حرفه ای تر شدنش خوبه ! چطور به کمک همون if که نوشتین بهش بگیم فیلد هایی که غیر عدد هستن (هر چیزی غیر از اعداد) و کمتر یا بیشتر از 11 کاراکتر هستن رو نشون نده ! مثلا کاربر به جای شماره همراهش اومده اسمشو نوشته ! یا شماره رو اشتباه زده تعداد رقم هاش زیاده یا کمه ! اونا رو هم نیاره !

با استفاده از تابع is_numeric عدد بودنشو بررسی کن بعد مثل مثال زیر

<?php
$tests = array(
"42",
1337,
0x539,
02471,
0b10100111001,
1337e0,
"not numeric",
array(),
9.1
);

foreach ($tests as $element) {
if (is_numeric($element)) {
echo "'{$element}' is numeric", PHP_EOL;
} else {
echo "'{$element}' is NOT numeric", PHP_EOL;
}
}
?>
و حالا با استفاده از دستورstrlen طول تابعتو بدست بیار

<?php
$str = 'abcdef';
echo strlen($str); // 6

$str = ' ab cd ';
echo strlen($str); // 7
?>
ولی همونطور که دوستمون احسان گفت بهتره موقع ثبت اطلاعات بررسی کنی

viiictor
چهارشنبه 01 مرداد 1393, 03:04 صبح
برای پیدا کردن نوع داده ی یه متغییر میتونید از تابع gettype یا توابع is_*(مثلا is_string )و... استفاده کنید.(توابعی هم برای گرفتن طول وجود داره.خودتون هم میتونید با یه آرایه به راحتی حساب کنید.ولی روش اصولی این نیست.بهتره که قبل از ذخیره فرم داخل پایگاه داده بررسی کنید که اطلاعات درسته یا نه.به این کار اعتبار سنجی( form validation )میگن.

مرسی اقا احسان ! متاسفانه فرم دست نویس نیست ! این ها 2 تا فیلد هستن که سیستم ویبولتین (همین انجمن ساز) به ثبت نام اضافه میکنه و تنها حق انتخاب ما نوع فیلد هست که چک باکس باشه اینپوت تک خطی باشه یا رادیو باتن ! نمیشه بهش بگیم این فیلد فقط عدد باس وارد شه!


با استفاده از تابع is_numeric عدد بودنشو بررسی کن بعد مثل مثال زیر

<?php
$tests = array(
"42",
1337,
0x539,
02471,
0b10100111001,
1337e0,
"not numeric",
array(),
9.1
);

foreach ($tests as $element) {
if (is_numeric($element)) {
echo "'{$element}' is numeric", PHP_EOL;
} else {
echo "'{$element}' is NOT numeric", PHP_EOL;
}
}
?>
و حالا با استفاده از دستورstrlen طول تابعتو بدست بیار

<?php
$str = 'abcdef';
echo strlen($str); // 6

$str = ' ab cd ';
echo strlen($str); // 7
?>
ولی همونطور که دوستمون احسان گفت بهتره موقع ثبت اطلاعات بررسی کنی

ممنون از اونجایی که پی اچ پی زیاد سرم نمیشه باهاش سر و کله میزنم اگه تونستم که هیچ خیلی هم ممنون اما اگه موفق نشدم فایلم رو پیوست میکنم وقت کردید درستش کنید ممنونم