buzz

ذخیره و اپدیت دیتابیس وردپرس با wpdb

11 پست در این موضوع قرار دارد

سلام

من کدی رو نوشتم که میاد اطلاعات رو در ارایه میریزه و بعد با متغیر $wpdb-> در دیتابیس وردپرس ذخیره می کنه.

foreach($table_rows as $tr) { // foreach row $row = $tr->childNodes; if($row->item(0)->tagName != 'tblhead') { // avoid headers $data[] = array( $trip ['Name' ]= trim($row->item(0)->nodeValue), $trip['LivePrice'] = trim($row->item(2)->nodeValue), $trip ['Changing']= trim($row->item(4)->nodeValue), $trip ['Lowest']= trim($row->item(6)->nodeValue), $trip['Topest']= trim($row->item(8)->nodeValue), $trip['Time']= trim($row->item(10)->nodeValue), ); } }

و بعد با متغیر $wpdb-> در دیتابیس وردپرس ذخیره می کنه.

foreach

($table_rows as $tr) { // foreach row $row = $tr->childNodes; if($row->item(0)->tagName != 'tblhead') { // avoid headers $wpdb->insert( $wpdb->prefix . 'fafa', array( 'title' => trim($row->item(0)->nodeValue) , 'liveprice' => trim($row->item(2)->nodeValue) , 'changing' => trim($row->item(4)->nodeValue) , 'lowest' => trim($row->item(6)->nodeValue) , 'topest' => trim($row->item(8)->nodeValue) , 'time' => trim($row->item(10)->nodeValue) ), array( '%s', '%s', '%s', '%s', '%s', '%s' ) ); $wpdb->update( $wpdb->prefix . 'fafa', array( 'title' => trim($row->item(0)->nodeValue) , 'liveprice' => trim($row->item(2)->nodeValue) , 'changing' => trim($row->item(4)->nodeValue) , 'lowest' => trim($row->item(6)->nodeValue) , 'topest' => trim($row->item(8)->nodeValue) , 'time' => trim($row->item(10)->nodeValue) ), array( '%s', '%s', '%s', '%s', '%s', '%s' ) ); } }

من می خوام ، بعد از اینکه داده ها رو ذخیره کرد، بار بعدی که ذخیره میشه مقادیر جدید جایگزین مقادیر قبلی بشه، نه اینکه دوباره مقادیر جدید بهشون اضافه بشه. یا در کل جدول موردنظر بعد insert ، آپدیت بشه.

اگه تو کد بالا نگاه کنید بعد از اینکه مقادیر insert شدن دوباره کد نوشتم که اپدیت بشن ولی این مورد اشتباهه و باید تو حلقه if قرار بگیره که مثلا اگه تو جدول داده ای نبود داده ذخیره بشه و اگه هم بود ، داده های جدید جایگزین قبلی بشن

.

0

به اشتراک گذاری این پست


لینک به پست

سلام

شما در آرایه و بعد در دیتابیس وارد می کنین

اگر بخواین همین رویه رو داشته باشین کل اطلاعات هر سری اپدیت میشن.

مگه اینکه بجای آرایه هر کدوم رو جدا جدا ذخیره کنین.

1

به اشتراک گذاری این پست


لینک به پست

کد ها رو بصورت زیر تغییر دادم

با استفاده از دستورON DUPLICATE KEY UPDATE

اما باز هم وقتی اجرا می کنم داده های جدید رو اضافه می کنه و جایگزین نمیشه. لطفا مشکل رو حل کنید خیلی نیاز دارم


$wpdb->insert( $wpdb->prefix . 'fafa',
array(
'title' => trim($row->item(0)->nodeValue) ,
'liveprice' => trim($row->item(2)->nodeValue) ,
'changing' => trim($row->item(4)->nodeValue) ,
'lowest' => trim($row->item(6)->nodeValue) ,
'topest' => trim($row->item(8)->nodeValue) ,
'time' => trim($row->item(10)->nodeValue) ),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
) )."ON DUPLICATE KEY UPDATE
title = VALUES('title' => trim($row->item(0)->nodeValue) ) ,
liveprice = VALUES('liveprice' => trim($row->item(2)->nodeValue) ) ,
changing = VALUES('changing' => trim($row->item(4)->nodeValue) ) ,
lowest = VALUES('lowest' => trim($row->item(6)->nodeValue) ) ,
topest = VALUES('topest' => trim($row->item(8)->nodeValue) ) ,
time = VALUES('time' => trim($row->item(10)->nodeValue) )";

0

به اشتراک گذاری این پست


لینک به پست

سلام . خوب چرا اول حذف و بعد درج انجام نمیدید ؟

0

به اشتراک گذاری این پست


لینک به پست

میشه نمونه کد رو بنویسید؟

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

کد رو الان بصورت زیر تغییر دادم.

اما باز هم عمل نمی کنه.

در کد زیر ابتدا بررسی آپدیت می کنه و اگر مقداری نبود ذخیره می کنه در جدول.


$query = $wpdb->prepare (
"INSERT INTO ".$wpdb-prefix."coin_price
(id, title, liveprice, changing, lowest,topest,time)
VALUES
(%d, %s, %s, %s,%s, %s, %s)
ON DUPLICATE KEY UPDATE
title = %s,
liveprice = %s,
changing = %s ,
lowest = %s,
topest = %s,
time = %s",
1,
trim($row->item(0)->nodeValue),
trim($row->item(2)->nodeValue),
trim($row->item(4)->nodeValue),
trim($row->item(6)->nodeValue),
trim($row->item(8)->nodeValue),
trim($row->item(10)->nodeValue),

);

ویرایش شده در توسط buzz
0

به اشتراک گذاری این پست


لینک به پست

سلام. این آخری که نوشتید خطا داره باید 13 پارامتر ارسال کنید نه 7 تا. بهتره بزارید توی ارایه و دوبار فراخوانی کنید مقادیر رو. نوع ستون id هم فکر کنم باید چک کنید که روی حالت افزایش خودکار نباشه. یا کلا یه اسم دیگه براش بزارید که قاطی نکنیم. چون ظاهرا ای دی رو خودتون تنظیم می کنید فقط.

1

به اشتراک گذاری این پست


لینک به پست

به نظرم این راه حلی بدی نباشه

خوب اول رکورد ها رو حذف کنید بعد دوباره رکورد جدید وارد کنید.

برای اینکار ابتدا کوئری زیر رو قبل insert قرار بدید // این کوئری تمام رکورد ها رو حذف می کنه


global $wpdb;
$delete = $wpdb->query("TRUNCATE TABLE `wp_table_name`");

بعد هم

کد خودتون


$wpdb->insert( $wpdb->prefix . 'fafa',
array(
'title' => trim($row->item(0)->nodeValue) ,
'liveprice' => trim($row->item(2)->nodeValue) ,
'changing' => trim($row->item(4)->nodeValue) ,
'lowest' => trim($row->item(6)->nodeValue) ,
'topest' => trim($row->item(8)->nodeValue) ,
'time' => trim($row->item(10)->nodeValue) ),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
)

ولی دقت کنید. ابتدا باید یک بار مقادیر وارد بشن و بعد دوباره حذف بشه. چون الان اگه کد کوئری حذف رکورد اجرا بشه ، چون رکوردی در دیتابیس ذخیره نشده ، خطا می ده .

و نکته دیگه اگه کد شما در حلقه foreach می خواید استفاده کنید باید کوئری حذف رو قبل حلقه بذارید.

1

به اشتراک گذاری این پست


لینک به پست

نه این کار درستی نیست که یک تیبل رو فقط برای یک ردیف اختصاص بدن. ایشون احتمالا منظورش این بوده که یک ردیف رو می خواد حذف کنه و دوباره بنویسدش. وگرنه این که کل تیبل واسه همین یک ردیف داده باشه که میشه یه چیزی مثل این شکلکه > :wacko:

1

به اشتراک گذاری این پست


لینک به پست

این کدی که taze نوشت کار کرد و حرف شما هم درسته.

خو اونجا که گفتید تو ارایه برزید مظورتون رو نفهمیدم کدوم رو برزیم ، لطفا کد رو بنویسید.

0

به اشتراک گذاری این پست


لینک به پست

کد رو که وقتشو ندارم حقیقت بنویسم اما منظورم همون 6 ، 7 تا پارامتری بود که به تابع prepare فرستادید. اونا رو باید دوبار بفرستید دیگه یکی برای حالت اول دستور اس کیو التون و یکی هم برای حالت دومش برای هر %s که مینویسید باید یه پارامتر بفرستید دیگه.

کدی که tazeh نوشت براتون میاد تیبل رو به کلی ریست میکنه و مسلما کار میده ! اما شما نباید یک تیبل رو به کلی برای همین یک ردیف داده اختصاص بدید ( مطمئن نیستم ولی فکر میکنم کار درستش اینه که اگر همین یک ردیف داده هست توی تیبل دیگه ای اگه دارید یه چیزی مثل wp-option یک فیلد اضافه بکنید و همه ی مقادیرتون رو توی اون سریالیز کنید و ذخیره کنید )

موفق باشید.

2

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط sajjad.1156
      با سلام
      دوستان بنده در سایتم از اسلایدر روولوشن استفاده می کنم اما متاسفانه وقتی از 13 لایه بیشتر به هر اسلاید اضافه می کنم خطای ایجکس میده و نمیذاره اسلاید رو ذخیره کنم.
      چه مسئله ای میتونه وجود داشته باشه؟
    • توسط hosseyn
      سلام سایت من به تازگی این مشکل رو پیدا کرده و توی گوگل وب مستر و گوگل سرچ کنسول خطای ایندکس نشدن صفحه اصلی سایت رو میده
      برای تبلیغ گوگل هم از صفحه اصلی ایراد می گرفت ولی با صفحات دیگه مشکلی نداره




    • توسط helen94
      سلام دوستان. من دنبال افزونه یا ابزارکی می گردم که باهاش در صفحه اصلی سایتم یه باکسی ایجاد کنم که در اون آخرین پست های سایت رو نشون بده. به این شکل که جدیدترین پست رو به همراه تصویر شاخصش در قسمت بالا به شکل بزرگتر نشون بده و در قسمت زیرش پست های قبل تر رو نشون بده. تصویر افزونه ی موردنظرم رو ضمیمه کردم به این پست.
      قالبی هم که ازش استفاده میکنم قالب استادیار هست.
      من قبلا موارد این چنینی رو در خیلی سایت ها دیدم، اما اسم افزونه یا ابزاری که باهاش این کار رو کردن نمیدونم.
      ممنون میشم راهنماییم کنید.


    • توسط sina-monfared
      سلام 
      در بخش دسته بندی محصولات؛ امکان استفاده از ابزار های ویرایش مربوط به این قسمت حذف شده است که در تصویر مشخص کرده ام.
      ممنون میشم راهنمایی بفرمایید.


    • توسط mr.meysam
      سلام
      وقت بخیر
      من روی وردپرس از قالب گود نیوز استفاده میکنم ولی امروز متوجه شدم که از هر تصویر حدود 18 تا سایز دیگه هم میسازه 
      چطور میتونم جلوی این کارو بگیرم؟
      حالا چطور میتونم اینا رو حذف کنم؟
      سایز هایی که میسازه اینا هستن
      120*76
       150*150
      180*120
      190*122
      220*140
      265*168
      274*173
      278*202
      284*180
      300*168
      308*192
      373*270
      45*35
      475*342
      567*365
      610*365
      90*60
      95*64
      تشکر