Cms:qualcuno sa dirmi cosa c'è di sbagliato in questa query?

Ciao a tutti,

sto cercando di realizzare un piccolo cms a titolo di esercizio, ma essendo la mia prima esperienza ho riscontrato degli errori, qualcuno sa dirmi cosa dovrei fare per correggere lo script (verifica.php) relativo al login di amministrazione? Grazie mille.

Roby

<?php

//Avvio o continuo la sessione

session_start();

//Controllo che la sessione sia attiva

if(!isset($_SESSION['username_id'])){

//Controllo se l' utente vuole loggarsi

$username = @$_POST['username'];

$password = @$_POST['password'];

//Controllo se l' username e la password non sono vuoti

if((!strlen($username) == 0) and (!strlen($password) == 0)){

//Effettuo il controllo dei dati

$querySQL = "SELECT *  FROM `utenti`  WHERE

            `username` =  '".$username."' AND

            `password` =  MD5('".$password."')" ;

$result = mysql_query($querySQL);

$row = mysql_fetch_row($result);

//Controllo l'esito della query

if(!$result){

die("Errore nella query $querySQL: ".mysql_error());

}

//Controllo se l' utente e' stato trovato

if(!strlen($row[0]) == 0){

//Effettuo il login

$_SESSION['username_id'] = $row[0];

}

//Libero la memoria

mysql_free_result($result);

}

}

//Effettuo il Logout

if(@$_GET['logout'] == 1){

//Desetto tutte le variabili di sessione

$_SESSION = array();

//Distruggo le sessioni   

session_destroy();

}

?>

inviato 10 anni fa
wutangrob
X 0 X

che errori ricevi?

P.S.: il PHP non è C....

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao,

anzitutto grazie, l'errore che ricevo è il seguente:

Warning: mysql_query(): Accesso non consentito per l'utente: 'ODBC'@'localhost' (Password: NO) in c:\programmi\easyphp1-8\www\cms_metatag\admin\verifica.php on line 20

Warning: mysql_query(): A link to the server could not be established in c:\programmi\easyphp1-8\www\cms_metatag\admin\verifica.php on line 20

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\cms_metatag\admin\verifica.php on line 21

Errore nella query SELECT * FROM `utenti` WHERE `username` = 'wutangrob' AND `password` = MD5('69laotze'): Accesso non consentito per l'utente: 'ODBC'@'localhost' (Password: NO)

ciao

Roby

risposto 10 anni fa
wutangrob
X 0 X

Il problema quindi non è nella query ma nella connessione al database, che in realtà non esegui esplicitamente.

Quando lanci la funzione mysql_query, PHP si accorge che non sei ancora connesso a MySQL e tenta di effettuare un collegamento usando nome e password di default, che ovviamente non sono corrette. La connessione automatica fallisce e tutte le successive istruzioni che tentano di interagire con MySQL falliscono.

Devi quindi avviare correttamente la procedura di connessione a mysql, come descritto quì:

http://www.phpnews.it/corsi/corso-php-mysql/connessione-mysql-selezione-db/

(visto che sei alle prime armi perché non leggere tutto il corso PHP/MySQL?)

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni,

grazie di nuovo. Ho già scaricato la guida e la ho già letta, ma la riguarderò. Non avevo messo il

require ('db.php'); prima di session_start, distrazione, verificherò se adesso funziona o meno;in ogni caso caso grazie l'aver avuto uno scambio mi è servito comunque.

Di nuovo grazie. 

file db.php: (Codice)

<?php

// Settaggio delle  infomazioni di collegamento.

$db_host='localhost';

$db_username='root';

$db_userpass='';

$db_name='metatag';

//Collegamento al database di mysql server.

$connessione= mysql_connect ($db_host, $db_username, $db_userpass);

if (!mysql_select_db($db_name,$connessione)) die(mysql_error());

?>

Roby

risposto 10 anni fa
wutangrob
X 0 X

Ciao Gianni.

Ho letto questo topic ed ho riscontrato lo stesso errore "ODBC"...Ho letto la guida per la connessione ma non trovo il bug :(

questo è il codice che ho rielaborato (l'originale è un tutorial che ho trovato)

session_start();
include ("./_include/config.php");
include("./_include/config.incb.php");
include("./_include/dictionary2.1.php");
include("./_include/dictionary.1.php");
$keywords = $tit009;
$description = $des009;
$title = $tit009;
include("./_include/head.php");
$flgleft = "password";
include("./_include/left.php");
//Includo il file con i forms di Log-In, Controllo, Registrazione e Attivazione
include("./_include/forms.php");

/*include 'db.php';*/

// Dichiaro le variabili di Log-in
$username = $_POST['username'];
$password = $_POST['password'];

if((!$username) || (!$password)){
   // Stampo il form che controlla se l'utente ha riempito i campi user e password
   echo $form_check_campi;
   exit();
}

// Converto la password con md5
$password = md5($password);

// mi connetto al db
$connection = mysql_pconnect('locahost', 'root', 'pw')
   or die ("Impossibile connettersi al server.");

$db = mysql_select_db('nome', $connection)
   or die("Impossibile connettersi al database.");

// controllo le info dello user   
$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
   while($row = mysql_fetch_array($sql)){
   foreach( $row AS $key => $val ){
      $$key = stripslashes( $val );
   }
      // Registro le variabili di sessione!
      session_register('first_name');
      $_SESSION['first_name'] = $first_name;
      session_register('last_name');
      $_SESSION['last_name'] = $last_name;
      session_register('email_address');
      $_SESSION['email_address'] = $email_address;
      
      header("Location: sample.php");
   }
} else {
//Stampo il form che controlla se il log-in è corretto. In caso contrario restituisce "LOG-IN ERRATO!"
echo $form_check_login;
}

Grazie.

risposto 10 anni fa
Piero83
X 0 X

a che riga si riferisce l'errore? Potresti riportarlo integralmente?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ho notato che localhost manca di una "l", era lì l'errore.

Poi nello stripslashes la variabile $key ha due dollari. Non so se sia corretto...io ne ho lasciato uno solo e sembra funzionare.

Ho però notato che a prescindere dai dati che passo al form di login mi stampa sempre il form di login errato (cioè l'ultimo echo)...anche se user e password sono corretti.

E' come se non vedesse header("Location: sample.php");

Quello che invece vorrei fare è: se user e pw sono corretti, mostra la pagina di gestione dati per quell'utente.

PS: se sono OT mi sposto in un altro topic.

risposto 10 anni fa
Piero83
X 0 X

si, magari converrebbe riformulare il questio in un nuovo thread

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda