# User kann nicht in DB schreiben



## jarus (6. März 2005)

Hallo liebe tutorials Gemeinde

Ich bin das erstemal in diesem Forum und hoffe, von jemanden Hilfe für mein Problem zu bekommen.

Ich habe meinen Provider gewechselt, neu ist meine Website auf einem Linux Server drauf. Seit dem Wechsel funktioniert eine Funktion nicht mehr:

Ich habe das 4images Gallerie System wo der Kunde seine Rechnungsadresse eingeben kann. Diese Angaben sollten von diesem PHP Script in die Datenbank (mysql) geschrieben und von dort wieder auf eine Auftragsbestätigung geschrieben werden. Die Rechte für die entsprechenden Daten und Ordner unter "httpdocs" sind alle auf chmod 777 gesetzt. Das Script und die DB sind korrekt programmiert das habe ich x-mal geprüft. Kann es sein, dass noch weitere Ordner und Dateien (solche die nicht unter httpdocs sind) mit entsprechenden Rechten zu versehen sind?

Ich würde mich sehr über eine Antwort freuen.


----------



## Julian Maicher (6. März 2005)

Hi und willkommen hier im Forum.
Die Dateien der mysql Datenbanken befinden sich i.d.R. nicht in httpdocs. D.h. du musst den entsprechenden Pfad suchen, da er von Distribution und Installation unterschiedlich sein kann.
Ich vermute mal einfach, dass der Pfad folgender ist: /var/mysql/data
Wenn nicht, dann mit locate Datenbankname (ggf. vorher updatedb) die Dateien für die Datenbanken suchen.


----------



## VariableWorm (6. März 2005)

Ich gehe mal davon aus, dass du nicht die DATA-Files von MySQL bearbeitest, sondern die php-funktionen dafuer benutzt... deshalb glaube ich nicht, dass verzeichnisberechtigungen die ursache deine problems sind.


----------



## jarus (7. März 2005)

@ suye und @Variableworm 
Hallo Leute

Zunächst vielen Dank für die Antworten. Ich bin auch nun davon auch überzeugt dass es nicht wegen den Verzeichnisberechtigungen ist, dass die Funktion nicht . Hier habe ich mal snippets vom Code:

warenkorb_kunde.php

$templates_used = 'warenkorb_kunde,thumbnail_bit';
$main_template = 'warenkorb_kunde';

define('GET_CACHES', 1);
define('ROOT_PATH', './');
include(ROOT_PATH.'global.php');
require(ROOT_PATH.'includes/sessions.php');
$user_access = get_permission();
include(ROOT_PATH.'includes/page_header.php');
if ($user_info['user_level'] == GUEST || $user_info['user_level'] == USER_AWAITING) {
  show_error_page($lang['warenkorb_register']);
}
$kunde_info = array();
$neuer_kunde = array();
$kunden_update = array();
if ($user_id != GUEST) {
      $sql = "SELECT *
              FROM 4images_kunden
              WHERE kunde_id = ".$user_info['user_id'];
      $kunde_info = $site_db->query_firstrow($sql);

sessions.php


//-----------------------------------------------------
//--- Start Configuration -----------------------------
//-----------------------------------------------------
define('SESSION_NAME', 'sessionid');

global.php
if (!defined('ROOT_PATH')) {
  die("Security violation");
}
//error_reporting(E_ERROR | E_WARNING | E_PARSE);
//error_reporting(E_ALL);
set_magic_quotes_runtime(0);
$start_time = microtime();
function addslashes_array($array) {
  foreach ($array as $key => $val) {
    $array[$key] = (is_array($val)) ? addslashes_array($val) : addslashes($val);
  }
  return $array;
}
if (!isset($HTTP_GET_VARS)) {
  $HTTP_GET_VARS    = &$_GET;
  $HTTP_POST_VARS   = &$_POST;
  $HTTP_COOKIE_VARS = &$_COOKIE;
  $HTTP_POST_FILES  = &$_FILES;
  $HTTP_SERVER_VARS = &$_SERVER;
  $HTTP_ENV_VARS    = &$_ENV;
}
if (get_magic_quotes_gpc() == 0) {
  $HTTP_GET_VARS    = addslashes_array($HTTP_GET_VARS);
  $HTTP_POST_VARS   = addslashes_array($HTTP_POST_VARS);
  $HTTP_COOKIE_VARS = addslashes_array($HTTP_COOKIE_VARS);

Ich vermute, dass man Serverseitig etwas einstellen muss um diese Funktion ausführen zu dürfen zumal die php Seiten richtig programmiert sind. Es sollte vermutlich so etwas wie eine temporäre Berechtigung sein. Nur weiss ich nicht, wie und wo ich diese einstellen kann. Ich bin bei php und mysql ein absolutes Greenhorn. Any suggestions?


----------



## xloouch (7. März 2005)

Mal so ne kleine Frage nebenbei.. 

Wo erstellst du die verbindung zu der Datenbank?

Dass hast du früher ja auch via einem mysql_connect gemacht. Bist du sicher, dass du überhaupt verbunden bist mit deiner DB


----------



## jarus (7. März 2005)

Hallo Xloouch

 Hmm, eine interessante Frage. Das habe ich noch gar nicht berücksichtigt. Aber gut, ich habe mal nachgeguckt und die Verbindung erstelle ich mit folgendem Script:

 if (!defined('ROOT_PATH')) {
   die("Security violation");
 }

 class Db {
   var $no_error = 0;
   var $connection;
   var $query_id = 0;
   var $query_count = 0;
   var $query_time = 0;
   var $query_array = array();
   var $table_fields = array();

   function Db($db_host, $db_user, $db_password = "", $db_name = "", $db_pconnect = 0) {
     $connect_handle = ($db_pconnect) ? "mysql_pconnect" : "mysql_connect";
     if (!$this->connection = $connect_handle($db_host, $db_user, $db_password)) {
       $this->error("Could not connect to the database server ($db_host, $db_user).", 1);
     }
     if ($db_name != "") {
       if (!@mysql_select_db($db_name)) {
         @mysql_close($this->connection);
         $this->error("Could not select database ($db_name).", 1);
       }
     }
     return $this->connection;
   }

   function close() {
     if ($this->connection) {
       if ($this->query_id) {
         @mysql_free_result($this->query_id);
       }
       return @mysql_close($this->connection);
     }
     else {
       return false;
     }
   }

   function query($query = "") {
     unset($this->query_id);
     if ($query != "") {
       if ((defined("PRINT_QUERIES") && PRINT_QUERIES == 1) || (defined("PRINT_STATS") && PRINT_STATS == 1)) {
         $startsqltime = explode(" ", microtime());
       }
       if (!$this->query_id = @mysql_query($query, $this->connection)) {
         $this->error("<b>Bad SQL Query</b>: ".htmlentities($query)."<br /><b>".mysql_error()."</b>");
       }
       if ((defined("PRINT_QUERIES") && PRINT_QUERIES == 1) || (defined("PRINT_STATS") && PRINT_STATS == 1)) {
         $endsqltime = explode(" ", microtime());
         $totalsqltime = round($endsqltime[0]-$startsqltime[0]+$endsqltime[1]-$startsqltime[1],3);
         $this->query_time += $totalsqltime;
         $this->query_count++;
       }
       if (defined("PRINT_QUERIES") && PRINT_QUERIES == 1) {
         $query_stats = htmlentities($query);
         $query_stats .= "<br><b>Querytime:</b> ".$totalsqltime;
         $this->query_array[] = $query_stats;
       }
       return $this->query_id;
     }
   }

   function fetch_array($query_id = -1, $assoc = 0) {
     if ($query_id != -1) {
       $this->query_id = $query_id;
     }
     if ($this->query_id) {
       return ($assoc) ? mysql_fetch_assoc($this->query_id) : mysql_fetch_array($this->query_id);
     }
   }

   function free_result($query_id = -1) {
     if ($query_id != -1) {
       $this->query_id = $query_id;
     }
     return @mysql_free_result($this->query_id);
   }

   function query_firstrow($query = "") {
     if ($query != "") {
       $this->query($query);
     }
     $result = $this->fetch_array($this->query_id);
     $this->free_result();
     return $result;
   }

   function get_numrows($query_id = -1) {
     if ($query_id != -1) {
       $this->query_id = $query_id;
     }
     return mysql_num_rows($this->query_id);
   }

   function get_insert_id() {
     return ($this->connection) ? @mysql_insert_id($this->connection) : 0;
   }

   function get_next_id($column = "", $table = "") {
     if (!empty($column) && !empty($table)) {
       $sql = "SELECT MAX($column) AS max_id
               FROM $table";
       $row = $this->query_firstrow($sql);
       return (($row['max_id'] + 1) > 0) ? $row['max_id'] + 1 : 1;
     }
     else {
       return NULL;
     }
   }

   function get_numfields($query_id = -1) {
     if ($query_id != -1) {
       $this->query_id = $query_id;
     }
     return @mysql_num_fields($this->query_id);
   }

   function get_fieldname($query_id = -1, $offset) {
     if ($query_id != -1) {
       $this->query_id = $query_id;
     }
     return @mysql_field_name($this->query_id, $offset);
   }

   function get_fieldtype($query_id = -1, $offset) {
     if ($query_id != -1) {
       $this->query_id = $query_id;
     }
     return @mysql_field_type($this->query_id, $offset);
   }

   function affected_rows() {
     return ($this->connection) ? @mysql_affected_rows($this->connection) : 0;
   }

   function is_empty($query = "") {
     if ($query != "") {
       $this->query($query);
     }
     return (!mysql_num_rows($this->query_id)) ? 1 : 0;
   }

   function not_empty($query = "") {
     if ($query != "") {
       $this->query($query);
     }
     return (!mysql_num_rows($this->query_id)) ? 0 : 1;
   }

   function get_table_fields($table) {
     if (!empty($this->table_fields[$table])) {
       return $this->table_fields[$table];
     }
     $this->table_fields[$table] = array();
     $result = $this->query("SHOW FIELDS FROM $table");
     while ($row = $this->fetch_array($result)) {
       $this->table_fields[$table][$row['Field']] = $row['Type'];
     }
     return $this->table_fields[$table];
   }

   function error($errmsg, $halt = 0) {
     if (!$this->no_error) {
       echo "<br /><font color='#FF0000'><b>DB Error</b></font>: ".$errmsg."<br />";
       if ($halt) {
         exit;
       }
     }
   }
 } // end of class
 ?>

 Ich kann auf meiner Website http://www.pixxle.com alle Funktionen erledigen was mit Bilder Uploads und der User Registrierung zu tun hat. Nur die Kundenverwaltung (dort wo der Kunde seine Lieferadresse usw.) eingibt  nicht. Das ist alles im Warenkorbplugin definiert. Bei meinem vorherigen Provider hat alles so gut funktioniert darum nehme ich an, dass man etwas am Server schrauben muss?


----------

