Jump to content


Photo

Script De Acesso Ao Banco De Dados


  • Faça o login para participar
3 replies to this topic

#1 psillus

psillus

    Normal

  • Usuários
  • 75 posts
  • Sexo:Não informado

Posted 21/12/2010, 16:31

Pessoal,

Instalei o Servidor de E-mail hMailServer e quando está sendo instalado, o software pergunta se queremos que ele use um BD próprio ou se use um BD externo (MySQL ou MSSql).
Como eles sugerem eu instalei o banco de dados próprio dele, um MySQL também.
Está tudo funcionando bem para enviar e receber e-mails, mas para cadastrar novas contas de e-mail eu necessito interferir como administrador no painel de controle e tem pessoas que não gostam de fornecer suas senhas ou querem mudar depois.
Tenho um scripts em PHP que faz este cadastro mas não consigo fazer funcionar.
Eu preenchi os dados de acesso do script (host name, user name e password) mas recebo o seguinte erro:

Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'meusite.com.br' (10061) in C:\Inetpub\vhosts\meusite.com.br\httpdocs\cadastrar-email.php on line 34
Warning: mysql_select_db() [function.mysql-select-db]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\Inetpub\vhosts\empresadesites.com.br\httpdocs\cadastrar-email.php on line 35
Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in C:\Inetpub\vhosts\empresadesites.com.br\httpdocs\cadastrar-email.php on line 35
Unable to open database, contact your administrator!

Se eu tentar acessar este BD pelo PHPMyADmin, o BD não aparece, porque está instalado em um lugar diferente da pasta onde estão os bancos de dados do MYSQL "oficial" do servidor.
Acreditando que fosse algum problema de permissão, alterei o Firewal do Windows para aceitar a porta 3307 usada pelo hMailServer, mas não sei se preciso liberar mais alguma coisa no servidor.
Tem mais alguma coisa que poderia estar impedindo o correto funcionamento do script?
Alguém poderia ajudar por favor?
O script é o seguinte:

<?php
error_reporting(E_ALL & ~E_NOTICE);
//MySQL database connection information
//MySQL connection information:
$mysql_host = ""; //Host Name
$mysql_user = ""; //Username
$mysql_pass = ""; //Password
$mysql_db = "hmailserver"; //Database

//General Configuration:
$form_title = "Email Setup"; //Name for this form
$account_max = "10000000";  //Maximum size per account (1000000 = 1MB -> Do not uses spaces or commas!)
$admin_notify = "0"; //1 = yes & 0 = no
$admin_email = ""; //Administrators email to send notifications)
$admin_default_activate = "0"; //1 = yes & 0 = no -> If no, the administrator has to authorise the account
$accountisad = 0; // account is AD-account? 0 = no (default), 1 = yws;
$encryption = 2; //Password encryption level - 2 means md5;
$domain = 'empresadesites.com.br'; // the domain, where the account should be added too

$serv_webmail_url = ''; // full URL to the webmail-application

$url = $_SERVER["HTTP_HOST"];
$domain = (empty($domain))? $_SERVER["HTTP_HOST"] : $domain;
$domain = (substr($domain,0,4) == "www.")? strstr($domain, ".") : $domain;

// Protect database entries and use MD5 encryption
$strName    = (isset($_POST['name']))? addslashes( $_POST['name'] ) : '';
$strUser    = (isset($_POST['user']))? addslashes( $_POST['user'] ) : '';

$strDomain  = addslashes( "$domain" );
$strPass1   = (isset($_POST['pass1']))? addslashes( $_POST['pass1'] ) : '';

//Connect to database using information from above
$open = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
$select = mysql_select_db($mysql_db);

