[RISOLTO]Motore di ricerca

  • Creatore Discussione Creatore Discussione Altutto
  • Data di inizio Data di inizio

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
PHP:
<head>

<title>Il tuo spazio!</title>

<style>

body{font-family:Arial,Verdana,Geneva;

color:black;}

a:link{text-decoration:none; color:red;}

a:visited{text-decoration:none; color:red;}

#sfondo{background-image: url(http://2.bp.blogspot.com/-2DSkTCG3NlA/UCk_ZXCcCII/AAAAAAAAAJs/v4dZbI9yU6I/s1600/stella-cadente1.jpg);

	position:absolute;

	height:100%;

	width: 100%;

	margin: 0;

	padding: 0;

}

.rotondo{background: #f7f7f7; padding: 10px; border: 2px solid #ededed; border-radius: 10px; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .4), 0 0 0 1px rgba(255, 255, 255, .9), 0 0 10px 0px rgba(0, 0, 0, .1);

         opacity:0.95;}

</style>

</head>

<body id="sfondo">

<div class="rotondo">

<?php

if($_GET['ricerca']=="" or $_GET['materia']=="" or $_GET['tipo']==""){echo 'Non hai specificato uno o più parametri di ricerca. Devi specificare tutti i campi.';}

else{if($_GET['tipo']=="c"){

$ricerca = $_GET['ricerca'];  

$server_address = 'localhost';  

$DB_name = 'my_angeange';  

$user_DB = 'angeange';  

$pass_DB = 'pw';     

$con2 = mysqli_connect($server_address, $user_DB, $pass_DB,$DB_name);  

$ress = mysqli_query("show tables", $con2) or die("Errore nella raccolta dei dati -> database1");  

   

while ($row = mysqli_fetch_assoc($ress))   

{  

  $table = "";

  $table = implode(",", $row); // <- contiene il nome tabella corrente  

  $ress2 = mysqli_query("SHOW COLUMNS FROM ".$table."", $con2) or die("Errore database2");  

  while ($row2 = mysqli_fetch_assoc($ress2))  

  {  

     $columns= implode(",", $row2);  

     $current_col=""; // <- contiene il nome colonna corrente  

     for($i=0; $i<strlen($columns); $i++)  

     {  

        if($columns[$i] != ',')  

           $current_col .= $columns[$i];  

        else

           break;  

     }  

     //Search into ->  

     $sql = "SELECT * FROM ".$_GET['materia']." WHERE ".$current_col." LIKE '%".$ricerca."%'";  

     try 

     {  

         $ress3 = mysqli_query($sql, $con2);  

         while ($row3 = mysqli_fetch_assoc($ress3))  

         {  

             $risultato = $row3[$current_col];  

             if(strlen($risultato) >= 1)  

             {  

                 echo "Ho trovato (in <b>".$current_col."</b>)
";  

                 echo $risultato."
";  

             }  

          }  

      }  

     catch(Exception $e){}  

   }  

} 

}

else{echo 'Selezionata interrogazione. Questa funzione non è ancora disponibile.';

}

}

?>
Devo modificare questo codice in modo che estragga anche i dati delle altre colonne.
Non so se sono stato chiaro... Se, ad esempio, in una tabella ci sono due colonne, prima e seconda e una riga contiene nella prima colonna il valore "ciao" e nella seconda il valore "casa", ed io cerco "ciao", dovrei ottenere come risultato sia "ciao" che "casa".
Invece, il codice che ho postato prima, estrarrebbe solo "ciao".
Come posso fare?
 
Intanto: Sei sicuro che questa riga è quella che vorresti?
PHP:
     $sql = "SELECT * FROM ".$_GET['materia']." WHERE ".$current_col." LIKE '%".$ricerca."%'";
Oppure volevi scrivere questo?
PHP:
     $sql = "SELECT * FROM ".$table." WHERE ".$current_col." LIKE '%".$ricerca."%'";

Poi per quello che vuoi vedere prova a sostituire questo:
PHP:
while ($row3 = mysqli_fetch_assoc($ress3))  
{  
  $risultato = $row3[$current_col];  
  if(strlen($risultato) >= 1)  
  {  
     echo "Ho trovato (in <b>".$current_col."</b>)";  
     echo $risultato;  
  }  
}
Con questo:
PHP:
while ($row3 = $ress3->fetch_assoc())  
{
  echo "Ho trovato (nella tabella <b>".$table."</b>)";
  foreach($row3 as $riga)
    echo $riga;
}
Non è la stessa cosa perchè non sai il campo..per saperlo la cosa si complica un po'.
 
Sì, è vero, hai ragione :D

Posso sopravvivere anche senza sapere il campo XD

Ho inserito il codice e mi dice Fatal error: Call to a member function fetch_assoc() on a non-object on line 63.
Riga 63:
PHP:
while ($row3 = $ress3->fetch_assoc())
 
Si avevo modificato un po' il codice quando l'ho provato perchè non mi piaceva come era scritto :)
Puoi usare questo codice:
PHP:
while ($row3 = mysqli_fetch_assoc($ress3))  
{  
  echo "Ho trovato (nella tabella <b>".$table."</b>)";
  foreach($row3 as $riga)
  echo $riga; 
}
 
Ti incollo il codice della mia prova funzionante.
PHP:
//...dati
$con2 = mysqli_connect("localhost", "root", "", "prova"); 
$ress = $con2->query("show tables") or die (Errore database""); 

while ($row = mysqli_fetch_assoc($ress))   
{
  print_r($row);  
  $table = "";
  $table = implode(",", $row); // <- contiene il nome tabella corrente  
  $ress2 = $con2->query("SHOW COLUMNS FROM ".$table."") or die("Errore database2");  
  while ($row2 = mysqli_fetch_assoc($ress2))  
  {  
     $columns= implode(",", $row2);  
     $current_col=""; // <- contiene il nome colonna corrente  
     for($i=0; $i<strlen($columns); $i++)  
     {  
        if($columns[$i] != ',')  
           $current_col .= $columns[$i];  
        else
           break;  
     }  
     //Search into ->  
     echo "<br>".$current_col;
     $sql = "SELECT * FROM ".$table." WHERE ".$current_col." LIKE '%".$ricerca."%'";  //ERRORE, C'ERA $RICERCA AL POSTO DI $TABLE
	 echo "<br>".$sql."<br>"; 
     if($ress3 = $con2->query($sql)) { 
         while ($row3 = $ress3->fetch_assoc())  
         {
            echo "Ho trovato (nella tabella <b>".$table."</b>)";
         	foreach($row3 as $riga)
                 echo $riga;
          }
	 }
   }  
}
 
Ho usato il tuo codice (modificando i dati di accesso al database), eppure mi dà errore :(


Parse error: syntax error, unexpected T_STRING on line 24

Riga 24:
PHP:
$ress = $con2->query("show tables") or die (Errore database"");

Riposto il codice completo
PHP:
<?php
if($_GET['ricerca']=="" or $_GET['materia']=="" or $_GET['tipo']==""){echo 'Non hai specificato uno o più parametri di ricerca. Devi specificare tutti i campi.';}
else{if($_GET['tipo']=="c"){$con2 = mysqli_connect("localhost", "angeange", "pw", "my_angeange");  
$ress = $con2->query("show tables") or die (Errore database"");  

while ($row = mysqli_fetch_assoc($ress))    
{ 
  print_r($row);   
  $table = ""; 
  $table = implode(",", $row); // <- contiene il nome tabella corrente   
  $ress2 = $con2->query("SHOW COLUMNS FROM ".$table."") or die("Errore database2");   
  while ($row2 = mysqli_fetch_assoc($ress2))   
  {   
     $columns= implode(",", $row2);   
     $current_col=""; // <- contiene il nome colonna corrente   
     for($i=0; $i<strlen($columns); $i++)   
     {   
        if($columns[$i] != ',')   
           $current_col .= $columns[$i];   
        else 
           break;   
     }   
     //Search into ->   
     echo "<br>".$current_col; 
     $sql = "SELECT * FROM ".$table." WHERE ".$current_col." LIKE '%".$ricerca."%'";  //ERRORE, C'ERA $RICERCA AL POSTO DI $TABLE 
     echo "<br>".$sql."<br>";  
     if($ress3 = $con2->query($sql)) {  
         while ($row3 = $ress3->fetch_assoc())   
         { 
            echo "Ho trovato (nella tabella <b>".$table."</b>)"; 
             foreach($row3 as $riga) 
                 echo $riga; 
          } 
     } 
   }   
}  
} 
}
else{echo 'Selezionata interrogazione. Questa funzione non è ancora disponibile.';
}
}
?>
 
