install/includes/stages/database_mysql.php
changeset 857 f3a5a276208c
parent 801 eb8b23f11744
child 1022 06debbf8dd75
equal deleted inserted replaced
856:0b7ff06aad13 857:f3a5a276208c
    19 
    19 
    20 if ( isset($_POST['_cont']) )
    20 if ( isset($_POST['_cont']) )
    21 {
    21 {
    22   $allow_go = true;
    22   $allow_go = true;
    23   // Do we have everything? If so, continue with installation.
    23   // Do we have everything? If so, continue with installation.
    24   foreach ( array('db_host', 'db_name', 'db_user', 'db_pass') as $field )
    24   foreach ( array('db_host', 'db_port', 'db_name', 'db_user', 'db_pass') as $field )
    25   {
    25   {
    26     if ( empty($_POST[$field]) )
    26     if ( empty($_POST[$field]) )
    27     {
    27     {
    28       $allow_go = false;
    28       $allow_go = false;
    29     }
    29     }
    71         'mode' => 'error',
    71         'mode' => 'error',
    72         'error' => 'Exception in JSON decoder'
    72         'error' => 'Exception in JSON decoder'
    73       )));
    73       )));
    74   }
    74   }
    75   
    75   
       
    76   if ( preg_match('/^:/', $info['db_host']) && !@file_exists(substr($info['db_host'], 1)) )
       
    77   {
       
    78     $return['host_good'] = false;
       
    79     echo enano_json_encode($return);
       
    80     exit();
       
    81   }
       
    82   
       
    83   if ( $info['db_host'] == 'localhost' && !empty($info['db_port']) && $info['db_port'] != 3306 )
       
    84     $info['db_host'] = '127.0.0.1';
       
    85   
       
    86   $dbhost = ( preg_match('/^:/', $info['db_host']) ) ? $info['db_host'] : "{$info['db_host']}:{$info['db_port']}";
       
    87   
    76   // Try to connect as the normal user
    88   // Try to connect as the normal user
    77   $test = @mysql_connect($info['db_host'], $info['db_user'], $info['db_pass']);
    89   $test = @mysql_connect($dbhost, $info['db_user'], $info['db_pass']);
    78   if ( !$test )
    90   if ( !$test )
    79   {
    91   {
    80     $return['creating_user'] = true;
    92     $return['creating_user'] = true;
    81     $return['last_error'] = mysql_error();
    93     $return['last_error'] = mysql_error();
    82     if ( strstr( $return['last_error'], 'Lost connection' ) || strstr( $return['last_error'], 'Unknown MySQL server host' ) )
    94     if ( strstr( $return['last_error'], 'Lost connection' ) || strstr( $return['last_error'], 'Unknown MySQL server host' ) )
    87     if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
    99     if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
    88     {
   100     {
    89       // Log in with root rights and if that works, tell 'em we'll reset the password or create
   101       // Log in with root rights and if that works, tell 'em we'll reset the password or create
    90       // the account if it doesn't exist already. This is done with GRANT ALL PRIVILEGES ON enano_db.*
   102       // the account if it doesn't exist already. This is done with GRANT ALL PRIVILEGES ON enano_db.*
    91       // etc etc, a little hackish but known to work with MySQL >= 4.1.
   103       // etc etc, a little hackish but known to work with MySQL >= 4.1.
    92       $test_root = @mysql_connect($info['db_host'], $info['db_root_user'], $info['db_root_pass']);
   104       $test_root = @mysql_connect($dbhost, $info['db_root_user'], $info['db_root_pass']);
    93       if ( $test_root )
   105       if ( $test_root )
    94       {
   106       {
    95         // We logged in with root rights, assume that we have appropriate permissions.
   107         // We logged in with root rights, assume that we have appropriate permissions.
    96         // If not, well, the installation will fail. Tough on the user, but creating
   108         // If not, well, the installation will fail. Tough on the user, but creating
    97         // test databases/users is too risky.
   109         // test databases/users is too risky.
   150       // We don't have permission to use the database or it doesn't exist.
   162       // We don't have permission to use the database or it doesn't exist.
   151       // See if we have a root login to work with, if not then fail
   163       // See if we have a root login to work with, if not then fail
   152       if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
   164       if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
   153       {
   165       {
   154         // Log in with root rights and if that works, tell 'em we'll create the database.
   166         // Log in with root rights and if that works, tell 'em we'll create the database.
   155         $test_root = @mysql_connect($info['db_host'], $info['db_root_user'], $info['db_root_pass']);
   167         $test_root = @mysql_connect($dbhost, $info['db_root_user'], $info['db_root_pass']);
   156         if ( $test_root )
   168         if ( $test_root )
   157         {
   169         {
   158           // We logged in with root rights, assume that we have appropriate permissions.
   170           // We logged in with root rights, assume that we have appropriate permissions.
   159           // If not, well, the installation will fail. Tough on the user, but creating
   171           // If not, well, the installation will fail. Tough on the user, but creating
   160           // test databases/users is too risky.
   172           // test databases/users is too risky.
   238     }
   250     }
   239     var frm = document.forms.database_info;
   251     var frm = document.forms.database_info;
   240     // List of fields
   252     // List of fields
   241     var fields = {
   253     var fields = {
   242       db_host: frm.db_host,
   254       db_host: frm.db_host,
       
   255       db_port: frm.db_port,
   243       db_name: frm.db_name,
   256       db_name: frm.db_name,
   244       db_user: frm.db_user,
   257       db_user: frm.db_user,
   245       db_pass: frm.db_pass,
   258       db_pass: frm.db_pass,
   246       table_prefix: frm.table_prefix,
   259       table_prefix: frm.table_prefix,
   247       db_root_user: frm.db_root_user,
   260       db_root_user: frm.db_root_user,
   249     };
   262     };
   250     var passed = true;
   263     var passed = true;
   251     // Main validation
   264     // Main validation
   252     if ( field == fields.db_host || !field )
   265     if ( field == fields.db_host || !field )
   253     {
   266     {
   254       var matches = fields.db_host.value.match(/^([a-z0-9_-]+)((\.([a-z0-9_-]+))*)?$/);
   267       var matches = fields.db_host.value.match(/^(([a-z0-9_-]+)((\.([a-z0-9_-]+))*)|:[A-z0-9_:\.\/-]+)$/);
   255       document.getElementById('s_db_host').src = ( matches ) ? img_neu : img_bad;
   268       document.getElementById('s_db_host').src = ( matches ) ? img_neu : img_bad;
       
   269       if ( !matches )
       
   270         passed = false;
       
   271     }
       
   272     if ( field == fields.db_port || !field )
       
   273     {
       
   274       var matches = fields.db_port.value.match(/^[0-9]+$/);
       
   275       document.getElementById('s_db_port').src = ( matches ) ? img_neu : img_bad;
   256       if ( !matches )
   276       if ( !matches )
   257         passed = false;
   277         passed = false;
   258     }
   278     }
   259     if ( field == fields.db_name || !field )
   279     if ( field == fields.db_name || !field )
   260     {
   280     {
   300     install_set_ajax_loading();
   320     install_set_ajax_loading();
   301     
   321     
   302     var frm = document.forms.database_info;
   322     var frm = document.forms.database_info;
   303     var connection_info = 'info=' + ajaxEscape(toJSONString({
   323     var connection_info = 'info=' + ajaxEscape(toJSONString({
   304         db_host: frm.db_host.value,
   324         db_host: frm.db_host.value,
       
   325         db_port: frm.db_port.value,
   305         db_name: frm.db_name.value,
   326         db_name: frm.db_name.value,
   306         db_user: frm.db_user.value,
   327         db_user: frm.db_user.value,
   307         db_pass: frm.db_pass.value,
   328         db_pass: frm.db_pass.value,
   308         db_root_user: frm.db_root_user.value,
   329         db_root_user: frm.db_root_user.value,
   309         db_root_pass: frm.db_root_pass.value
   330         db_root_pass: frm.db_root_pass.value
   400       <img id="s_db_host" alt="Good/bad icon" src="../images/checkbad.png" />
   421       <img id="s_db_host" alt="Good/bad icon" src="../images/checkbad.png" />
   401     </td>
   422     </td>
   402   </tr>
   423   </tr>
   403   <tr>
   424   <tr>
   404     <td>
   425     <td>
       
   426       <b><?php echo $lang->get('dbmysql_field_port_title'); ?></b>
       
   427       <br /><?php echo $lang->get('dbmysql_field_port_body'); ?>
       
   428       <br /><span style="color: #993300" id="e_db_port"></span>
       
   429     </td>
       
   430     <td>
       
   431       <input onkeyup="verify(this);" tabindex="2" name="db_port" size="5" type="text" value="3306" />
       
   432     </td>
       
   433     <td>
       
   434       <img id="s_db_port" alt="Good/bad icon" src="../images/checkbad.png" />
       
   435     </td>
       
   436   </tr>
       
   437   <tr>
       
   438     <td>
   405       <b><?php echo $lang->get('dbmysql_field_dbname_title'); ?></b><br />
   439       <b><?php echo $lang->get('dbmysql_field_dbname_title'); ?></b><br />
   406       <?php echo $lang->get('dbmysql_field_dbname_body'); ?><br />
   440       <?php echo $lang->get('dbmysql_field_dbname_body'); ?><br />
   407       <span style="color: #993300" id="e_db_name"></span>
   441       <span style="color: #993300" id="e_db_name"></span>
   408     </td>
   442     </td>
   409     <td>
   443     <td>
   410       <input onkeyup="verify(this);" tabindex="2" name="db_name" size="30" type="text" />
   444       <input onkeyup="verify(this);" tabindex="3" name="db_name" size="30" type="text" />
   411     </td>
   445     </td>
   412     <td>
   446     <td>
   413       <img id="s_db_name" alt="Good/bad icon" src="../images/checkbad.png" />
   447       <img id="s_db_name" alt="Good/bad icon" src="../images/checkbad.png" />
   414     </td>
   448     </td>
   415   </tr>
   449   </tr>
   418       <b><?php echo $lang->get('dbmysql_field_dbauth_title'); ?></b><br />
   452       <b><?php echo $lang->get('dbmysql_field_dbauth_title'); ?></b><br />
   419       <?php echo $lang->get('dbmysql_field_dbauth_body'); ?><br />
   453       <?php echo $lang->get('dbmysql_field_dbauth_body'); ?><br />
   420       <span style="color: #993300" id="e_db_auth"></span>
   454       <span style="color: #993300" id="e_db_auth"></span>
   421     </td>
   455     </td>
   422     <td>
   456     <td>
   423       <input onkeyup="verify(this);" tabindex="3" name="db_user" size="30" type="text" /><br />
   457       <input onkeyup="verify(this);" tabindex="4" name="db_user" size="30" type="text" /><br />
   424       <br />
   458       <br />
   425       <input name="db_pass" tabindex="4" size="30" type="password" />
   459       <input name="db_pass" tabindex="5" size="30" type="password" />
   426     </td>
   460     </td>
   427     <td>
   461     <td>
   428       <img id="s_db_auth" alt="Good/bad icon" src="../images/checkbad.png" />
   462       <img id="s_db_auth" alt="Good/bad icon" src="../images/checkbad.png" />
   429     </td>
   463     </td>
   430   </tr>
   464   </tr>
   437     <td>
   471     <td>
   438       <b><?php echo $lang->get('dbmysql_field_tableprefix_title'); ?></b><br />
   472       <b><?php echo $lang->get('dbmysql_field_tableprefix_title'); ?></b><br />
   439       <?php echo $lang->get('dbmysql_field_tableprefix_body'); ?>
   473       <?php echo $lang->get('dbmysql_field_tableprefix_body'); ?>
   440     </td>
   474     </td>
   441     <td>
   475     <td>
   442       <input onkeyup="verify(this);" tabindex="5" name="table_prefix" size="30" type="text" />
   476       <input onkeyup="verify(this);" tabindex="6" name="table_prefix" size="30" type="text" />
   443     </td>
   477     </td>
   444     <td>
   478     <td>
   445       <img id="s_table_prefix" alt="Good/bad icon" src="../images/check.png" />
   479       <img id="s_table_prefix" alt="Good/bad icon" src="../images/check.png" />
   446     </td>
   480     </td>
   447   </tr>
   481   </tr>
   450       <b><?php echo $lang->get('dbmysql_field_rootauth_title'); ?></b><br />
   484       <b><?php echo $lang->get('dbmysql_field_rootauth_title'); ?></b><br />
   451       <?php echo $lang->get('dbmysql_field_rootauth_body'); ?><br />
   485       <?php echo $lang->get('dbmysql_field_rootauth_body'); ?><br />
   452       <span style="color: #993300" id="e_db_root"></span>
   486       <span style="color: #993300" id="e_db_root"></span>
   453     </td>
   487     </td>
   454     <td>
   488     <td>
   455       <input onkeyup="verify(this);" tabindex="6" name="db_root_user" size="30" type="text" /><br />
   489       <input onkeyup="verify(this);" tabindex="7" name="db_root_user" size="30" type="text" /><br />
   456       <br />
   490       <br />
   457       <input onkeyup="verify(this);" tabindex="7" name="db_root_pass" size="30" type="password" />
   491       <input onkeyup="verify(this);" tabindex="8" name="db_root_pass" size="30" type="password" />
   458     </td>
   492     </td>
   459     <td>
   493     <td>
   460       <img id="s_db_root" alt="Good/bad icon" src="../images/check.png" />
   494       <img id="s_db_root" alt="Good/bad icon" src="../images/check.png" />
   461     </td>
   495     </td>
   462   </tr>
   496   </tr>
   475     <td>
   509     <td>
   476       <b><?php echo $lang->get('dbmysql_field_droptables_title'); ?></b><br />
   510       <b><?php echo $lang->get('dbmysql_field_droptables_title'); ?></b><br />
   477       <?php echo $lang->get('dbmysql_field_droptables_body'); ?>
   511       <?php echo $lang->get('dbmysql_field_droptables_body'); ?>
   478     </td>
   512     </td>
   479     <td colspan="2">
   513     <td colspan="2">
   480       <input type="checkbox" tabindex="8" name="drop_tables" id="dtcheck" />  <label for="dtcheck"><?php echo $lang->get('dbmysql_field_droptables_lbl'); ?></label>
   514       <input type="checkbox" tabindex="9" name="drop_tables" id="dtcheck" />  <label for="dtcheck"><?php echo $lang->get('dbmysql_field_droptables_lbl'); ?></label>
   481     </td>
   515     </td>
   482   </tr>
   516   </tr>
   483   <tr>
   517   <tr>
   484     <td colspan="3" style="text-align: center">
   518     <td colspan="3" style="text-align: center">
   485       <input type="button" tabindex="9" value="<?php echo $lang->get('dbmysql_btn_testconnection'); ?>" onclick="ajaxTestConnection();" />
   519       <input type="button" tabindex="10" value="<?php echo $lang->get('dbmysql_btn_testconnection'); ?>" onclick="ajaxTestConnection();" />
   486       <div id="verify_error"></div>
   520       <div id="verify_error"></div>
   487     </td>
   521     </td>
   488   </tr>
   522   </tr>
   489 
   523 
   490 </table>
   524 </table>
   491 
   525 
   492 <table border="0">
   526 <table border="0">
   493   <tr>
   527   <tr>
   494     <td>
   528     <td>
   495       <input type="submit" tabindex="10" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
   529       <input type="submit" tabindex="11" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
   496     </td>
   530     </td>
   497     <td>
   531     <td>
   498       <p>
   532       <p>
   499         <span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
   533         <span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
   500         &bull; <?php echo $lang->get('database_objective_test'); ?><br />
   534         &bull; <?php echo $lang->get('database_objective_test'); ?><br />