if (!$open || !$select)
{
  echo "Unable to open database, contact your administrator!";
} else {
  echo "<font size=\"+1\">$form_title</font><br><br>";
   
  if ( isset($_POST['submit']) &&  $_POST['submit'] == 'create account' )
  {
    $domain_res = mysql_query("SELECT * FROM `hm_domains` WHERE `domainname` = '{$strDomain}' LIMIT 1");
      if (!$domain_res)
      {
        die('Error while selecting data: ' . mysql_error());
       }
      $domain_info = mysql_fetch_array($domain_res, MYSQL_ASSOC);

    //Check to see if email account exists, if not process signup
    $account_res = mysql_query("SELECT * FROM `hm_accounts` WHERE `accountaddress` = '{$strUser}@$strDomain' LIMIT 1");
    $v1 = mysql_num_rows($account_res);
       
    If ($v1 >= 1)
    {
       echo "A subscriber with this email already exists!<br><br>Please <a href=\"javascript:history.go(-1)\">click here</a> to go back.";
       return false;
    } else {
      if ( !$_POST['pass1'] || !$_POST['pass2'] )
      {
         echo "You did not enter both passwords!<br><br>Please <a href=\"javascript:history.go(-1)\">click here</a> to go back.";
      }
      elseif ( $_POST['pass1'] != $_POST['pass2'] )
      {
         echo "The passwords entered do not match!<br><br>Please <a href=\"javascript:history.go(-1)\">click here</a> to go back.";
      } else {
         $domain_id = $domain_info['domainid'];
         $account_pass = ($encryption == 2)? md5( $strPass1 ) : $strPass1;
         
        $account_add = mysql_query("INSERT INTO `hm_accounts` (`accountdomainid`,`accountaddress`,`accountpassword`,`accountactive`,`accountisad`,`accountmaxsize`,`accountpwencryption`) VALUES ('$domain_id','$strUser@$strDomain','$account_pass','$admin_Default_activate','$accountisad','$account_max','$encryption')");
      }
    }
   
    if (!$account_add)
      {
        die('<br><br>Database error, unable to add account. Please contact your administrator!<br> ' . mysql_error());
       }
       
    If ($admin_Default_activate == 0)
    {
       echo "Your account has been created but <b>requires activation</b> by administration.";
      echo "Once your application has been approved, you will receive a confirmation message.<br><br>";
    } else {
      echo "Your account has been created and is ready for use!<br><br>";
      echo "Username: $strUser@$strDomain<br><br>";
      if ( !empty($serv_webmail_url) ) echo "Webmail: <a href=\"$serv_webmail_url\">www.$strDomain/webmail</a><br>";
      echo "POP3: mail.$strDomain<br>";
      echo "IMAP: mail.$strDomain<br><br>";
      echo "SMTP: mail.$strDomain";
       
      $subject = "Welcome To $strDomain Email!";
      $message = "This is confirmation that your account has been created. You may now login to your account and start using it.";

      mail("{$_POST['user']}@$strDomain", $subject, $message); //Send welcome message
    }
       
    if ($admin_Default_activate == 0 && $admin_notIfy == 1)
    {
      $admin_mail_subject = "Account Requires Activation!";
      $admin_mail_message = "The email account {$_POST['user']}@$strDomain has been created by {$_POST['name']} and requires administration activation!\r\n\r\nPlease login to the admin control panel to verIfy and activate user account.\r\n\r\n";
      mail($admin_email, $admin_mail_subject, $admin_mail_message);
    }
    elseif ($admin_Default_activate == 1 && $admin_notIfy == 1)
    {
      $admin_mail_subject = "New Account Created!";
      $admin_mail_message = "{$_POST['user']}@$strDomain has been created by {$_POST['name']}!";
      mail($admin_email, $admin_mail_subject, $admin_mail_message);
    }
  }
}
   
   //Email account signup page
  echo "
     <table width=\"350\" border=\"0\" cellpadding=\"0\" cellspacing=\"2\">
    <form action=\"\" method=\"POST\">
       <tr><td>Full Name:</td><td><input type=\"text\" name=\"name\" size=\"21\"></td></tr>
      <tr><td>E-Mail:</td><td><input type=\"text\" name=\"user\" size=\"21\"> @ ".$domain."</td></tr>
      <tr><td>Password:</td><td><input type=\"password\" name=\"pass1\" size=\"21\"></td></tr>
      <tr><td>Password:</td><td><input type=\"password\" name=\"pass2\" size=\"21\"> (For Confirmation)</td></tr>
      <tr><td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"submit\" value=\"create account\" style=\"width: 98%\"></td></tr>
    </form>
    </table>";
?>

O detalhe é que trata-se de um servidor Windows 2003 + Plesk 9.5.2.

Agradeço qualquer pitaco!

psillus

#2 KILLME

KILLME

    Normal

  • Usuários
  • 117 posts
  • Sexo:Não informado
  • Localidade:Caraguatatuba-SP

Posted 22/12/2010, 08:10

Pelo segundo erro parece que tem algo a ver com a senha ou login do banco de dados.
http://www.liveworks.com.br : Soluções para internet
http://www.phpmysqljquery.com.br : PHP, MySQL e jQuery
http://www.passoapasso.info : Minhas dicas

#3 Stormbringer

Stormbringer

    I'd love to stay with you all

  • Ex-Admins
  • 2927 posts
  • Sexo:Não informado
  • Localidade:Goiânia - GO
  • Interesses:Atualmente: pesquisa e desenvolvimento de web-games

Posted 22/12/2010, 10:40

$mysql_host = ""; //Host Name
$mysql_user = ""; //Username
$mysql_pass = ""; //Password
$mysql_db = "hmailserver";

vc preencheu os valores corretos do seu bd aí?

๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑


#4 psillus

psillus

    Normal

  • Usuários
  • 75 posts
  • Sexo:Não informado

Posted 22/12/2010, 11:29

Oi amigos,

Pois é, eu também acho que é erro de BD, o problema é que eu não sei identificar o nível do erro.
Quando eu instalei o hMaiServer ele instala um segundo MySQL em outro lugar e o único campo "localhost" que eu tenho é o que eu pude ver em uma das tabelas do próprio localost depois de criado.
Já com relação a senha e usuário, eu não criei nenhum, minha única interação com o sistema foi no momento em que fiz a instalação e ele me pediu uma senha para o usuário Administrator.
À partir daí eu só posso achar que estes sejam os usuário, senha e hostname.
Eu já pensei em abrir o banco e cadastrar um novo usuário para ele com todas as permissões, por via das dúvidas, mas eu não sei fazer isto.
Primeiro porque o banco está instalado em uma pasta que eu não consigo acessar pelo PHPMyAdmin. Segundo porque eu já tentei fazer rodar um segundo PhpMyAdmin, do segundo MySQL e não consegui, pois tem o papo de htpp://localhost:3307, etc, eu não funciona.
Já mexi em muita coisa, alterei o arquivo config para o caminho do BD, entro pelo servidor, digito http://localhost..... e não vai de jeito nenhum.
Como eu posso criar um um usuário com senha e aceso irrestrito neste BD?
Eu fiz uma cópia do BD para a pasta que o PHPMyAdmin acessa (original instalado no Plesk) e consegui ver o conteúdo do BD. Pensei em criar o usuário neste BD e depois copiá-lo para o lugar de origem, mas não sei se isto pode causar algum problema.
Ainda assim tenho a dúvida, será que é erro de login, senha, ou é porque este BD não foi configurado para ser acessado pela WEB, mesmo que em localhost por script? Tem como saber isto, para trabalhar pelo menos por exclusão?
Valeu mesmo!
psillus




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq