Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 13:16 Der er 12 kommentarer og
1 løsning

Postkort script

http://www.michaelb.dk/fugleforum/postkort/sendcard/

Hvorfor virker det ikke? Det virker fint i starten, men når jeg skal sende får jeg følgende fejl:

Database error: cannot use database fugle
MySQL Error: 1044 (Access denied for user: 'michaelb_dk@localhost' to database 'fugle')
Session halted.

Michael
Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 13:23 #1
Sådan ser min setup ud:

------

<?php

// Enter your database details
$dbhost    = "localhost";
$dbdatabase = "michaelb_dk";
$dbuser    = "michaelb_dk";
$dbpass = "*******";

// Choose your database file
$dbfile = "db_mysql.php";

// How long you want the postcard kept for in seconds e.g. 1209600 = 14 days!
// You can work it out using the following formula:
// {num of days} x 24 x 3600 = num of seconds.
// So 21 days is: 21 x 24 x 3600 = 1814400

$kept = 1209600;

// Name of the table the postcards are stored in
$tbl_name = "sendcard";

// If you want to use the feature that allows a visitor to send a card on an advance date, set this variable to 1.  Otherwise, set it to 0.  Remember to remove the "Send the card when?:" message from form.tpl :-)
$use_adv_date = 1;
$use_fontface = 1;
$use_fontcolor = 1;
$use_bgcolor = 1;
$use_music = 1;
$use_stats = 0;
$sc_version = "3.2.0";

$sendcard_http_path = '';
$music_path = "music/";

// Advanced options
// Path to the template directory: either relative to sendcard.php or the full directory path.
$tpl_path = "templates/";
// Path to image directory
$img_path = "images/";
$php_in_tpl = 0;
?>
Avatar billede jensgram Nybegynder
26. juni 2003 - 13:35 #2
Det ser jo ud til, at du prøver at forbinde til databasen "fugle" ...
Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 13:35 #3
Ja, men kan det se ud som om at den database slet ikke findes?
Avatar billede jensgram Nybegynder
26. juni 2003 - 13:38 #4
Ja, det er da meget sandsynligt:

$dbdatabase = "michaelb_dk"; // angiver vidst, at du vil bruge denne db.

Kan du ikke poste db_mysql.php???
Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 13:45 #5
<?php
/*
* Session Management for PHP3
*
* Copyright (c) 1998-2000 NetUSE AG
*                    Boris Erdmann, Kristian Koehntopp
*
* $Id: db_mysql.php,v 1.2 2003/04/02 19:46:04 reywob Exp $
*
*/

class DB_Sql {
 
  /* public: connection parameters */
  var $Host    = "";
  var $Database = "";
  var $User    = "";
  var $Password = "";

  /* public: configuration parameters */
  var $Auto_Free    = 0;    ## Set to 1 for automatic mysql_free_result()
  var $Debug        = 0;    ## Set to 1 for debugging messages.
  var $Halt_On_Error = "yes"; ## "yes" (halt with message), "no" (ignore errors quietly), "report" (ignore errror, but spit a warning)
  var $Seq_Table    = "db_sequence";

  /* public: result array and current row number */
  var $Record  = array();
  var $Row;

  /* public: current error number and error text */
  var $Errno    = 0;
  var $Error    = "";

  /* public: this is an api revision, not a CVS revision. */
  var $type    = "mysql";
  var $revision = "1.2";

  /* private: link and query handles */
  var $Link_ID  = 0;
  var $Query_ID = 0;
 


  /* public: constructor */
  function DB_Sql($query = "") {
      $this->query($query);
  }

  /* public: some trivial reporting */
  function link_id() {
    return $this->Link_ID;
  }

  function query_id() {
    return $this->Query_ID;
  }

  /* public: connection management */
  function connect($Database = "", $Host = "", $User = "", $Password = "") {
    /* Handle defaults */
    if ("" == $Database)
      $Database = $this->Database;
    if ("" == $Host)
      $Host    = $this->Host;
    if ("" == $User)
      $User    = $this->User;
    if ("" == $Password)
      $Password = $this->Password;
     
    /* establish connection, select database */
    if ( 0 == $this->Link_ID ) {
   
      $this->Link_ID=mysql_connect($Host, $User, $Password);
      if (!$this->Link_ID) {
        $this->halt("connect($Host, $User, \$Password) failed.");
        return 0;
      }

      if (!@mysql_select_db($Database,$this->Link_ID)) {
        $this->halt("cannot use database ".$this->Database);
        return 0;
      }
    }
   
    return $this->Link_ID;
  }

  /* public: discard the query result */
  function free() {
      @mysql_free_result($this->Query_ID);
      $this->Query_ID = 0;
  }

