Aiutino per query MySql

raphael_php

Nuovo Utente
20 Feb 2012
13
0
0
Ciao, avevo bisogno di un vostro consiglio, in pratica ho un file log (un file di testo) che ho creato in precedenza:

** 23 March 2012 - 5:48 pm **
../DSI/02061040412/
** note ** L'archivio ../DSI/01005880412/ esiste
../DSI/A1AA588A412/
../DSI/A217699A41A/
../DSI/CC99551C419/
../DSI/A21831AS417/
../DSI/A22SD97F412/
** note ** L'archivio ../DSI/01005880412/ esiste
** note ** Il documento ../DSI/01005880412/N.000013 data 31-01-2012.pdf è stato sostituito
** FINE **

e un database strutturato come segue

CREATE TABLE IF NOT EXISTS `dcs_users` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(10) NOT NULL DEFAULT '',
`password` varchar(50) NOT NULL DEFAULT '',
`email` varchar(50) NOT NULL DEFAULT '',
`fullname` varchar(50) DEFAULT NULL,
`virtualdx` varchar(50) NOT NULL DEFAULT './DS/',
`virtualdk` varchar(50) NOT NULL DEFAULT './DSI/',
`virtualdy` varchar(50) NOT NULL DEFAULT './DSP/',
PRIMARY KEY (`userid`),
KEY `userid` (`userid`)

In pratica volevo leggere dal file di testo la riga contenente la directory, quindi verificare se nel database nel campo virtualdk è presente la directory. Se la directory è presente all'interno del DB allora estraggo dal record le altre informazioni che mi servono per mandare la mail

PHP:
include ("./readline.php");

$riga = 1;
$inv = "";

while(readLine($file,$riga)!="** FINE **") {
	
$inv = readLine($file,$riga);

	if(substr($inv,0,2)!="**") {
		
		var_dump ($riga); var_dump ($inv); 
			
		$sql_check = mysql_query("SELECT * FROM dcs_users WHERE virtualdk LIKE 'inv'");
        $row = mysql_num_rows($sql_check);
		
		 $username = $row['username'];
         $email = $row['email'];
		 
		var_dump($row); var_dump($username); var_dump($email);

		
		
		$riga = $riga + 1; 	
	} else {
		$riga = $riga + 1;
	}
}

Riesco ad estrarre correttamente l'informazione che mi serve dal file di log ma poi sbaglio sicuramente qualche cosa nelle query perché non riesco a verificare se nel database c’è la directory e di conseguenza non riesco ad estrarre gli altri dati che mi servono. Potete aiutarmi a correggere il codice o suggerirmi un metodo alternativo corretto per affrontare il problema.

il var dump è il seguente:


int 2
string '../DSI/02061040412/' (length=19)
int 0
null
null
int 4
string '../DSI/A1AA588A412/' (length=19)
int 0
null
null
int 5
string '../DSI/A217699A41A/' (length=19)
int 0
null
null
int 6
.....

Ciao e grazie Luca
 
Ultima modifica:
$inv è una variabile. Nella tua query utilizzi semplicemente la stringa 'inv'.
PHP:
$sql_check = mysql_query("SELECT * FROM dcs_users WHERE virtualdk LIKE '$inv'");
 
Ciao grazie mille Alessandro1997, ho provato a correggere il codice ma purtroppo il var_dump non è cambiato. Ho usato il LIKE al posto di = perchè nel campo virtualdk nel database la directory è inserita con un "." di meno cioè ho nel database ./DSI/02061040412/ mentre nel file log ../DSI/02061040412/ .

Ciao Luca
 
ciao
perchè non provi a fare così (se è solo un punto che manca)
PHP:
<?php
//....
$inv =".".$inv;
$sql_check = mysql_query("SELECT * FROM dcs_users WHERE virtualdk = '$inv'"); 
//...
?>
eventualmente con addslashes come ha detto alex?
 
Ciao borgo italia, ho provato a modificare il codice eliminando il puntino di troppo

PHP:
        $inv = substr(addslashes($inv),1); 
        var_dump ($riga); var_dump ($inv); 
            
        $sql_check = mysql_query("SELECT * FROM dcs_users WHERE virtualdk = '$inv'");
        $row = mysql_num_rows($sql_check);
        
         $username = $row['username'];
         $email = $row['email'];
         
        var_dump($row); var_dump($username); var_dump($email);

e nel var_dump si vede l'effetto ma ancora la query non funziona

int 2
string './DSI/02061040412/' (length=18)
int 0
null
null
int 4
string './DSI/A1AA588A412/' (length=18)
int 0
null
null
int 5
string './DSI/A217699A41A/' (length=18)
int 0
null
null
int 6

ho provato anche a fare una query diversa per vedere se il DB funzionava

PHP:
$result = mysql_query("SELECT * FROM dcs_users");
   while ($row = mysql_fetch_array($result)){
   var_dump($row);
}
ed il var dump riporta i dati corretti
array
0 => string '2' (length=1)
'userid' => string '2' (length=1)
1 => string 'luca' (length=4)
'username' => string 'luca' (length=4)
17 => string './DS/test1/' (length=11)
'virtualdx' => string './DS/test1/' (length=11)
18 => string './DSI/01005880412/' (length)=18
'virtualdk' => string './DSI/01005880412/' (length=18)
19 => string './DSP/' (length=5)
'virtualdy' => string './DSP/' (length=5)

Ciao Luca
 
Ultima modifica:
ciao
FERMI TUTTI e palla al centro

NON
$row = mysql_num_rows($sql_check);

MA
$row = mysql_fetch_array($sql_check);

OPPURE
$row = mysql_fetch_assoc($sql_check);

stavo scrivendo quando ho visto che prova hai fatto: e da li non ti sei reso conto che non avevi messo il mysql_fetch?
 
ciao
così dovrebbe funziare
PHP:
<?php
include ("./readline.php");
$riga = 1;
$inv = "";
while(readLine($file,$riga)!="** FINE **") {
	$inv = readLine($file,$riga);
    if(substr($inv,0,2)!="**") {
        $inv = substr(addslashes($inv),1);
		var_dump ($riga); var_dump ($inv); 
        $sql_check = mysql_query("SELECT * FROM dcs_users WHERE virtualdk = '$inv'");
        var_dump ($sql_check);
		$row = mysql_fetch_array($sql_check);
        $username = $row['username'];
        $email = $row['email']; 
        var_dump($row); var_dump($username); var_dump($email);
        $riga = $riga + 1;     
    } else {
        $riga = $riga + 1;
    }
} 
?>

@alex: il pelato achille ti ha dato alla testa:o
 
Ciao borgo italia, era proprio quel
PHP:
$row = mysql_num_rows($sql_check);
che doveva essere sostituito con
PHP:
$row = mysql_fetch_array($sql_check);
e ora la selezione funziona correttamente. Adesso proverò ad usare la classe phpmailer per creare le mail con il file allegato.

Ciao e grazie ancora Luca
 

Discussioni simili