Confrontare due stringhe

  • Creatore Discussione Creatore Discussione gracito
  • Data di inizio Data di inizio

gracito

Utente Attivo
30 Mag 2010
109
0
0
Salve
Ho la necessità di confrontare due stringhe. Mi spiego.
Ho un db con due campi Id, e Sequenza.
Ho creato un form dove viene digitato l'id che viene passato a una pagina dettagli.php.
All'apertura della pagina dettagli.php mi compare l'id e il relativo testo. Adesso voglio confrontare la sequenza dell'id selezionato con la sequenza di tutto il db e visualizzarne tutti quelli uguali. Come posso fare? Ecco il testo.
PHP:
<?php
      
      $ID = $_REQUEST["ID"];
      ?>
      
      <table border= "1" width="890" align="center">
    <br>
    <tr>
      
      <td width="850" bgcolor="#E1E1E1"><div align="center"><font color="#000066"><b>Id </b></font></div></td>
      <td width="40" bgcolor="#E1E1E1"><div align="center"><font color="#000066"><b>Sequenza </b></font></div></td>
      
    
    <?php
    
$db = mysql_connect("localhost","root","");
mysql_select_db("sequenza", $db);
    
$result =mysql_query("SELECT * FROM foglio1 Where ID=$ID" );


while($myrow=mysql_fetch_array($result))

echo  "<tr>
<td align= 'center' bgcolor='#f9fbc8'>$myrow[Id]</td>
<td bgcolor='#f9fbc8' >". wordwrap($myrow[Seq], 75, " ", true) ."</td></tr>";

Grazie
 
Puoi usare una query SQL del genere:
Codice:
SELECT * FROM foglio1 WHERE Seq = 'tua sequenza'
E poi usi un ciclo while per visualizzare tutti gli ID corrispondenti.

Nello script che hai postato non hai bisogno di usare il ciclo while quando estrai la prima sequenza, in quanto l'ID è univoco. Se gli ID si ripetono hai strutturato male il database.

Inoltre sarebbe buona norma non usare più la libreria mysql, che è deprecatissima. Usa PDO o, al massimo, mysqli.
 
Non ho puntualizzato che il campo sequenza è un campo di 300 caratteri circa è un campo con la sequenza di lettere dell'Rna ....acuccuaaa etc.
Quindi devo digitargli l'id e mi da il risultato dell'id con affianco la sequenza.
Riesco a visualizzare l'id con la sequenza affianco ma non riesco a confrontare le sequenze.

Spero essere stato più chiaro

Potresti scrivermi due righe di codice così mi è più chiaro?

Grazie
 
MySQLi sta per MySQL Improved. È una nuova versione della libreria, che soppianta la vecchia, divenuta obsoleta e caotica nel codice sorgente. Come se non bastasse usando MySQL non abbracci per niente il paradigma ad oggetti di PHP. Nessuna buona applicazione dovrebbe usare MySQL, o al limite dovrebbe fornire un'alternativa, se è necessario tenere la libreria per ragioni di retrocompatibilità.

Se ne evince che MySQL non è ufficialmente deprecata, ma tra i programmatori ormai è definita tale.

P.S. Non sto dicendo che MySQL è deprecato, ma solamente che ci sono tre librerie per accedervi tramite PHP: una vecchia (mysql) e due nuove (mysqli; PDO, che consente l'accesso ad ogni database con gli stessi metodi, il che è una gran comodità).
 
Ho tolto il while certo non ci stava a fare nulla.
Non sono riuscito a confrontare le sequenze.
Ecco il codice sostituito.

PHP:
<?php
    
$db = mysql_connect("localhost","root","");
mysql_select_db("capre", $db);
    
$result =mysql_query("SELECT * FROM foglio1 Where ID=$ID" );

$myrow=mysql_fetch_array($result);

echo  "<tr>
<td align= 'center'>$myrow[Id]</td>
<td >". wordwrap($myrow[Seq], 75, " ", true) ."</td></tr>";

?>
 
Scusami, vediamo se ho capito: tu devi estrarre dei dati dal database secondo un ID univoco, e poi cercare tutte le righe in cui un campo sia uguale a quello estratto, giusto? E allora non capisco quale problema ci fosse nel mio sistema, puoi fare così (usando, tra l'altro, PDO):
PHP:
<?php
try
{
	$dsn = 'mysql:host=localhost;dbname=capre';
	$db = new PDO($dsn, 'root');
}
catch(PDOException $e)
{
	die('<h1>Errore database</h1><p>Impossibile effettuare la connessione al database.');
}

$stm = $db->prepare('SELECT * FROM foglio1 WHERE ID = ?');
$stm->execute(array($ID));

$data = $stm->fetch();

$stm = $db->prepare('SELECT * FROM foglio1 WHERE ID <> ? AND Seq = ?');
$stm->execute(array($ID, $data['Seq']));

$related = $stm->fetchAll();
$data['Seq'] = wordwrap($data['Seq'], 75, ' ', true);

echo <<<EOF
<tr>
	<td align="center">{$data['ID']}</td>
	<td>{$data['Seq']}</td>
</tr>
EOF;
?>
E così avrai in $related un array bidimensionale, contenente degli array che rappresentano le singole righe estratte.
 
Devo vedermi il codice che mi hai scritto è nuovo per me.
L'ho provato ma mi visualizza solo la sequenza dell'id inserito e non quelle uguali e non mi visualizza l'id.

Bo??
 
Ho provato così ma non funziona.

PHP:
<?php
    
$db = mysql_connect("localhost","root","");
mysql_select_db("capre", $db);
    
$result =mysql_query("SELECT * FROM foglio1 Where ID=$ID" );
while($myrow=mysql_fetch_array($result))

echo  "<tr>
<td align= 'center'>$myrow[Id]</td>
<td >". wordwrap($myrow[Seq], 75, " ", true) ."</td></tr>";

$query ="SELECT * FROM foglio1 Where Seq=$myrow[Seq]";
while($myrow=mysql_fetch_array($query))

echo  "<tr>
<td align= 'center'>$myrow[Id]</td>
<td >". wordwrap($myrow[Seq], 75, " ", true) ."</td></tr>";

?>
 
Devi usare gli apici per delimitare una stringa in SQL. Quindi devi fare così:
Codice:
SELECT * FROM foglio1 WHERE Seq = 'testo'
Ricordati inoltre di specificare che non vuoi recuperare l'ID attuale. Quindi devi aggiungere una condizione, in questo modo:
Codice:
SELECT * FROM foglio1 WHERE ID <> ID_attuale AND Seq = 'testo'
Al contrario delle stringhe, per i numeri non devi usare gli apici.
 
Niente da fare potresti dare uno sguardo al codice postato in precedenza, probabilmente c'è qualche errore che non vedo.

Grazie
 

Discussioni simili