  /* public: perform a query */
  function query($Query_String) {
    /* No empty queries, please, since PHP4 chokes on them. */
    if ($Query_String == "")
      /* The empty query string is passed on from the constructor,
      * when calling the class without a query, e.g. in situations
      * like these: '$db = new DB_Sql_Subclass;'
      */
      return 0;

    if (!$this->connect()) {
      return 0; /* we already complained in connect() about that. */
    };

    # New query, discard previous result.
    if ($this->Query_ID) {
      $this->free();
    }

    if ($this->Debug)
      printf("Debug: query = %s<br>\n", $Query_String);

    $this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
    $this->Row  = 0;
    $this->Errno = mysql_errno();
    $this->Error = mysql_error();
    if (!$this->Query_ID) {
      $this->halt("Invalid SQL: ".$Query_String);
    }

    # Will return nada if it fails. That's fine.
    return $this->Query_ID;
  }

  /* public: walk result set */
  function next_record() {
    if (!$this->Query_ID) {
      $this->halt("next_record called with no query pending.");
      return 0;
    }

    $this->Record = @mysql_fetch_array($this->Query_ID);
    $this->Row  += 1;
    $this->Errno  = mysql_errno();
    $this->Error  = mysql_error();

    $stat = is_array($this->Record);
    if (!$stat && $this->Auto_Free) {
      $this->free();
    }
    return $stat;
  }

  /* public: position in result set */
  function seek($pos = 0) {
    $status = @mysql_data_seek($this->Query_ID, $pos);
    if ($status)
      $this->Row = $pos;
    else {
      $this->halt("seek($pos) failed: result has ".$this->num_rows()." rows");

      /* half assed attempt to save the day,
      * but do not consider this documented or even
      * desireable behaviour.
      */
      @mysql_data_seek($this->Query_ID, $this->num_rows());
      $this->Row = $this->num_rows;
      return 0;
    }

    return 1;
  }

  /* public: table locking */
  function lock($table, $mode="write") {
    $this->connect();
   
    $query="lock tables ";
    if (is_array($table)) {
      while (list($key,$value)=each($table)) {
        if ($key=="read" && $key!=0) {
          $query.="$value read, ";
        } else {
          $query.="$value $mode, ";
        }
      }
      $query=substr($query,0,-2);
    } else {
      $query.="$table $mode";
    }
    $res = @mysql_query($query, $this->Link_ID);
    if (!$res) {
      $this->halt("lock($table, $mode) failed.");
      return 0;
    }
    return $res;
  }
 
  function unlock() {
    $this->connect();

    $res = @mysql_query("unlock tables");
    if (!$res) {
      $this->halt("unlock() failed.");
      return 0;
    }
    return $res;
  }


  /* public: evaluate the result (size, width) */
  function affected_rows() {
    return @mysql_affected_rows($this->Link_ID);
  }

  function num_rows() {
    return @mysql_num_rows($this->Query_ID);
  }

  function num_fields() {
    return @mysql_num_fields($this->Query_ID);
  }

  /* public: shorthand notation */
  function nf() {
    return $this->num_rows();
  }

  function np() {
    print $this->num_rows();
  }

  function f($Name) {
    return $this->Record[$Name];
  }

  function p($Name) {
    print $this->Record[$Name];
  }

  /* public: sequence numbers */
  function nextid($seq_name) {
    $this->connect();
   
    if ($this->lock($this->Seq_Table)) {
      /* get sequence number (locked) and increment */
      $q  = sprintf("select nextid from %s where seq_name = '%s'",
                $this->Seq_Table,
                $seq_name);
      $id  = @mysql_query($q, $this->Link_ID);
      $res = @mysql_fetch_array($id);
     
      /* No current value, make one */
      if (!is_array($res)) {
        $currentid = 0;
        $q = sprintf("insert into %s values('%s', %s)",
                $this->Seq_Table,
                $seq_name,
                $currentid);
        $id = @mysql_query($q, $this->Link_ID);
      } else {
        $currentid = $res["nextid"];
      }
      $nextid = $currentid + 1;
      $q = sprintf("update %s set nextid = '%s' where seq_name = '%s'",
              $this->Seq_Table,
              $nextid,
              $seq_name);
      $id = @mysql_query($q, $this->Link_ID);
      $this->unlock();
    } else {
      $this->halt("cannot lock ".$this->Seq_Table." - has it been created?");
      return 0;
    }
    return $nextid;
  }

  /* public: return table metadata */
  function metadata($table='',$full=false) {
    $count = 0;
    $id    = 0;
    $res  = array();

    /*
    * Due to compatibility problems with Table we changed the behavior
    * of metadata();
    * depending on $full, metadata returns the following values:
    *
    * - full is false (default):
    * $result[]:
    *  [0]["table"]  table name
    *  [0]["name"]  field name
    *  [0]["type"]  field type
    *  [0]["len"]    field length
    *  [0]["flags"]  field flags
    *
    * - full is true
    * $result[]:
    *  ["num_fields"] number of metadata records
    *  [0]["table"]  table name
    *  [0]["name"]  field name
    *  [0]["type"]  field type
    *  [0]["len"]    field length
    *  [0]["flags"]  field flags
    *  ["meta"][field name]  index of field named "field name"
    *  The last one is used, if you have a field name, but no index.
    *  Test:  if (isset($result['meta']['myfield'])) { ...
    */

    // if no $table specified, assume that we are working with a query
    // result
    if ($table) {
      $this->connect();
      $id = @mysql_list_fields($this->Database, $table);
      if (!$id)
        $this->halt("Metadata query failed.");
    } else {
      $id = $this->Query_ID;
      if (!$id)
        $this->halt("No query specified.");
    }

    $count = @mysql_num_fields($id);

    // made this IF due to performance (one if is faster than $count if's)
    if (!$full) {
      for ($i=0; $i<$count; $i++) {
        $res[$i]["table"] = @mysql_field_table ($id, $i);
        $res[$i]["name"]  = @mysql_field_name  ($id, $i);
        $res[$i]["type"]  = @mysql_field_type  ($id, $i);
        $res[$i]["len"]  = @mysql_field_len  ($id, $i);
        $res[$i]["flags"] = @mysql_field_flags ($id, $i);
      }
    } else { // full
      $res["num_fields"]= $count;
   
      for ($i=0; $i<$count; $i++) {
        $res[$i]["table"] = @mysql_field_table ($id, $i);
        $res[$i]["name"]  = @mysql_field_name  ($id, $i);
        $res[$i]["type"]  = @mysql_field_type  ($id, $i);
        $res[$i]["len"]  = @mysql_field_len  ($id, $i);
        $res[$i]["flags"] = @mysql_field_flags ($id, $i);
        $res["meta"][$res[$i]["name"]] = $i;
      }
    }
   
    // free the result only if we were called on a table
    if ($table) @mysql_free_result($id);
    return $res;
  }

  /* private: error handling */
  function halt($msg) {
    $this->Error = @mysql_error($this->Link_ID);
    $this->Errno = @mysql_errno($this->Link_ID);
    if ($this->Halt_On_Error == "no")
      return;

    $this->haltmsg($msg);

    if ($this->Halt_On_Error != "report")
      die("Session halted.");
  }

  function haltmsg($msg) {
    printf("</td></tr></table><b>Database error:</b> %s<br>\n", $msg);
    printf("<b>MySQL Error</b>: %s (%s)<br>\n",
      $this->Errno,
      $this->Error);
  }

  function table_names() {
    $this->query("SHOW TABLES");
    $i=0;
    while ($info=mysql_fetch_row($this->Query_ID))
    {
      $return[$i]["table_name"]= $info[0];
      $return[$i]["tablespace_name"]=$this->Database;
      $return[$i]["database"]=$this->Database;
      $i++;
    }
  return $return;
  }
}
?>
Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 14:04 #6
Når jeg er i phpmyadmin og prøver at oprette databasen "Fugle" får jeg denne fejl:

Database: fugle kører på localhost
Fejl

SQL-forespørgsel : 

CREATE DATABASE `fugle`

MySQL returnerede:


Access denied for user: 'michaelb_dk@localhost' to database 'fugle'
Avatar billede jensgram Nybegynder
26. juni 2003 - 16:27 #7
Er du sikker på, at du må oprette andre databaser. Hos mange ISP'er har man kun én (michaelb_dk)...
Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 16:29 #8
Det ved jeg sku ikke, men hvad hvis jeg ikke må??
Avatar billede jensgram Nybegynder
26. juni 2003 - 16:33 #9
Så må du vel ændre dit script så det benytter din egen db. Jeg kan ikke lige overskue db_mysql.php, men jeg kan da se, at der ikke er "fugle" i den...
Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 18:43 #10
Der er også en admindel hvor man kan sætte den op... :-S Men det synes jeg ikke virker! Hør, hvis jeg sætter pointsummet op (jeg kan desværre ikke tilbyde penge) kunne du så ikke sætte det op for mig!?

Har du MSN? ICQ?
Michael
Avatar billede jensgram Nybegynder
26. juni 2003 - 23:00 #11
Ja, jeg har begge dele, men jeg kan ikke garantere, at jeg kan få det til at virke. Jeg synes du skulle lave et svar, som du accepterer og derved lukker spørgsmålet. Så kan du oprette det igen (hellere i PHP-kategorien), hvor der sikkert er en anden, der kan hjælpe.

Som allerede omtalt kan jeg jo ikke garantere noget, og så kniber det også lidt med tiden.

Håber du får svar.
Avatar billede michaelb.dk Nybegynder
26. juni 2003 - 23:30 #12
Hej! Jeg fandt et andet script som virker udmærket!! :) Men jeg takker for interessen!

Michael
Avatar billede jensgram Nybegynder
27. juni 2003 - 09:37 #13
Godt, så fik du jo "løst" dit problem ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester