النتائج 1 إلى 11 من 11

الموضوع: تساؤل عن تحديث قيمة في قواعد البيانات

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    May 2004
    المشاركات
    556

    تساؤل عن تحديث قيمة في قواعد البيانات



    السلام عليكم

    اخوتي الكرام

    انا اقوم ببعض التعديلات على سكربت وواجهت بعض المشاكل بتحديث البيانات في قواعد البيانات.... واود التساؤل عن :

    الجدول الذي يتم العمل عليه : users
    العناصر الموجودة في الجدول :

    id - int(11) auto increment
    user - يضم اسم المستخدم Username
    passwd - يضم كلمة السر بتشفير MD5
    user_class - صلاحية العضو للإشراف
    registration_mail - البريد الالكتروني الخاص بالعضو
    user_info - هذه الخانة تضم معلومات عن العضو وتحتوي على اكثر من قيمة في نفس الوقت ( firstname, lastname, aboutme, points )

    مثال لمحتويات user_info
    كود HTML:
    O:4:"User":49:{
    s:8:"firstname";s:7:"Jhon";
    s:8:"lastname";s:32:"Smith";
    s:7:"aboutme";s:0:"Welcome to my profile";
    s:6:"points";i:2000;
    }
    ولدي حالياً اكثر من 3000 عضو

    إذا كنت اريد في جعل القيمة points .. لجميع الزوار هي الصفر ... كيف يتم هذا الامر ؟!

    ---------

    الموضوع الثاني

    قمت بعمل متجر مصغر في السكربت ... ويمكن العضو من شراء اشياء معينة بإستخدام الpoints ...

    السؤال هو : ما هو الامر الذي يجب تنفيذه في قواعد البيانات لكي يتم إنقاص عدد معين من النقاط ..

    مثال :

    العضو الموجود في الاعلى ( Jhon Smith ) قام بشراء صورة وتكلفتها 500 نقطة

    كيف يتم تغيير النقاط الخاصة بهذا العضو ... وجعلها 1500 ... دون تغيير القيم الأخرى ( firstname, lastname, aboutme .... )


    --------

    ملاحظة : النقاط تتغير كل دقيقة, حيث انه يتم حسابها على عدد مشاركات العضو في الموقع ...
    ملاحظة 2 : الخانة user_info تضم حوالي ال 60 متغير ( وليس فقط firstname, lastname, aboutme, points )

    --------
    تقبلو تحياتي







  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2007
    المشاركات
    597


    :con2:

    إذا كنت اريد في جعل القيمة points .. لجميع الزوار هي الصفر ... كيف يتم هذا الامر ؟!
    تعمل التالي :
    كود PHP:
    $query mysql_query("update user_info set points=0"); 
    السؤال هو : ما هو الامر الذي يجب تنفيذه في قواعد البيانات لكي يتم إنقاص عدد معين من النقاط ..
    الكود :

    كود PHP:
    $m_query mysql_query("update user_info set points=points-500 where id=150 or first_name='John Smith'"); 

    واذا بدك تتعلم اكثر عن الامر update تفضل هالرابط :
    SQL UPDATE Statement

    اتمنى اني افدتك اخي العزيز






  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    May 2004
    المشاركات
    556


    هذا الامر حسب ما فهمته ... يقوم بتحديث قيمة خانة اسمها points .. في جدول اسمه user_info ...

    الجدول انا عندي اسمه users .... يضم خانة اسمها user_info ...

    الخانة user_info .. تضم حوال 61 متغير ... وقيم .... منها points ...


    نتيجة الامر الذي اعطيتني ياه هو :

    SQL query:

    UPDATE user_info SET points = points -500 WHERE id =1

    MySQL said: Documentation
    #1146 - Table 'shopping.user_info' doesn't exist









  4. #4
    عضو فعال
    تاريخ التسجيل
    Jun 2002
    المشاركات
    1,346


    بسم الله الرحمن الرحيم

    وعليكم السلام ورحمة الله وبركاته..

    محتويات user_info تم معالجتها بـالدالة serialize قبل إدخالها..
    لذا يتحتم عليك إعادة البيانات إلى طبيعتها عند فك البيانات وذلك باستخدام الدالة unserialize

    الدالة unserialize تخرج مصفوفة مفاتيحها هي المفاتيح المذكورة أعلاه firstname.lastname,.. etc وبياناتها هي قيم تلك المفاتيح في النص..

    نقوم بتعيين points إلى صفر..

    ثم نعالج البيانات مرة أخرى بـ serialize
    وندخل البيانات النهائية

    فلو أخذنا التالي

    كود PHP:
    <?
    /* $output 
    عبارة عن القيم المستخرج من الحقل 
    user_info
    */
    $a unserialize($output); 

    // نقوم بتعيين القيم الجديدة
    $a['points'] = 0;

    // ثم نعالج البيانات مرة أخرى
    $data serialize($a);
    ?>
    بعد ذلك تقوم بإدخال البيانات مرة أخرى إلى قاعدة البيانات


    ستحتاج لتطبيق هذه الخطوة لكل سجل في قاعدة البيانات..


    أتمنى الشرح واضح..
    لأني ما تعمقت في التفاصيل..
    شرحت فقط الفكرة..



    بالتوفيق إن شاء الله
    في أمان الله






  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    May 2004
    المشاركات
    556


    كود PHP:
    <?php


    include("connect.php");
        
    $m_result mysql_query("select user_info from ".$mysql_table_prefix."users where id=1") or die("database error: cannot retrieve user info<br>".mysql_error());
        if (
    mysql_num_rows($m_result)) {
            list(
    $current_user_text) = mysql_fetch_array($m_resultMYSQL_NUM);
            
    $current_user unserialize($current_user_text);


    $current_user['points'] = 0;

    $data serialize($current_user);

    $updatedata mysql_query("UPDATE ".$mysql_table_prefix."users SET user_info=$data WHERE id=1") or die("database error<br>".mysql_error());

    }
    ?>
    هل هذا ما تقصده ؟!

    اعتقد ان الناتج لهذه العملية سيقوم بتبديل محتويات user_info بشكل كامل .. ويضع بدلاً منه

    كود HTML:
    {s:6:"points";i:0;}

    محتويات الuser_info هي :

    كود HTML:
    O:4:"User":49:
    {
    s:8:"nickname";s:7:"test";
    s:8:"password";s:32:"098f6bcd4621d373cade4e832627b4f6";
    s:7:"surname";s:0:"";
    s:9:"firstname";s:0:"";
    s:5:"email";s:0:"";
    s:3:"url";s:0:"";
    s:6:"icquin";s:0:"";
    s:9:"photo_url";s:0:"";
    s:5:"about";s:0:"";
    s:10:"user_class";i:131071;
    s:10:"last_visit";i:1236671131;
    s:5:"b_day";i:0;
    s:7:"b_month";i:0;
    s:6:"b_year";i:0;
    s:12:"show_group_1";i:1;
    s:12:"show_group_2";i:1;
    s:3:"sex";i:1;
    s:4:"city";s:0:"";
    s:13:"registered_at";i:1234455838;
    s:20:"enable_web_indicator";i:0;
    s:17:"registration_mail";s:0:"";
    s:8:"htmlnick";s:39:"<font color="darkorange">test</font>";
    s:6:"smiles";s:0:"";
    s:14:"u_browser_hash";i:17734;
    s:13:"u_cookie_hash";s:32:"b9869e2af5411972d26afc339eb07cea";
    s:4:"u_ip";s:9:"127.0.0.1";
    s:13:"last_posttime";i:1236671134;
    s:18:"last_status_change";i:1236653137;
    s:13:"status_change";s:1:"1";
    s:10:"login_text";s:0:"";
    s:11:"logout_text";s:0:"";
    s:2:"IP";s:0:"";
    s:12:"browser_hash";s:0:"";
    s:11:"cookie_hash";s:0:"";
    s:7:"session";s:0:"";
    s:16:"allow_pass_check";b:0;
    s:15:"last_pass_check";i:1236642182;
    s:4:"quiz";i:0;
    s:19:"quiz_fastest_answer";i:0;
    s:11:"quiz_points";i:0;
    s:6:"points";i:100000;
    s:15:"last_actiontime";i:1236671133;
    s:5:"level";i:0;
    s:6:"zvanie";s:0:"";
    s:4:"clan";s:0:"";
    s:8:"clanname";s:4:"Friends";
    s:9:"clancolor";s:5:"black";
    s:4:"mood";i:9;
    s:10:"registered";b:1;
    }


    تقبل تحياتي .. وشكراً لك مسبقاً ...






  6. #6
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    هل يمكنك ان شرح لنا فكرة ادخال عدة بيانات -متغيرات- في حقل واحد و طريقة استدعاء احد المتيغرات دون الاخر ؟





    __________________
    راسلني

  7. #7
    عضو فعال
    تاريخ التسجيل
    Jun 2002
    المشاركات
    1,346


    نعم.. هذا قصدي!

    اعتقد ان الناتج لهذه العملية سيقوم بتبديل محتويات user_info بشكل كامل
    لا.. لن تتأثر بقية القيم .. سيتم تبديل قيمة points فقط!
    يمكنك طباعة قيمة المتغير قبل عمل serialize لتتأكد من محتوياته بنفسك..


    تحياتي






  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2007
    المشاركات
    597


    هل يمكنك ان شرح لنا فكرة ادخال عدة بيانات -متغيرات- في حقل واحد و طريقة استدعاء احد المتيغرات دون الاخر ؟

    وانا اتمنى ذلك أيضا

    :con2:






  9. #9
    عضو نشيط جدا
    تاريخ التسجيل
    May 2004
    المشاركات
    556


    كود PHP:
    <?php

    include("connect.php");
        
    $m_result mysql_query("select user_info from ".$mysql_table_prefix."users where id=1") or die("database error: cannot retrieve user info<br>".mysql_error());
        if (
    mysql_num_rows($m_result)) {
            list(
    $current_user_text) = mysql_fetch_array($m_resultMYSQL_NUM);
            
    $current_user unserialize($current_user_text);
    echo 
    "بعد فك تشفير البيانات<br>";
    echo 
    $current_user;
    /*عبارة عن القيم المستخرج من الحقل
    user_info
    */
    //نقوم بتعيين القيم الجديدة
    $current_user['points'] = 0;

    // ثم نعالج البيانات مرة أخرى
    $data serialize($current_user);
    echo 
    "<br>بعد تشفير البيانات وتعديل النقاط<br>";

    echo 
    $data;
    //$updatedata = mysql_query("UPDATE ".$mysql_table_prefix."users SET user_info=$data WHERE id=1") or die("database error<br>".mysql_error());

    }
    ?>
    انا قمت بإيقاف التحديث في قاعدة البيانات

    وعند طلب الملف اعطاني

    كود HTML:
    بعد فك تشفير البيانات
    
    Fatal error: Cannot use object of type __PHP_Incomplete_Class as array in C:\AppServ\www\points.php on line 17







  10. #10
    عضو فعال
    تاريخ التسجيل
    Jun 2002
    المشاركات
    1,346


    بسم الله الرحمن الرحيم

    السلام عليكم ورحمة الله وبركاته..

    :con2:
    راجعت الكود..
    ويبدو أن هناك مشكلة في البيانات نفسها.. >> حقل user_info
    فالدالة unserialize لم تستطع فك البيانات بطريقة صحيحة..

    لذا لم يتم إخراج أي شيء..
    والمتغير $current_user فارغ تماماً..
    لذلك عند تعيين قيمة $current_user['points'] إلى صفر..
    تكون هذه أول قيمة تدخل المصفوفة..


    مثل ما ذكر الأخوان..
    يكون أفضل لو تعطينا نظرة أفضل لكيفية إدخال البيانات..
    وبالنسبة لي.. تحديدا في هذا الحقل user_info


    تحياتي






  11. #11
    عضو نشيط جدا
    تاريخ التسجيل
    May 2004
    المشاركات
    556


    طلب البيانات من قواعد البيانات يتم على الشكل التالي :

    من ملف users_get_object.php ومحتوياته بالكامل هي

    كود PHP:
    if ($is_regist) {
        include_once(
    "connect.php");
        
    $m_result mysql_query("select user_info from ".$mysql_table_prefix."users where id=$is_regist") or die("database error: cannot retrieve user info<br>".mysql_error());
        if (
    mysql_num_rows($m_result)) {
            list(
    $current_user_text) = mysql_fetch_array($m_resultMYSQL_NUM);
            
    $current_user unserialize($current_user_text);
            
    #backward compatibility
            
    if ("--".$current_user->user_class == "--admin"$current_user->user_class ADM_BAN;
            
    mysql_free_result($m_result);
        } else {
            
    $error_text str_replace("~","",$w_search_no_found);
            include(
    $file_path."designes/".$design."/error_page.php");
            
    mysql_free_result($m_result);
            exit;
        } 
    لطلب قيمة معينة

    كود PHP:
    $current_user->city 


    وذلك باستخدام الطريقة التالية :

    خانة لوضع البيانات

    --------
    كود HTML:
    <tr><td><?php echo $w_city;?>: </td><td><input type="text" name="city" size="10" value="<?php echo $current_user->city;?>" class="input"></td></tr>
    ---------

    إرسال البيانات لصفحة update_info.php بإستخدام

    -------------------

    set_variable("city");

    $current_user->city = htmlspecialchars($city);

    ------------------


    تحديث البيانات عن طريق :


    عند تحديث البيانات في قواعد البيانات .. يتم استخدام التالي :


    كود:
    mysql_query("update ".$mysql_table_prefix."users set user_info='".addslashes(serialize($current_user))."' where id=$is_regist") or die("database error: cannot update user information<br>".mysql_error());



    الآن اكتشفت ما يدعى ب addslashes !!! في بداية الكود ....


    :shy::shy::shy:


    تحياتي










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض