-
المساهمات
364 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
إجابات الأسئلة
-
إجابة معاذ قره محمد سؤال في كيف اخبر ال PHP في حال زادت الصفوف في قاعدة البيانات افعل الآتي ؟ كانت الإجابة المقبولة
يمكنك حل المشكلة عن طريق الكود التالي، هذا مثال عن إضافة مستخدم ما لقاعدة البيانات:
<?php // ربطنا قاعدة البيانات $link = mysql_connect("localhost", "username", "password"); mysql_select_db("database_name", $link); // قمنا بتحديد البيانات $result = mysql_query("SELECT * FROM TABLE_NAME", $link); // نأتي بعدد الأسطر $num_rows = mysql_num_rows($result); // $_SESSION["lastcount"] نختبر فيما إذا كنا قد عرفنا متحول الجلسة أم لا سنعرفه لاحقاً if(!isset($_SESSION["lastcount"])) { // $check إذا كنا لم نعرفه بعد نضع عدد الأسطر ضمنه وضمن المتحول // لمعرفة إن كان قد زاد عدد الأسطر $num_rows مع عدد الأسطر $check لأننا سنقارن لاحقا بالعدد // يحوي عدد الأسطر القديم $check فيكون المتحول $check = $_SESSION['lastcount'] = $num_rows; } else { // $check إذا كنا قد عرفناه نضع قيمته ضمن ال // هذا الرقم سيكون عدد الأسطر القديم $check = $_SESSION['lastcount']; } echo $num_rows; if($num_rows > $check ) { // إذا زادت الأسطر سيتحقق الشرط وينفذ الكود // الآن سنعيد إسناد قيمة عدد الأسطر الجديدة لكل من المتحولين $check = $_SESSION['lastcount'] = $num_rows; echo "تم زيادة عدد الأسطر وإضافة مستخدم"; } else { echo "لا يوجد زيادة في عدد الأسطر"; } ?>
-
إجابة معاذ قره محمد سؤال في laravel eloquent add where closure in query result condition كانت الإجابة المقبولة
أهلا بك محمد
يمكنك استخدام الquery التالية، سأدمج جدولي الusers وال views وأضع شروط على الحالة في كلا الجدولين كالتالي:
select content_id from users u, views v where (u.status = 1 and v.status = 3) or (u.status = 2 and v.status = 4) الآني سيأتي بمعرف المحتوى content_id (أو بدّل بالأعمدة التي تختارها) فقط إذا كان الحالة في جدول الuser هي 1 وفي جدول ال views هي 3، أو إذا كان في جدول الusers هي 2 وفي جدول المشاهدات 4.
بالتوفيق إن شاء الله
-
إجابة معاذ قره محمد سؤال في كيف يمكنني حذف النصوص المكرره في البايثون؟ كانت الإجابة المقبولة
يمكنك فعل ذلك من خلال التالي:
text = "hello12 hasob academy hello12" result = "" for i in text.split(" "): if (i not in result): result+= i + " " print(result) نتيجة الكود السابق: hello12 hasob academy.
قمنا بتهيئة المتحول result لنخزن فيه النتيجة، ومررنا بحلقة تكرار، الحلقة تمر على كل كلمة في الtext، ثم في الجملة الشرطية نتأكد من أنّ الكلمة غير مخزّنة في الـ result، فقط إذا كانت غير مخزنة نضيفها للـ result، وفي النهاية نطبع الناتج.
-
إجابة معاذ قره محمد سؤال في طلب مساعدة حول عدم مطابقة البيانات عند الإنتقال لصفحة أخرى باستعمال لغة الجافا سكريبت كانت الإجابة المقبولة
السبب في ذلك أنّك تنفّذ كلّ طرق الـ check ضمن الجملة الشرطية، والجملة الشرطية عند أول خطأ تراه تقوم بإرساله والخروج فوراً.
حاول التعديل على الكود ليصبح:
form.addEventListener('submit', function (e) { e.preventDefault() let check1 = checkRequired([username, email, password, confirmPassword]); let check2 = checkLength(username, 4, 15); let check3 = checkLength(password, 6, 20); let check4 = checkEmail(email); if (check1 && check2 && check3 && check4) { localStorage.setItem("register-username", username.value) localStorage.setItem("register-email", email.value) localStorage.setItem("register-password", password.value) setTimeout(() => { window.location = "./login.html" }, 1000) } }) بحيث تقوم بتنفيذ جميع طرق التفحّص وإرسال جميع الأخطاء.
-
إجابة معاذ قره محمد سؤال في تعديل البيانات قبل عرضها في c# datagridview كانت الإجابة المقبولة
يمكنك ذلك من خلال استبدال الأمر المستخدم:
SELECT id as '#ID', name_ar as 'الإسم العربي', name_en as 'الإسم الإنجليزي', status as 'الحالة' FROM levels بالأمر:
SELECT id as '#ID', name_ar as 'الإسم العربي', name_en as 'الإسم الإنجليزي', CASE WHEN status=0 THEN "غير مفعل" ELSE "مفعل" END as 'الحالة' FROM levels حيث بدّلنا العمود status بالجملة الشرطية CASE التي ستقوم بفحص قيمة status إن كانت 0 ستضع غير مفعل، وإن كانت غير ذلك "أي واحد" ستضع مفعّل. أنصحك بقراءة المزيد عن الجملة الشرطية CASE من خلال موسوعة حسوب.
-
إجابة معاذ قره محمد سؤال في فحص البيانات قبل تخزينها في localStorage كانت الإجابة المقبولة
ما فهمته منك أنك تريد أن تخزّن كل البيانات إن كانت مطابقة فقط ولا تخزّن أي شيء إن كان هناك أحد البيانات غير مطابق. لكن أظن الآن أنّك تعني أنه إن لم يكن إلا اسم المستخدم -مثلاً- صحيح تريد أن تخزنه لوحده دون بقية القيم الخاطئة. يمكنك فعل ذلك بنفس الطريقة التي شرحتها، لكن بالتعديل التالي:
form.addEventListener('submit', function(e){ e.preventDefault() if (checkRequired([username]) and and checkLength(username, 4, 15)) { // سيخزن اسم المستخدم إذا حقق الشرطين localStorage.setItem("register-username", username.value) } else { // false هنا اكتب ما تريد فعله في حال أعاد } if (checkRequired([password,confirmPassword]) and checkLength(password, 6, 20) and checkPassword(password, confirmPassword)) { // أضف هنا كلمة السر } else { // ما يجب فعله عندما تكون كلمة السر لا تحقق الشروط } if(checkRequired(email) and checkEmail(email)){ // أضف الإيميل } else{ // ما يجب فعله عندما يكون الإيميل لا يحقق الشروط } }) هكذا ستخزن كل واصفة لوحدها، ويوجد طريقة أخرى مثل:
form.addEventListener('submit', function(e){ e.preventDefault() // سننشئ بداية غرض let data = {}; // سنضيف له الخصائص المطابقة للشروط فقط، ثم نضيفه إلى التخزين if (checkRequired([username]) and and checkLength(username, 4, 15)) { // سيخزن اسم المستخدم إذا حقق الشرطين data.username = username; } else { // false هنا اكتب ما تريد فعله في حال أعاد } if (checkRequired([password,confirmPassword]) and checkLength(password, 6, 20) and checkPassword(password, confirmPassword)) { // أضف هنا كلمة السر data.password = password; } else { // ما يجب فعله عندما تكون كلمة السر لا تحقق الشروط } if(checkRequired(email) and checkEmail(email)){ // أضف الإيميل data.email = email; } else{ // ما يجب فعله عندما يكون الإيميل لا يحقق الشروط } // وأخيراً أضف الغرض إلى التخزين localStorage("usreData", JSON.stringify(data)); }) فائدة الطريقة JSON.stringify أن تحول الغرض إلى string حيث لا يمكننا تخزين الغرض في ال localStorage. وعندما نجلبه سنستخدم الطريقة JSON.parse لتحويل الـstring إلى غرض مرة أخرى.
JSON.parse(localSorage.getItem("userData"))
-
إجابة معاذ قره محمد سؤال في معالجة مشكل حذف عنصر إلا بعد تحديث الصفحة (لغة الجافاسكريبت) كانت الإجابة المقبولة
المشكلة هي أنك في نهاية ال dislike الأول تقوم بإعادة إنشاء عناصر HTML من أجل favoriteItems عن طريق الوظيفة drawFavoriteProducts لكن لا تقوم بإعادة إسناد حدث الـ dislike لتلك العناصر، لحل المشكلة يمكنك التعديل على الكود بالشكل التالي:
favorites.addEventListener('click', ()=>{ // get liked products from localStorage favoriteItems = JSON.parse(localStorage.getItem('favoriteProducts')) if(favoriteItems.length != 0){ // create a popup let overlay = document.createElement("div"); overlay.setAttribute("class", "popup-overlay"); document.body.appendChild(overlay); // styling and draw the popup-overlay let favoriteWrapper = document.createElement("div"); favoriteWrapper.setAttribute("class", "favorite-wrapper"); overlay.appendChild(favoriteWrapper); function drawFavoriteProducts(favorites) { let drawFavoriteProducts = favorites.map((favItem) => { return ` <i class="fa-sharp fa-solid fa-circle-xmark closeBtn"></i> <div class="favorite-card"> <p class="dislike" data-click="${favItem.id}"> Dislike <i class="fa-regular fa-thumbs-down"></i> </p> <img src="${favItem.img_url}.png" alt="" srcset=""> <h2 class="favorite-title">${favItem.title}</h2> </div> `; }); favoriteWrapper.innerHTML = drawFavoriteProducts.join(""); // أسندنا هنا قابلية إزالة الإعجاب إلى العناصر ablityToDislike(); } drawFavoriteProducts(favoriteItems); // remove disliked products //ablityToDislike وضعت هنا وظيفة إسناد الأحداث ضمن طريقة سميتها function ablityToDislike() { let disliked = document.querySelectorAll(".dislike"); disliked.forEach((item) => { let dislikeId = item.getAttribute("data-click"); item.addEventListener("click", () => { favoriteItems = favoriteItems.filter((data) => data.id != dislikeId); localStorage.setItem("favoriteProducts", JSON.stringify(favoriteItems)); drawFavoriteProducts(favoriteItems); }); }); } } }) هذا سيحل المشكلة، بالتوفيق إن شاء الله.
-
إجابة معاذ قره محمد سؤال في [mysql] فحص جميع حقول الجدول ما عدا واحد فقط كانت الإجابة المقبولة
إذا كنت تقصد بالكود التالي:
SELECT * FROM tenders WHERE code = 1810 OR ref = 5555-55555 OR con_number = 50 AND id =! 8 أن تقول إما 1810 = code أو 55555-5555 = ref أو 50 = con_number وفي كل الحالات لا يجب أن يجلب العنصر ذو 8 = id عندها يجب أن تكتب بالشكل:
SELECT * FROM tenders WHERE (code = 1810 OR ref = 5555-55555 OR con_number = 50) AND id =! 8 وذلك لأن البيانات سترى كودك القديم بالشكل (إما ( 1810 = code) أو ( 55555-5555 = ref) أو (50 = con_number و 8 = id)) وهذا مغاير لما تريده أنت.
أما بالنسبة لموضوع التعديل فيمكنك من خلال الأمر select أن تتأكد من وجود أي عنصر يحوي في خصائصه قيم مشابهة للقيم في العنصر المعدل الجديد، في المثال التالي سأتأكد من عدم تكرار الاسم قبل تعديله -كمثال-:
// العبارة القادمة تبحث في كل الجدول إلا العنصر الذي نعدله الآن $q1 = SELECT * FROM table WHERE name = target_name AND NOT id = "id العنصر قيد التعديل"; $result = $conn->query($q1); if(!$result){ // سيدخل إلى هذه الجملة الشرطية في حال الاسم لم يكن مكرر // هنا نضع أمر التعديل }
-
إجابة معاذ قره محمد سؤال في شرح لكيفية استخدام intersection observer كانت الإجابة المقبولة
نمط intersection observer يستخدم لمراقبة عنصر ما فيما إذا دخل شاشة العرض أو غادر منها، دون الحاجة إلى مكتبات خارجية.
سأورد هنا مثالاً عن animation on scroll باستخدام intersection observer.
في البداية ليكن لدينا محتوى ال html التالي:
<div class="container"> <p> Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure, beatae eius iste minima veritatis tempora molestiae harum. Perspiciatis praesentium odit magnam recusandae earum. Similique, magnam ratione. Sint distinctio rerum blanditiis. </p> <img src="https://ljc-dev.github.io/hosted-assets/thumb-a.png" alt="صورة ما"> <p> Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure, beatae eius iste minima veritatis tempora molestiae harum. Perspiciatis praesentium odit magnam recusandae earum. Similique, magnam ratione. Sint distinc tiorerum blanditiis. </p> </div> عبارة عن قسم فيه نصان وصورة. وأنشأت في ملف ال style التنسيق التالي:
* { margin: 0; padding: 0; box-sizing: border-box; } html, body { width: 100%; } .container { display: flex; flex-flow: column; align-items: center; } img { position: relative; width: 300px; height: 300px; margin: 0 auto; opacity: 0; transform: translateY(100px); transition: transform 1s, opacity 1s; } .fadeIn { opacity: 1; transform: translateY(0px); } p { font-size: 2rem; margin: 2rem 0; width: 300px; } أريدك أن تلاحظ أن الصف fadeIn لم يتم استخدامه إلى الآن على أيّة عنصر، وهو الصف الذي سنستخدمه ليقوم ب animation معين عند النزول بشاشة العرض إلى مكان العنصر.
الآن نأتي لنشرح كيف سنستخدم intersection observer على مثالنا السابق:
أول ما يجب فعله هو أن نقوم بجلب العناصر من ملف الhtml التي نريدها أن تخضع لل animation
ثم سنقوم بإنشاء غرض من الصنف IntersectionObserver والذي يأخذ كمعامل أول له وظيفة callback، وهذه الوظيفة تأخذ كمعامل أول لها مصفوفة من المدخلات entries والتي سنستخدمها لنقوم بإنشاء الanimation الخاص بنا. وبالعودة إلى IntersectionObserver فإنه يأخذ كمعامل ثان له خيارات أخرى يمكنك الاطلاع عليها ببحث بسيط على الانترنت.
وفي النهاية سنضع المراقب الخاص بنا على العنصر الذي نريده أن يتفاعل. لننطلق إلى الكود إذاً
const img = document.querySelector("img") // جلبنا الصورة // أنشأنا طريقة لنضعها كمعامل أول للمراقب الخاص بنا // هي مصفوفة من المدخلات الخاصة بالعنصر entriesحيث أنّ ال // أي تم تقاطع العنصر المراقب مع شاشة العرض entry.isIntersecting ثم قمنا بالمرور عليها بحلقة وفحص فيما إذا كانت // إلى العنصر المطلوب fadeIn في حال تحقق الشرط سنضيف التنسيق const callback = (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.classList.add("fadeIn") } }) } // سندع الخيارات (المعامل الثاني) فارغاً في مثالنا const options = {} // وهنا نقوم بإنشاء مراقبنا الخاص const myObserver = new IntersectionObserver(callback, options) // img في النهاية نضيف هذا المراقب للعنصر myObserver.observe(img) أتمنى أن تكون قد فهمت كيف يمكننا استخدام intersection observer في مشاريعك القادمة. يمكنك الضغط هنا إذا أردت الحصول على المزيد من المعلومات حول هذا الموضوع.
-
إجابة معاذ قره محمد سؤال في اريد معرفة بعض الاستعلامات في php mysql كانت الإجابة المقبولة
يمكنك لمعرفة حجم قاعدة البيانات بالكيلو بايت أن تكتب الكود التالي:
SELECT table_schema "DB اسم ال", ROUND(SUM(data_length + index_length) / 1024, 1) "KB حجم قاعدة البيانات بال" FROM information_schema.tables ; ولكي تأتي بأسماء الجداول من قاعدة بيانات معينة يمكنك كتابة الاستعلام التالي:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'اسم قاعدة البيانات الخاص بك'; ولإعادة عدد الجداول يمكنك استعمال الاستعلام:
SELECT count(table_name) FROM information_schema.tables WHERE table_schema = "company";
-
إجابة معاذ قره محمد سؤال في كيفية تشغيل كود قبل إزالة unmount عنصر من الصفحة في React.js؟ كانت الإجابة المقبولة
لحل هذه المشكلة يمكنك فعل الآتي:
- بداية قم بنقل boxRef إلى الApp
function App() { const [active, setActive] = useState(true); const boxRef = useRef(null); ... ... } ومرّره إلى ال Box ك props:
function App() { ... ... return ( <> <button onClick={handleToggle}> Toggle </button>{" "} <Box boxRef={boxRef} />{" "} </> ); } وعدّل على Box واجعله كالآتي:
function Box({ boxRef }) { return ( <div className="box" ref={boxRef}> red box </div> ); } هكذا نكون قد حافظنا على مرجع العنصر box ضمن المكون App فيمكننا استخدامه قبل أن نقوم بتغيير قيمة الactive. كل ما عليك الآن إنشاء الطريقة handleToggle:
const handleToggle = () => { // use boxRef to do something console.log(boxRef.current); setActive(!active); }; واستخدامها في الbutton :
<button onClick={handleToggle}> Toggle </button>
لاحظت أنك تحذف الbutton مع الbox عند الضغط على toggle للمرة الثانية، إذا كنت تريد الحفاظ على الbutton وحذف الbox فقط يجب عليك عوضا عن إرجاع الnull في حال الactive قيمته false أرجع الbutton:
if (!active) return <button onClick={handleToggle}> Toggle </button>;
-
إجابة معاذ قره محمد سؤال في كيف أحترف حلقات التكرار في البرمجة؟ كانت الإجابة المقبولة
عليك بكثرة التمرين على الحلقات التكرارية وفهم طريقة عملها.
فمثلا الحلقة التكرارية for تأخذ ثلاث عبارات: أولها index رقم تعرفه لتبدأ حلقة الfor من عنده، ولا يشترط أن يكون 1 أو 0، فحسب المشكلة التي ستحلها بحلقة الfor ستبدأ العداد. وثاني عبارة هي شرط الإيقاف، أي شرط تضعه أنت بحيث توقف حلقة الfor إذا تحقق. وآخر عبارة هي الخطوة؛ أي مقدار الزيادة أو النقصان على العداد index الذي عرّفته.
//for (الخطوة, شرط التوقف,العداد معرف بقيمة ابتدائية){ // وهنا أكواد لحل مشكلة ما //} مثال هذه حلقة لجمع الأعداد الزوجية من 0 إلى 10 sum = 0 for (i=0, i<10, i = i+2){ sum+=i } أما من أجل تعقّب عملية الfor فأنصحك بما يسمى أدوات التصور أو مراقبة المسار (track and Visualize) حيث هناك أدوات تنفذ لك الكود سطراً سطراً هذا سيفيدك في البداية لمعرفة عمل الحلقات.
-
إجابة معاذ قره محمد سؤال في الاستعلامات MySQL with php مع شرط ديناميكي ( جزء إجباري و جزء اختياري) كانت الإجابة المقبولة
يمكنك باستخدام الأمر
$isTouch = isset($Uid); أن تتأكد إذا كان المتحول Uid معرفاً أم لا.
ثم أضف if شرطية في حال كان معرفاً نفذ أمر جلب البيانات معه، وإذا كان غير معرفاً من دونه، أي عوضا عن الكود :
$sql="SELECT * FROM books where id = ? AND Uid=? " ; اكتب الكود:
if (isset($variable)) { $sql="SELECT * FROM books where id = ? AND Uid=? " ; }else { $sql="SELECT * FROM books where id = ?" ; }
-
إجابة معاذ قره محمد سؤال في كيفية إستبدال كل الأصفار في مصفوفة عبر NumPy في بايثون Python؟ كانت الإجابة المقبولة
باستخدام numpy يمكنك فعل ذلك عبر ()np.where :
first_col = np.where(first_col < 1, m, first_col) في هذه الmethod سيقوم بأخذ شرط كأول parameter. إذا تحقق الشرط عند عنصر سيتم استبدال قيمته بقيمة ثاني parameter والذي هو m في حالتنا.
-
إجابة معاذ قره محمد سؤال في ما الفرق بين json.dumps و flask.jsonify في Flask؟ كانت الإجابة المقبولة
دالة flask.jsonify تقوم بتحويل الكائن إلى Object مع نمط التمثيل application/json أي هذه الدالة تقوم بإرجاع Object من النمط ()flask.Response، وتستعملها عند إرسال الResponse من الflask.
بينما الدالة flask.dumps تقوم بتحويل الكائن إلى String يحوي ملف الJSON وهذا قد يؤدي إلى نتائج غير مقصودة أثناء التنفيذ، وفي هذه الحالة يجب أن تضيف أنت نمط التمثيل (mimetype) إلى الheader، تستعمل هذه الدالة عندما تحتاج طباعة الObject كـ String.