انجمن سون هاست

نخواندن فیلدها به تنهایی

سلام. من یه کد خودم تولید کردم :slight_smile:
کاربر میتونه روی چک‌باکس‌ها کلیک کنه تا یه لینکی ساخته بشه براش. همچنین میتونه توی یه سری فیلد هم کلمات اضافه رو تایپ کنه. یه جور موتور جستجو ساختم.
منتها الان یه جوری شده که کاربر “فقط” اگه یه تیک رو بزنه، میتونه توی فیلدها هم بنویسه. اگه هیچ تیکی رو نزنه و فقط در فیلد بنویسه، لینک تولید نمیشه. و با کلیک کردن فقط صفحه رفرش میشه. درحالی که من نمیخوام این‌جوری باشه.
کسی میتونه بگه اشتباه من کجاست؟

لینک html

<form method="post"><?php mysearch(); ?>
<div class="hidden"><input type="checkbox" name="link[]" value="art" checked="checked"></div>
<input type="checkbox" name="link[]" value="mix">Mix
<input type="checkbox" name="link[]" value="bro">Bro
<input type="checkbox" name="link[]" value="wood">Wood
<input name="word" placeholder="Word Search..." value="">
<input name="year" placeholder="Year" value="">
<input name="month" placeholder="Month" value="">
<input name="day" placeholder="Day" value="">
<div class="hidden"><input id="mymenu" name="mytag" value="<?php $post_tags = get_the_tags(); if ( $post_tags ) { echo $post_tags[0]->name; } ?>"></div>
<button type="submit" class="Sbutton">search it</button></form>

کد php

<?php
function mysearch() {
    if(isset($_POST['link'])) {
   $name = $_POST['link'];  
  foreach ($name as $link){
     $mycat .= $link. "+";  
$mycat2 =  $mycat;
 if ($mycat2 == 'art+') { $mycat2 = "/?tag="; }	
 else { $mycat2 = "/category/" . substr($mycat2, 4, -1) . "/?tag="; }
}
$mytag =  $_POST['mytag'];
$word =  $_POST['word'];
$year =  $_POST['year'];
if(isset($year) && !empty($year)) { $year2 = "&year=" . $year; }
$month =  $_POST['month'];
if(isset($month) && !empty($month)) { $month2 = "&month=" . $month; }
$day =  $_POST['day'];
if(isset($day) && !empty($day)) { $day2 = "&day=" . $day; }
 $mylink = "http://test.com" . $mycat2 . $mytag . $year2 . $month2 . $day2 . "&s=" . $word;
header("Location: {$mylink}");
} 
}
?>

من با خودم فکر کردم شاید چون تولید لینک داخل اون حلقه هست این‌جوریه؛ لینک رو به یه کلوشه پایینی هم انتقال دادم اما باعث شد صفحه رفرشِ غیرمرتبط بشه.

1 Likes

سلام خدمت شما
شرط اول از تابعی که قرار دادید بررسی میکنه که آیا چیزی برای این متغیر ست شده ( شرط اول همان چک باکس هایی است که قرار داید )
اگر ست شده ادامه تابع اجرا شود و اگر ست نشده دستورات اجرا نمیشود و تابع در نهایت بسته میشود و صفحه مجدد ریفرش میشه و لینکی ساخته نمیشود و ریدایرکتی نیز صورت نمیگیرد

1 Likes

بله. من سعی کردم یه شرط دیگه بسازم که اگه چک‌باکس صفر بود یه لینک دیگه رو اجرا کنه (لینکی که بتونه همچنان فیلدهای دیگه رو بخونه)، اما موقع اجرا، چون چک‌باکس صفره بدون اینکه مهلت بده کاربر توی اینپوت‌ها چیزی وارد بکنه یا چیزی وارد نکنه خود‌به‌خود لینک منتقل میشه.
نمی‌دونم چی کار بکنیم…

1 Likes

شما میتونید به سایر فیلد های ورودی name بصورت آرایه بدید مشابه همون چک باکس هایی که قرار دادید
مثال :

<input name="array[word]" placeholder="Word Search..." value="">
<input name="array[year]" placeholder="Year" value="">
<input name="array[month]" placeholder="Month" value="">

برای سایر فیلد ها هم میتونید همین کار را کنید
در قسمت بک اند میتونید شرط را به اینصورت فراخوانی کنید

$array = $_POST['array'];     
if ( isset($array) && !empty($array) )
    {

    }

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

$year = $array['year'];

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

2 Likes

راستیتش راه‌حل شما رو نتونستم پیاده کنم (چون واقعاً حرفه‌ای نیستم)؛ اما یه کار بامزه‌تر پیاده کردم :slight_smile:
یه چک‌باکسِ همیشه فعال توی html به وجود آوردم و با css پنهانش کردم؛ این‌جوری همیشه حداقل یه چک‌باکس فعال وجود داره. به همین راحتی!

اما یه مشکلی دارم؛ گاهی وقتی چندتا پشت سر هم سرچ می‌کنم، از یه جایی به بعد خودبه‌خود کد تولید نمیشه و وقتی کلیک میکنی بدون اینکه لینک تغییر کنه (چون در هر صورت لینک آخه باید تغییر کنه دیگه! کاربر خودش داره کلمات رو انتخاب میکنه!) صفحه‌ای ظاهر میشه که توش نوشته “یک ناهمسانی متغیر شناسایی شد.”

من دیباگ رو فعال کردم و این رو نوشته:

این خطوط رو ببینید:


نمی‌دونم چی رو بد تعریف کردم. و نکته اینکه، حالا من این رو هم بد تعریف کرده باشم، آخه چه ربطی داره به اینکه بعد از چند سرچِ پیاپی لینک تولید نشه؟ چون منطقاً لینک باید همیشه تولید بشه. توی صفحه وجود داره و تو داری روی چک‌باکس‌ها کلیک میکنی تا کلمه‌ای رو بسازه.

1 Likes

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

2 Likes

متاسفانه اگه شرط اول رو پاک کنم، کد خوبه‌خود شروع می‌کنه به کار کردن اصلاً منتظر لود شدن صفحه نمیشه. یعنی همون لحظه که سایت لود میشه با خودش میگه خب توی این صفحه هیچی mycat موجود نیست و ادامه‌ی لینک رو خودش میسازه و یه صفحه که ترکیب شده از لینکی نصفه هستش رو بارگزاری میکنه.

پ.ن: من دارم برای وردپرس یه کد می‌نویسم، یه جور موتورجستجو. بر این مبنا که وردپرس میتونه چنین لینکی رو داشته باشه:

http://test.com/category/bb+coll+jjt/?tag=paint&year=2020&month=8&day=2&s=he

کاربر رو به سمت نتایج دقیق‌تر می‌برم. خودش تیک بزنه که چی میخواد؛ تا لینکِ جستجو ساخته بشه. (کل کد رو هم توی همون پست اول گذاشتم دیگه)

پ.ن ِ دوم: من به راحتی همین کد رو با جاوا هم می‌نویسم و کار میکنه. اما از اونجا که کلاً اسکریپت در html ممکنه که سایت رو کندتر کنه، فکر کردم که سعی کنم با php بنویسمش (با اینکه تا حالا توی عمرم php ننوشته بودم)

1 Likes

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

1 Likes