Pagina 1 di 1

[phpmysqli] problema classe database

Inviato: domenica 27 aprile 2014, 21:45
da treled
salve, sto facendo o meglio sto provando ad a fare un classe che mi crociasse tutto il lavoro dell'inserimento e gestione dei dati in sql.

ora vi posto la classe:

Codice: Seleziona tutto

<?php     
class Database { 

    private $db; 
    private $result; 

    //connessione al DBMS  
    function __construct($db_host, $db_utente, $db_password, $db_nomedb){ 
        /* activate reporting */ 
        $driver = new mysqli_driver(); 
        $driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;  
        $this->db = new mysqli($db_host, $db_utente, $db_password, $db_nomedb); 
    } 
     
     function __destruct()  
    {  
       $this->close(); 
    }   
     
	//query sulla tabella   
    public function Query($sql){ 
        try { 
		$this->result = $this->db->query($sql);
        }  
        catch (mysqli_sql_exception $e) { 
          echo $e->__toString(); 
       } 
    } 

    //conteggio dei records  
    public function RecordCount($sql)
	{
		$sql = $this->result->num_rows;
		return $sql;
	}
     
	
	// estrazione dati.
	
	public function Fetch($mode)
	{ 
      if($mode=='assoc') 
        { 
          $row = $this->result->fetch_assoc(); 
        } 
        else if($mode=='array') 
        { 
        $row = $this->result->fetch_array(); 
        } 
        return $row; 
    } 
		//chiusura della connessione  
	 function close()
	{ 
		  unset($this->db); 
    }
	public function escape($data){
		return $this->db->real_escape_string($data);
	}
}  
?>
ho un problema qui:

Codice: Seleziona tutto

 //conteggio dei records  
    public function RecordCount($sql)
	{
		$sql = $this->result->num_rows;
		return $sql;
	}
e nel codice login dall'altra parte del codice ..

non riesco ad fare contare se esiste o no il dato.

ecco il pezzo di codice "essendo che non lo scritto io".

Codice: Seleziona tutto

<?php
session_start();
include 'inc/config.php';
include 'inc/funzioni.php';
?>
<head>
	<link rel="stylesheet" href="style.css" type="text/css"/>
</head>
<?php
if(!($_POST['username'] and $_POST['password'])){//se non sono stati postati username (nome del PG) e password
?>
	<html>
		<head>
			<title><?php echo $sitename; ?>::login</title>
		</head>
		<body>
			<form action="login.php" method="post">
				Nome PG <input type="text" name="username" class="nero"/><br/>
				Password <input type="password" name="password" class="nero"/><br/>
				<input type="submit" value="login" class="nero"><br/>
			</form>
		</body>
	</html>
<?php
}
else{
	$datiuser=$db->query("SELECT * FROM users WHERE nome='".$_POST['username']."' AND password='".md5($_POST['password'])."';");//select dell'user con  la pass settata a md5($_POST['password'], se c'è solo una riga, cioè se l'utente esiste, fa il login e header location a main.php, alla stanza 1, cioè quella principale
	if($datiusser = $db->RecordCount() == 1)
	{
		$dati = $db->Fetch('array');	
		$_SESSION['username']=$dati['nome'];//registra in sessione l'username separato dagli altri dati
		$_SESSION['datiuser']=$dati;//registra in sessione i dati presi dal db, per agiornarli basta fare upd_session()
		$_SESSION['stanza']=1;//setta subito la stanza a 1, quella principale
		$_SESSION['password']=$_POST['password'];
		$invisibile=0;//setta invisibile subito a 0, presumendo che l'utente sia normale, potrà poi essere cambiato all'interno del gioco
		if($dati['admin']==1) $_SESSION['admin']=1;//se è admin setta $_SESSION['admin']
		if($dati['master']==1) $_SESSION['master']=1;//stesso per il master
		$ins=$db->query("INSERT INTO sessioni SET session_id='".session_id()."',username='".$dati['nome']."',stanza=1,last_time='".(time()+60*10)."',invisibile='".$invisibile."';");//inserisce i dati nella tabella sessioni
		if(!$ins){//se non fa la query da un errore LOGIN_QUERY e toglie i dati della sessione
			errore('LOGIN_QUERY','Impossibile aggiungersi alla lista utenti connessi, riprovare dopo o mandare un e-mail al <a href="'.$admemail.'">webmaster</a>');
			$_SESSION=array();
		}else{//altrimenti manda a main, nella stanza 1
			?>
			<script type="text/javascript" language="JavaScript">
function autoreload()
{
var timeID = setTimeout("location.href= 'main.php?stanza=1'", 4000)
}
</script>
</head>
<body onLoad="autoreload()">
login  effettuato, aspetta un attimo...
</body>
			<?php
		}
	}else{//se non ci sono righe trovate stampa un errore
		echo 'Username non trovato o password sbagliata, <a href="login.php">rifai</a>';
	}
}
?>
in poche parole sono bloccato qui:

Codice: Seleziona tutto

	$datiuser=$db->query("SELECT * FROM users WHERE nome='".$_POST['username']."' AND password='".md5($_POST['password'])."';");//select dell'user con  la pass settata a md5($_POST['password'], se c'è solo una riga, cioè se l'utente esiste, fa il login e header location a main.php, alla stanza 1, cioè quella principale
	if($datiusser = $db->RecordCount() == 1)
	{
al recordCount, che non riesco a capire come è la richiamata al metodo della classe.

vi ringrazio molto..

buona serata.

Re: [phpmysqli] problema classe database

Inviato: martedì 29 aprile 2014, 9:04
da Zoff
Come ti ho già scritto in un altra discussione, num_rows è settato solo dopo il fetch.