اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم 

وضعت كود البحث في الصفحة الرئيسية للموقع ليبحث في قاعدة البيانات ،يعمل بشكل ممتاز.

اريد عند البحث عن كلمة غير موجودة في القاعدة يعطي خطا ( الكلمة غير موجودة في القاعدة ) او يرجعة  للصفحة الرئيسية !

 

<form action="test.php" >
<div class="container">
    <div class="row height d-flex justify-content-center align-items-center">
        <div class="col-md-8"> 
            <div class="search">  <input  type="text" name="search" class="form-control" placeholder=" كلمة البحث" > <button class="btn btn-primary">بحث  </button> </div>
        </div>
    </div>
</div>

</form>
<?php
	$host = "localhost"; 	
	$name = "#####";  
	$pass = "####";  
	$dbname = "###";
	$connection = mysqli_connect($host,$name,$pass,$dbname);
	mysqli_query($connection,"set character_set_server='utf8mb4_general_ci'");
	mysqli_query($connection,"set names 'utf8mb4_general_ci'");
	if (!$connection) {
	die();
}
	
            $get_news_sql = "SELECT * FROM info WHERE Country like '". $_GET['search']."'" ; 
            $get_news_sql = mysqli_query($connection, $get_news_sql);
            while ($row = mysqli_fetch_array($get_news_sql)) {
		
$Country =$row['Country'];
$Flag= $row['Flag']; 
$Capital= $row['Capital'];
       }
			
          ?>

 

يستطيع المستخدم عند البحث باسم الدولة ايجاد المطلوب ، هل استطيع عند البحث باسم الدولة او العاصمة ايجاد المطوب وشكراً

تم التعديل في بواسطة شرف الدين2
توضيح العنوان

Recommended Posts

  • 3
نشر

لاحظ أن لديك بعض الأخطاء البسيطة في الملف tourist.php مثل أن إغلاق حلقة while يجب أن يكون قبل العنصر footer مباشرة، وذلك لأنك تستعمل بعض المتغيرات الخاصة بالبيانات التي يتم إحضارها من قاعدة البيانات، وذلك سيؤدي إلى ظهور العديد من الأخطاء في حالة لم يتم إيجاد أي نتيجة في قاعدة البيانات، كما في الصورة التالية:

6189676683329_Screenshot(423).thumb.png.70eb61114b90b815c245da2e8b480688.png

الأمر الآخر هو أن لديك خطأ في جملة SQL حيث يجب أن تكون بالشكل التالي:

$get_news_sql = "SELECT * FROM information WHERE Country LIKE '%{$_GET['search']}%' OR Capital LIKE '%{$_GET['search']}%' ";

لاحظ كيف تم إستخدام قيمة المعامل search مباشرة في جملة SQL، ووجود علامة % قبل وبعد المعامل في تعيمتي LIKE. بهذا الشكل سوف يتم البحث عن أي مدينة أو دولة مشابهة للاسم الذي تم البحث عنه.

أيضًا قد تجد أن النتيجة عبارة عن علامات إستفهام كما في الصورة التالية:

imageproxy.php?img=&key=e4ac65570db3469d618968e24bd48_Screenshot(424).thumb.png.ecd3d96c22df89b5979d8f5c5cd25f4a.png

ولحل المشكلة السابقة يجب أن تقوم بإستخدام الدالة mysqli_set_charset بدلًا من الدالة mysqli_query كالتالي:

mysqli_set_charset($connection, 'utf8');

// بدلُا من الكود التالي
// mysqli_query($connection, "set character_set_server='utf8mb4_general_ci'");
// mysqli_query($connection, "set names 'utf8mb4_general_ci'");

أيضًا يجب التحقق من وجود المعامل search من البداية من خلال الكود التالي:

if (!isset($_GET['search'])) {
  header('Location: index.php'); // العودة إلى صفحة index
}

يمكنك أن تضع الكود السابق في بداية الملف tourist.php

الأمر الأخير هو أنه في حالة وجود أكثر من نتيجة في قاعدة البيانات مسابهة لكلمة البحث فسوف يكون لديك أكثر من صفحة في الكود كما في الصورة التالية:
618969aa3af74_Screenshot(425).thumb.png.3b116050379c021f7aa281dcc9020af2.png

ولحل المشكلة يجب أن تقوم بإضافة LIMIT 1 إلى جملة SQL لتكون بالشكل التالي:

$get_news_sql = "SELECT * FROM information WHERE Country LIKE '%{$_GET['search']}%' OR Capital LIKE '%{$_GET['search']}%' LIMIT 1";

هنا ملفات المشروع بعد التعديل:

320.zip

  • 0
نشر

بالنسبة للشق الأول من السؤال يمكنك وضع شرط إن كانت البيانات القادمة من قاعدة البيانات فارغة فلتقم بإعادة المستخدم إلى الصفحة الرئيسية 

if(empty($row))
	header("Location:\\أكتب هنا مسار صفحتك الرئيسية ")

بالنسبة للشق الثاني من السؤال فيمكنك تنفيذ المطلوب عبر وضع حقل إضافي في قاعدة البيانات يتم فيه تخزين العواصم 

وتغيير الجملة الإستعﻻمية الخاصة بقاعدة البيانات لتشمل البحث عن كلاً من الدولة والعاصمة مثلاً

SELECT * FROM info WHERE Country like '". $_GET['search']." ' OR  Capital like '". $_GET['search']"'

 

  • 0
نشر (معدل)

اين اضع  

if(empty($row))

 

الشق الثاني وضعته بهذا الشكل ولم يعمل اتوقع المشكلة في علامات التنصيص على ما اضن 

            $get_news_sql = "SELECT * FROM information WHERE Country like '". $_GET['search']."'" ' OR  Capital like '". $_GET['search']" ; 	

 

 

تم التعديل في بواسطة ABDULLAH
خطا
  • 0
نشر
بتاريخ 14 دقائق مضت قال ABDULLAH:

اين اضع  


if(empty($row))

 

الشق الثاني وضعته بهذا الشكل ولم يعمل اتوقع المشكلة في علامات التنصيص على ما اضن 


            $get_news_sql = "SELECT * FROM information WHERE Country like '". $_GET['search']."'" ' OR  Capital like '". $_GET['search']" ; 	

 

 

<?php
	$host = "localhost"; 	
	$name = "#####";  
	$pass = "####";  
	$dbname = "###";
	$connection = mysqli_connect($host,$name,$pass,$dbname);
	mysqli_query($connection,"set character_set_server='utf8mb4_general_ci'");
	mysqli_query($connection,"set names 'utf8mb4_general_ci'");
	if (!$connection) {
	die();
}
	
            $get_news_sql = "SELECT * FROM info WHERE Country like '". $_GET['search']."'" ; 
            $get_news_sql = mysqli_query($connection, $get_news_sql);
            while ($row = mysqli_fetch_array($get_news_sql)) {
		if(empty($row))
	header("Location:\\أكتب هنا مسار صفحتك الرئيسية ")

$Country =$row['Country'];
$Flag= $row['Flag']; 
$Capital= $row['Capital'];
       }
			
          ?>

نضعها بهذا الشكل 

وبالنسبة للشق الثاني بالفعل فيه خطأ , ضعه بهذا النحو

  $get_news_sql = "SELECT * FROM information WHERE Country like '". $_GET['search']."'"."' OR  Capital like '". $_GET['search'] ; 	

 

  • 0
نشر

الشق الأول لم يعمل ووضعته قبل ?> وصار يشتغل بس حتى لو ابحث عن دولة موجودة يرجعني للصفحة التي وضعت !! 

$Country =$row['Country'];
$Flag= $row['Flag']; 
$Capital= $row['Capital'];
       	
			} 
					if(empty($row))
	header("Location:\\index.php ");
			
          ?>

 

الثاني وضعت نفس المكتوب لكن لم يعد يبحث عن اي دولة ولاعاصمة  ؟ وبعد ما ارجع الكود القديم يعمل على الدولة فقط .

  • 0
نشر
بتاريخ 1 دقيقة مضت قال ABDULLAH:

الشق الأول لم يعمل ووضعته قبل ?> وصار يشتغل بس حتى لو ابحث عن دولة موجودة يرجعني للصفحة التي وضعت !! 


$Country =$row['Country'];
$Flag= $row['Flag']; 
$Capital= $row['Capital'];
       	
			} 
					if(empty($row))
	header("Location:\\index.php ");
			
          ?>

 

الثاني وضعت نفس المكتوب لكن لم يعد يبحث عن اي دولة ولاعاصمة  ؟ وبعد ما ارجع الكود القديم يعمل على الدولة فقط .

يجب إضافة حقل العاصمة أولاً قبل تشغيل الكود

  • 0
نشر (معدل)
بتاريخ On 8‏/11‏/2021 at 21:20 قال سامح أشرف:

لاحظ أن لديك بعض الأخطاء البسيطة في الملف tourist.php مثل أن إغلاق حلقة while يجب أن يكون قبل العنصر footer مباشرة، وذلك لأنك تستعمل بعض المتغيرات الخاصة بالبيانات التي يتم إحضارها من قاعدة البيانات، وذلك سيؤدي إلى ظهور العديد من الأخطاء في حالة لم يتم إيجاد أي نتيجة في قاعدة البيانات، كما في الصورة التالية:

 

ممتاز لكن عند البحث باسم دولة غير موجودة يرجعني للفوتر !

10.png

تم التعديل في بواسطة ABDULLAH

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...