A me funziona quindi ripartiamo dalla tua funzionante.
Prendi il tuo codice di prima e inserisci:
PHP:
while ($row3 = mysqli_fetch_assoc($ress3))  
{  
//aggiungi le seguenti 3 righe di codice
echo "<br><br>";
print_r($row3);
echo "<br><br>";
  $risultato = $row3[$current_col];  
  if(strlen($risultato) >= 1)  
  {  
     echo "Ho trovato (in <b>".$current_col."</b>)";  
     echo $risultato;  
  }  
}
Dimmi cosa stampa in output.
 
Ah ok, anzichè aggiungere quelle righe le avevo sostituite alle altre, chiedo scusa.
Ora stampa

Array ( [altracolonna] => risultato [colonnadelrisultato] => risultato [altracolonna] => risultato)

Ho trovato (in colonnadelrisultato)
risultato


Grazie! :D
 
Dovrebbe andare in questo modo allora:
PHP:
while ($row3 = mysqli_fetch_assoc($ress3))  
{  
  foreach($row3 as $colonna => $risultato){
     echo "Ho trovato (in <b>".$colonna."</b>):".$risultato;  
  }  
}
 
Ma questo era il risultato del print_r()?
Codice:
 Array ( [altracolonna] => risultato [colonnadelrisultato] => risultato [altracolonna] => risultato)
Elimina tutti i print_r (se ce ne sono) e lascia solo quello nel while assicurandoti che quello è il risultato di quel print_r($row3).
 
Sì!

Ho apportato le correzioni
PHP:
$ricerca = $_GET['ricerca'];  
$server_address = 'localhost';  
$DB_name = 'my_angeange';  
$user_DB = 'angeange';  
$pass_DB = 'password';     
$con2 = mysql_connect($server_address, $user_DB, $pass_DB);  
mysql_select_db($DB_name, $con2);  
$ress = mysql_query("show tables", $con2) or die("Errore nella raccolta dei dati -> database1");  
   
while ($row = mysql_fetch_assoc($ress))   
{  
  $table = "";  
  $table = implode(",", $row); // <- contiene il nome tabella corrente  
  $ress2 = mysql_query("SHOW COLUMNS FROM ".$table."", $con2) or die("Errore database2");  
  while ($row2 = mysql_fetch_assoc($ress2))  
  {  
     $columns= implode(",", $row2);  
     $current_col=""; // <- contiene il nome colonna corrente  
     for($i=0; $i<strlen($columns); $i++)  
     {  
        if($columns[$i] != ',')  
           $current_col .= $columns[$i];  
        else  
           break;  
     }  
     //Search into ->  
     $sql = "SELECT * FROM ".$table." WHERE ".$current_col." LIKE '%".$ricerca."%'";  
     try  
     {  
         $ress3 = mysql_query($sql, $con2);  
         while ($row3 = mysql_fetch_assoc($ress3))  
         {$risultato = $row3[$current_col];  
             if(strlen($risultato) >= 1)  
             {  
                 echo "Ho trovato (in <b>".$current_col."</b>)<br>";  
                 echo $risultato."<br>";
  print_r($row3); 
echo "<br><br>"; 

             }  
          }  
      }  
     catch(Exception $e){}  
   }  
}
 
Allora vuol dire che i dati sono in $row3. Ho testato anche sul mio codice, riprova:
PHP:
         while ($row3 = $ress3->fetch_assoc())  
         {
             echo "<br>Ho trovato (nella tabella <b>$table</b>)";
             foreach($row3 as $campo => $risultato)
                echo "<br>Campo: $campo -> $risultato";
         }
 
Grazie per la pazienza :p

Ho modificato
PHP:
while ($row3 = $ress3->fetch_assoc())
In
PHP:
while ($row3 = mysqli_fetch_assoc($ress3))
Perchè mi dava di nuovo errore.
Continua a non trovare nulla D:
 
Vabbè nell'array $row3 ci sono i valori.
La chiave è il campo e il valore il risultato o quelli attinenti.
Fai un po' di prove per stamparli dovrebbe funzionare col foreach in teoria.
 

Discussioni simili