La connessione si effettua ma non la query. Perché??????????

<?php

// file con host del database, utente, password e database selezionato

// questo file include va bene; si connette al db mysql (uso php_mysqli.dll)

// variabili che provengono dalla pagina di inserimento vengono mentenuto bene.

// il problema sta nel rigo "$feedback = 'ERROR - DB error'";

// la query non viene effettuata.

//gianni mi aiuti?

// sto lottando da una settimana.

// spero di risolvere con te.

//grazie.

include_once('db_vars.inc');

// stringa utilizzata per la crittografia md5

$supersecret_hash_padding = 'str';

function user_register()

{

// funzione con array superglobali

//non vengono passati valori o dichiarate variabili globali

global $supersecret_hash_padding;

//tutte le variabili sono presenti?

//le password corrispondono?

if (strlen($_POST['user_name']) <= 25 &&

    strlen($_POST['password1']) <= 25 &&

    ($_POST['password1'] ==   $_POST['password2']) &&

    strlen($_POST['email']) <= 50) // &&

    //validate_email($_POST['email']))

{

//convalida nome utente e password

if (account_namevalid($_POST['user_name']) ||

     strlen($_POST['password1'] >= 6))

{

$user_name = strtolower($_POST['user_name']);

$user_name = trim($user_name);

$email = $_POST['email'];

//non necessita dell'escape, perché le virgolette

//singole non sono consentite

//non consente nomi utente o indirizzi di posta elettronica duplicati

$query = "SELECT user_id FROM user WHERE user_name = '$user_name' AND email = '$email'";

$result = mysqli_query($query);

if ($result && mysqli_num_rows($result) > 0)

{

$feedback = 'ERROR-Username or email address already exists';

return $feedback;

}

else

{

$first_name = $_POST['first_name'];

$last_name = $_POST['last_name'];

$password = md5($_POST['password1']);

$user_ip = $_SERVER['REMOTE_ADDR'];

//Crea un nuovo hash per inserire il database e l'email di conferma

$hash = md5($email.$supersecret_hash_padding);

//$query = "INSERT INTO user (user_name, first_name, last_name, password,

//      email, remote_addr, confirm_hash, is_confirmed, date_created) VALUES('$user_name',

//       '$first_name', '$last_name', '$email', '$user_ip', '$hash', '0', NOW())";

$query = "INSERT INTO user (user_name, first_name, last_name, password, email)

            VALUES('$user_name', '$first_name', '$last_name', '$password', '$email')";

$result = mysqli_query($query);

if (!($result))

{

$feedback = 'ERROR - DB error';

return $feedback;

}

else

{

print($query);

// Invia l'email di conferma

$encoded_email = urlencode($_POST['email']);

$mail_body = <<< EOMAILBODY

Ti ringraziamo per la registrazione.

Fare click sul links per confermare la registrazione:

//http://localhost/confirm.php?hash=$hash&email=$encoded_email

Ricevuto il messaggio di conferma, potrai accedere ai nostri servizi.

EOMAILBODY;

   mail($email, 'Conferma registrazione', $mail_body, 'From: noreply@orione.com');

// Fornisce un messaggio di registrazione riuscita

$feedback = 'Registrazione riuscita.  Riceverai la conferma al tuo indirizzo email';

return $feedback;

    }

  }

}

else

{

$feedback = 'ERROR-Nome utente o password non valido';

return $feedback;

  }

}

else

{

$feedback = 'ERROR-Compilare tutti i campi nel modo corretto';

return $feedback;

  }

}

//****************************

function account_namevalid($username)

// Parametro per l'utilizzo con strspan

{

$span_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-";

// Deve contenere almeno un carattere

if (strspn($username,$span_str) == 0)

{

return false;

}

//Deve contenere tutti i caratteri legali

if (strspn($username,$span_str) != strlen($username))

{

return false;

}

//Lunghezza minima e massima

if (strlen($username) < 5)

{

return false;

  }

if (strlen($username) > 25)

{

return false;

  }

//Nomi non validi

if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|

(halt)|(mail)|(news)|(uucp)|(operator)|(games)|(mysql)|

(httpd)|(nobody)|(dummy)|(www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|

(ns)|(download))$", $username))

{

return false;

  }

if (eregi("^(anoncvs_)", $username))

{

return false;

  }

return true;

  }

/*

//****************************

function validate_email($stremail)

{

//return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_à-z{|}~]+'.'@'.'[-

//!#$%&\'*+\\/0-9=?A-Z^_à-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_à-z{|}~]+$', $stremail));

}

//****************************

*/

function user_confirm()

//Solo con array superglobali, non vengono passati valori o dichiarate variabli globali

{

global $supersecret_hash_padding;

//Verifica che non falsifichino l'indirizzo di posta elettronica

$new_hash = md5($_GET['email'].$supersecret_hash_padding);

if ($new_hash && ($new_hash == $_GET['hash']))

{

$query = "SELECT user_name FROM user where confirm_hash = '$new_hash'";

$result = mysqli_query($query);

if (!$result || mysqli_num_rows($result) < 1)

{

$feedback = 'ERROR-Email non trovato';

return $feedback;

}

else

{

//Conferma l'email e attiva l'account

$email = $GET['email'];

$hash = $_GET['hash'];

$query = "UPDATE user SET email='$email', is_confirmed='1' WHERE confirm_hash='$hash'";

$result = mysqli_query($query);

return 1;

}

}

else

{

$feedback = 'ERROR-Valori inseriti non corrispondono';

return $feedback;

}

}

?>

inviato 11 anni fa
Ladis
X 0 X

Non posso mica leggere tutto lo script  >:(

Dimmi l'errore o il malfunzionamento (nel dettaglio) che hai e le righe che potrebbero essere la causa.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Secondo te la connessione qui va bene?

Questo file di conenessione viene messo in include.

<?php

//Connessione al db

$dbUser = "root";

$dbPass = "pushpam";

$dbName = "orion";

$dbHost = "localhost";

//$link = (mysqli_connect($dbHost, $dbUser, $dbPass));

$link = mysqli_connect($dbHost, $dbUser, $dbPass);

if (!$link) {

   die('Errore nella connessione: ' . mysqli_error());

}

// selezione del database

$db_selected = mysqli_select_db($link, $dbName);

if (!$db_selected) {

   die ('Errore nella selezione del DB: ' . mysqli_error());

}

?>

risposto 11 anni fa
Ladis
X 0 X

come puoi notare tu stesso, se la connessione al database o la scelta del database non hanno successo riceverai un messaggio di errore e lo script terminerà.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Non riesco a ottenere il messaggio di errore del mysql sul browser che mi potrebbe aiutare molto.

Come si fa?

risposto 11 anni fa
Ladis
X 0 X

potresti mettere all'inizio dello script la funzione:

error_reporting(E_ALL);

per vedere tutti i tipi di errore.

Inoltre, per ogni istruzione che temi possa essere la causa del malfunzionamento, prova a creare dei test, tipo

$result = mysqli_query($query);
if(!$result)
// controllo l'esito della query
if (!$result) {
    echo 'Errore nella query';
}
else {
    echo 'Query effettuata con successo';
}
risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ok. Va benissimo.

Ovviamente questo rigo dello script è da togliere prima di pubblicare l'applicativo a tutto il pubblico. Giusto?

risposto 11 anni fa
Ladis
X 0 X
Ovviamente questo rigo dello script è da togliere prima di pubblicare l'applicativo a tutto il pubblico. Giusto?

Dipende dai punti di vista...

Se stai realizzando qualcosa di veramente grosso (e serio) allora dovtresti mettere in piedi un sistema di gestione personalizzata degli errori. Gli errori ti devono arrivare via mail...

In generale comunque preferisco inserire più controlli possibili e lasciarli anche nella versione "di produzione" dello script in modo da essere sicuro che tutto funziona. E' buona norma fare degli script notice free ciò che non riportano neanche errori di tipo NOTICE, i meno pericolosi.

 :bye:

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