porównywanie wartości z bazy

0

Witam,
Mam następujący problem. Pewnym programem czytam plik i zapisuje dane do bazy. Aby pozbyć się
zbędnych spacji używam funkcji trim(). Następnie porównuje wczytane do bazy wartości [ programem który zamiściłem poniżej] i okazuje się, że varchar-y, które na pierwszy rzut oka wyglądają identycznie przez program uznawane są za różne.Niektóre interpretowane są za identyczne. Czy problem ten jest wynikiem złego działania funkcji trim()? tzn. nie zawsze wycina ona wszystkie zbędne spacje i varchar-y uznawane są za różne pomimo, że są "identyczne ". I jak rozwiązać ten problem?

?>

<html>
<head>
  
  <title> rezultat wyszukiwania </title>
</head>
<body>
	<h1>Rezultat wyszukiwania</h1>
<?php	

//------parametry przekazywane z formularza z programu [5]--------
$metoda_szukania=$_POST['metoda_szukania'];
$wyrazenie=$_POST['wyrazenie'];

if(!$metoda_szukania || !$wyrazenie)
{
 echo 'Brak parametrów wyszukiwania. Wróć do poprzedniej strony ispróbuj ponownie';
 exit;
}
//-----------konwersja parametrów z formularza-----------------------------
if(!get_magic_quotes_gpc())
{
 $metoda_szukania = addslashes($metoda_szukania);
 $wyrazenie = addslashes($wyrazenie);
}

//------otwarcie bazy i poszukieanie wartości z formularza-----------

@ $db = new mysqli('localhost', 'damian', 'haslo', 'ligandsbase'); //tu może być źle

if(mysqli_connect_errno())
{
  echo 'Błąd: Połączenie z bazą danych nie powiodło się.';
  exit;
}

$zapytanie = "select * from peptyds3 where ".$metoda_szukania." like '%".$wyrazenie."%'";//pozwala wyszukiwać wyrazy podobne (może być jeszcze coś z przodu lub z tyłu wyrazu)a nie tylko identyczne
$wynik = $db->query($zapytanie);
$ile_znalezionych = $wynik->num_rows;//zwraca wartość znalezionych wyników
//-------------------------------WYŚWIETLANIE INFORMACJI W ODPOWIEDNI SPOSÓB--------------------------
$b=0;
$l=0;
$t=0;
for ($i=0; $i<$ile_znalezionych;$i++)
{
	$wiersz = $wynik->fetch_assoc();
	if($metoda_szukania=="p_name")
	{
	 
		$bialko=trim($wiersz['p_name']);  //<<----------------podejżewam że tutaj tkwi problem
		if($first_bialko!=$bialko)              //             używam na wszelki wypadek funkcji trim() przy    
                                                                 //             wstawianiu do bazy i przy wybieraniu z bazy
		{ 
                      //coś tam robi

                 }

$wynik->free();
$db->close();

?>
	
</body>
</html>
          
0

wyświetl (i wklej tu) sobie dwa ciągi, które nie powinny być różne a są oraz dwa, które powinny być rózne a nie są to się zobaczy co jest

0

A, więc tak to wygląda:

  1. Białko: AZURIN
    Pełniona funkcja: ELECTRON TRANSPORT

Ligand: COPPER (II) ION

  1. Białko: AZURIN
    Pełniona funkcja: ELECTRON TRANSPORT

Ligand: SULFATE ION

  1. Białko: AZURIN
    Pełniona funkcja: ELECTRON TRANSPORT

Ligand: NITRATE ION

a powinno tak:

  1. Białko: AZURIN
    Pełniona funkcja: ELECTRON TRANSPORT

Ligand: COPPER (II) ION

Ligand: SULFATE ION

Ligand: NITRATE ION

AZURIN jest to wartość podawana w formularzu, tego szukam w bazie.
rekordy w bazie wyglądają mniejwiecej tak:
AZURIN | ELECTRON TRANSPORT | COPPER (II) ION
AZURIN | ELECTRON TRANSPORT | SULFATE ION
AZURIN | ELECTRON TRANSPORT | NITRATE ION

wyświetlam to stosując takie coś:

         //to jest w pętli for
		$bialko=trim($wiersz['p_name']);
		if($first_bialko!=$bialko)
		{ 
		        $b=$b+1;
			echo '<p><br><br><strong>'.($b).'. Białko: ';
		        echo $bialko;
			echo '</strong><br />Pełniona funkcja: ';
	                echo stripslashes($wiersz['p_function']);
			echo '</strong><br />------------------------';
		}
		$first_bialko=$bialko; // dzięki temu jeżeli kolejna nazwa białka bedzie identyczna z 
                                                //    poprzednią to nie będzie wyświetlana wyświetlony zostanie tylko 
                                                //      ligand
	        echo '</strong><br />Ligand: ';
	        echo stripslashes($wiersz['l_name']);
	        echo '</strong><br />------------------------';
	  
	 	
	

Ten algorytm raczej nie ma błędów bo na niektórych wpisach dobrze działa. Wyświetla tak jak powinno.
Problem chyba tkwi w tym, że trim() nie zawsze obcina wszystkie spacje. Jeżeli to w ogóle jest możliwe.

0

wstaw przed
if($first_bialko!=$bialko)
coś takiego

echo '#'.($first_bialko).'# #'.($bialko).'#';

czy jakoś tak - chodzi, żeby wyświetlić zawartość obu zmiennych + ograniczniki i porównasz organoleptycznie :)

a jak już nijak tego nie przetrawisz to zrób dwa zapytania - jedno listę wszystkich białek i drugie listę ligand (czy co to jest) do każdego białka z osobna

0

A nie lepiej zrobic osobna tabele z ligandami, zrobic joina i porownywac id bialek?

0

Dzięki za pomoc. Z kodem było jednak wszystko ok. Przeoczyłem pewien drobiazg i dlatego nie działało tak jak powinno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1