[Gelöst] XML Directory

MIB

Neuer User
Mitglied seit
9 Mrz 2012
Beiträge
151
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich würde gerne das XML Directory (http://thelastinstance.de/soft/php/project13.phtml) mit meinem 7961g benutzen.

Wenn ich die jedoch die Datei "http://localhost/directory/index.php" aufrufe, bekomme ich den Fehler angezeigt:
Code:
Notice: Undefined index: action in C:\xampp\htdocs\directory\index.php on line 16

Gehe ich auf "login" bekomme ich folgende Meldungen:

Code:
Notice: Undefined variable: database_server in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database_user in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database_pawd in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database in C:\xampp\htdocs\directory\baseFunction.inc.php on line 12
Konnte Datenbank nicht selektieren

Kann mir jemand helfen, das Telefonbuch zum Laufen zu Bringen?

Danke


EDIT:

Für alle Interessierten: Im Anhang findet ihr die Daten, die im Laufe dieser Diskussion "erarbeitet" worden (Danke an koyaanisqatsi). Mit diesen Daten lief das Projekt am Ende bei mir.
 

Anhänge

  • directory.zip
    160.8 KB · Aufrufe: 14
Zuletzt bearbeitet:
Moins

Die Fehlermeldungen beinhalten eine Zeilennummer in der der Fehler aufgetreten ist.
...deswegen stellen sich mir drei Fragen...

1. Was steht in: C:\xampp\htdocs\directory\index.php in Zeile 16 ?
2. Was steht in: C:\xampp\htdocs\directory\baseFunction.inc.php in Zeile 11 ?
3. Was steht in: C:\xampp\htdocs\directory\baseFunction.inc.php in Zeile 12 ?

Wenn du dir die Benutzerkommentare auf der Seite deines geposteten Links anschaust,
fällt auf, dass der Entwickler seit dieser Frage...
Kommentare: schrieb:
Rick am 03.01.2014 - 02:57Hi, wollte fragen, ob es möglich ist eine aktuelle Version zu bekommen?
Das Problem ist, dass TYPE=MyISAM in der neuen Version von SQL nicht mehr unterstützt wird.
Ändert man es zu ENGINE=MYISAM bekomme ich

Undefined variable: database_server in baseFunction.inc.php on line 11

Undefined variable: database_user in baseFunction.inc.php on line 11

Undefined variable: database_pawd in baseFunction.inc.php on line 11

Undefined variable: database in baseFunction.inc.php on line 12

und damit "Konnte Datenbank nicht selektieren"

Wäre super. Bereits jetzt ein Danke dafür
...nicht mehr geantwortet hat.
 
Zuletzt bearbeitet:
Hi,

ich weiß, dass der Entwickler nicht mehr geantwortet hat, daher habe ich mich an dieses Forum gewendet, da es hier vielleicht Leute gibt, die dieses Telefonbuch verwenden und das gleiche Problem hatten, es aber beheben konnten.

1. Was steht in: C:\xampp\htdocs\directory\index.php in Zeile 16 ?
if ($_POST['action'] == "login") {

2. Was steht in: C:\xampp\htdocs\directory\baseFunction.inc.php in Zeile 11 ?

mysql_connect($database_server,$database_user,$database_pawd) or die($noconnect);

3. Was steht in: C:\xampp\htdocs\directory\baseFunction.inc.php in Zeile 12 ?

mysql_select_db($database) or die ($notfound);


Zu 1:

Ich habe keinen Login-Daten eingeben, weil das nicht funktioniert.

Zu 2 und zu 3:

Wenn ich versuche die SQL einzulesen (XAMPP), dann bekomme ich

Code:
Fehler
SQL-Befehl:

CREATE TABLE `directory_entries` (
  `entry_id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `lastname` varchar(255) NOT NULL default '',
  KEY `entry_key` (`entry_id`)
) TYPE=MyISAM;
MySQL meldet: Dokumentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 7
 
Nun denn....

Als erstes, solltest du in den PHP Skripten alle vorkommen von...
TYPE=MyISAM
...in...
ENGINE=MYISAM
...suchen/ersetzen*.
Quelle


...dann schauen wir uns die nächsten Fehlermeldungen** an.



* Auch beim SQL: CREATE
Code:
CREATE TABLE `directory_entries` (
   `entry_id` int(11) NOT NULL auto_increment,
   `user_id` int(11) NOT NULL default '0',
   `name` varchar(255) NOT NULL default '',
   `lastname` varchar(255) NOT NULL default '',
   KEY `entry_key` (`entry_id`) 
)
 [COLOR=#ff0000][B]ENGINE=MyISAM;[/B][/COLOR]
...weil die ja mit TYPE=MyISAM erst garnicht erstellt wurde.
Und wenn doch, lösche sie, dann neuanlegen.

Also erst richtig anlegen, und zweist, danach darauf zugreifen. ;)


** Weil Rick am 03.01.2014 danach noch ein Problem mit dem Datenbanköffnen hatte.
...könnte aber sein, dass es das schon war.
 
Zuletzt bearbeitet:
Hallo und Danke für Deine Antworten.

In den PHP-Dateien habe ich keine Einträge gefunden, nur in der SQL-Datei. Die habe ich entsprechend geändert. Importiere ich nun die SQL, kommt die Meldung:

Code:
 Der Import wurde erfolgreich abgeschlossen, 12 Abfragen wurden ausgeführt. (SQL)
CREATE DATABASE `xml_directory`;# 1 Datensatz betroffen.

USE xml_directory;# MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze).



CREATE TABLE `directory_entries` (
`entry_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`lastname` varchar(255) NOT NULL default '',
KEY `entry_key` (`entry_id`)
) ENGINE=MYISAM;# MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze).



CREATE TABLE `directory_numbers` (
`number_id` int(11) NOT NULL auto_increment,
`type_id` int(11) NOT NULL default '0',
`entry_id` int(11) NOT NULL default '0',
`number` varchar(255) NOT NULL default '',
KEY `entry_key` (`number_id`)
) ENGINE=MYISAM;# MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze).



CREATE TABLE `directory_phones` (
`phone_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`name` varchar(15) NOT NULL default '',
KEY `phone_key` (`p[...]

Danach hat die Datenbank aber einen Inhalt

Rufe ich nun die index.php auf, dann heißt es

Code:
Notice: Undefined index: action in C:\xampp\htdocs\directory\index.php on line 16

Dort steht

Code:
  if ($_POST['action'] == "login")  {

Drücke ich dann auf Login (ohne Daten oder mit, ist egal), kommt

Code:
Notice: Undefined variable: database_server in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database_user in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database_pawd in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database in C:\xampp\htdocs\directory\baseFunction.inc.php on line 12
Konnte Datenbank nicht selektieren
 
Naja, bei MySQL muss die Datenbank angegeben, eingeloggt um das entsprechende "Handle" zu bekommen.
Sowas wird normalerweise durch ein "include", "require" oder "require_once" erledigt.

Beispiel:
db.php (wird inkludiert, liefert Datenbankhandle)
PHP:
<?php
$autor="koyaanisqatsi";
mysql_connect('localhost', 'news', '12345');
mysql_select_db('news');
?>

edit.php (inkludiert db.php und arbeitet anschliessend mit den Tabellen der Datenbank news)
PHP:
<?php
$thisPage="edit.php";
include ("db.php");
require ("counter.php");
require ("userlog.php");
require ("header.php");
if(isset($_REQUEST["nid"])){
$nid=$_REQUEST["nid"];
echo "<div class=\"neuigkeit\"><h2>Nachricht bearbeiten:</h2><hr />";
$archiv =  mysql_query("select * from nachrichten WHERE Kennung= '$nid' ");
$arch = mysql_fetch_row($archiv);
$abild =  mysql_query("select * from bilder WHERE Kennung= '$nid' "); //anfang bild
$bdaten = mysql_fetch_row($abild);
$abild="<div class=\"abildliste\">
<p>
<a href=\"display.php?nid=$nid\"><img width=\"120px\" alt=\"$bdaten[3]\" src=\"img/thmb/$bdaten[0]\" /></a>
<br />
$bdaten[6]
</p>
</div>"; // ende bild
echo $abild;
echo "<h2>$arch[2]: $arch[3] </h2>"; 
echo "<p class=\"weiter\">Autor: $arch[1]</p><br />
<p class=\"weiter\">Anrei&szlig;er: $arch[4]</p><br />
<a class=\"weiter\" href=\"display.php?nid=$nid\"> Weiter</a></div>";
}
require ("footer.php");
?>
Wie wird das bei deinen PHP Skripten gemacht?
 
Zuletzt bearbeitet:
In der baseFunction.inc.php heißt es

Code:
function connect_db()
{
  include('config.inc.php');

  $noconnect = "Die Verbindung konnte nicht aufgebaut werden";
  $notfound = "Konnte Datenbank nicht selektieren";
  mysql_connect($database_server,$database_user,$database_pawd) or die($noconnect);
  mysql_select_db($database) or die ($notfound);
}

und die config.inc.php

Code:
<?
  $database_server  = "127.0.0.1";
  $database_user    = "admin";
  $database_pawd    = "admin";
  $database         = "xml_directory";
  $DirAbsoluteUri   = "localhost/directory/";
  $AvoidPhoneBug    = TRUE;
  $fallbacklanguage = 1;   // 1=de, 2=en
?>

Weiter heißt es

Code:
function safe_query($query)
{
  global $query_debug;
  if (empty($query)) { return FALSE; }
  if (!empty($query_debug)) { print "<pre>$query</pre>\n"; }
  $result = mysql_query($query)
  or die("ack! query failed: "
  ."<li>errorno=".mysql_errno()
  ."<li>error=".mysql_error()
  ."<li>query=".$query
  );
  return $result;
}


function load_lang($phonename)
{
  include('config.inc.php');

  $query  = "SELECT language";
  $query .= "FROM directory_user, directory_phones";
  $query .= "WHERE directory_user.user_id = directory_phones.user_id";
  $query .= "AND directory_phones.name = '$phonename'";

  connect_db();  // connect to the DB
  $result = safe_query($query);
  if($result) $row = mysql_fetch_array($result, MYSQL_ASSOC);

  if(empty($row['language'])) $row['language'] = $fallbacklanguage;

  // Lade das Sprachenregister
  require ('lang/register.inc.php');
  require "lang/".$register['file'][$row['language']];
  return $xmlang;
 
Zuletzt bearbeitet:
Hier hamwas doch...
config.inc.php
PHP:
<?
   $database_server  = "127.0.0.1";
   $database_user    = "admin";
   $database_pawd    = "admin";
   $database         = "xml_directory";
   $DirAbsoluteUri   = "localhost/directory/";
   $AvoidPhoneBug    = TRUE;
   $fallbacklanguage = 1; // 1=de, 2=en
 ?>
1. Erstelle mit PHPMyAdmin eine Datenbank: xml_directory
2. Dieser gibst du alle Rechte für: admin (Benutzer ggbf. erstellen)
3. Diesem gibst du das Passwort: admin
4. Wenn getan, testen und weiter gehts....
 
Zuletzt bearbeitet:
Hierfür gibt es die SQL-Datei

PHP:
CREATE DATABASE `xml_directory`;
USE xml_directory;


CREATE TABLE `directory_entries` (
  `entry_id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `lastname` varchar(255) NOT NULL default '',
  KEY `entry_key` (`entry_id`)
) ENGINE=MYISAM;


CREATE TABLE `directory_numbers` (
  `number_id` int(11) NOT NULL auto_increment,
  `type_id` int(11) NOT NULL default '0',
  `entry_id` int(11) NOT NULL default '0',
  `number` varchar(255) NOT NULL default '',
  KEY `entry_key` (`number_id`)
) ENGINE=MYISAM;


CREATE TABLE `directory_phones` (
  `phone_id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `name` varchar(15) NOT NULL default '',
  KEY `phone_key` (`phone_id`)
) ENGINE=MYISAM;


CREATE TABLE `directory_types` (
  `type_id` int(11) NOT NULL auto_increment,
  `type` varchar(20) NOT NULL default '',
  KEY `phone_key` (`type_id`)
) ENGINE=MYISAM;



CREATE TABLE `directory_user` (
  `user_id` int(11) NOT NULL auto_increment,
  `username` varchar(50) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `language` int(11) NOT NULL default '1',
  KEY `user_key` (`user_id`)
) ENGINE=MYISAM;

INSERT INTO `directory_user` ( `user_id` , `username` , `password` , `language` ) VALUES ( 1, 'admin', password( 'admin' ) , 1 );

INSERT INTO `directory_types` (`type_id`, `type`) VALUES (1, 'Privat');
INSERT INTO `directory_types` (`type_id`, `type`) VALUES (2, 'Arbeit');
INSERT INTO `directory_types` (`type_id`, `type`) VALUES (3, 'Mobil');
INSERT INTO `directory_types` (`type_id`, `type`) VALUES (4, 'VoIP');


Diese Datei habe ich über phpMyAdmin "importiert" Das Ergebnis habe ich oben gepostet

Der User admin wird mit dem PW admin erstellt.

Damit ist doch die Datenbank erstellt oder nicht?
 
Jain, wenn dieses Skript sauber durchläuft und du dich auch davon überzeugt hast,
das musst du mit Administratorrechten erledigen.

Prüfe also auch ob admin/admin als PHPMyAdmin User existiert und auch ob er die Rechte für die Datenbank hat.
...das Skript legt den nämlich nur für eine Tabelle an.

Mach das bitte von Hand mit: PHPMyAdmin
pma_admin_01.pngpma_admin_02.png
Du kannst den Server auch unter 127.0.0.1 erreichen?
...bzw. die PHP Skripte?
 
Zuletzt bearbeitet:
Habe nun unter "Benutzer" ein Profl namens admin erstellt und ihm das PW admin zugeteilt. Dann habe ich ihm noch alle Recht gegeben.

Die Skripte sind unter 127.0.0.1 erreichbar, habe das aber wieder auf localhost geändert.

Ist der User admin nun richtig erstellt?

Falls ja, ich bekomme dennoch die gleichen Fehler wie oben angezeigt, also kein Zugriff möglich
 
Der Benutzer admin/admin muss Rechte für die Datenbank xml_directory bekommen.
...schau dir dazu die Screenshots genau an, in Post #10.

Nach der Erstellung:
1. Klick auf Datenbank: xml_directory
2. Klick auf Reiter: Rechte
3. Klick auf: Benutzer hinzufügen, Rechte geben, und OK klicken
 
Zuletzt bearbeitet:
Die Fehlermeldungen im ersten Post deuten darauf hin, dass die Variablen nicht definiert sind. Die config.inc.php muss ein <?php am Anfang des Codes haben.
 
ok, habe nun noch mal die SQL Datei mit diesem Inhalt importiert:

PHP:
CREATE DATABASE `xml_directory`;
USE xml_directory;


CREATE TABLE `directory_entries` (
  `entry_id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `lastname` varchar(255) NOT NULL default '',
  KEY `entry_key` (`entry_id`)
) ENGINE=MYISAM;


CREATE TABLE `directory_numbers` (
  `number_id` int(11) NOT NULL auto_increment,
  `type_id` int(11) NOT NULL default '0',
  `entry_id` int(11) NOT NULL default '0',
  `number` varchar(255) NOT NULL default '',
  KEY `entry_key` (`number_id`)
) ENGINE=MYISAM;


CREATE TABLE `directory_phones` (
  `phone_id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `name` varchar(15) NOT NULL default '',
  KEY `phone_key` (`phone_id`)
) ENGINE=MYISAM;


CREATE TABLE `directory_types` (
  `type_id` int(11) NOT NULL auto_increment,
  `type` varchar(20) NOT NULL default '',
  KEY `phone_key` (`type_id`)
) ENGINE=MYISAM;



CREATE TABLE `directory_user` (
  `user_id` int(11) NOT NULL auto_increment,
  `username` varchar(50) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `language` int(11) NOT NULL default '1',
  KEY `user_key` (`user_id`)
) ENGINE=MYISAM;

INSERT INTO `directory_user` ( `user_id` , `username` , `password` , `language` ) VALUES ( 1, 'admin', password( 'admin' ) , 1 );

INSERT INTO `directory_types` (`type_id`, `type`) VALUES (1, 'Privat');
INSERT INTO `directory_types` (`type_id`, `type`) VALUES (2, 'Arbeit');
INSERT INTO `directory_types` (`type_id`, `type`) VALUES (3, 'Mobil');
INSERT INTO `directory_types` (`type_id`, `type`) VALUES (4, 'VoIP');


Dann kommt die Meldung:

PHP:
Der Import wurde erfolgreich abgeschlossen, 12 Abfragen wurden ausgeführt. (SQL)
CREATE DATABASE `xml_directory`;# 1 Datensatz betroffen.

USE xml_directory;# MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze).



CREATE TABLE `directory_entries` (
`entry_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`lastname` varchar(255) NOT NULL default '',
KEY `entry_key` (`entry_id`)
) ENGINE=MYISAM;# MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze).



CREATE TABLE `directory_numbers` (
`number_id` int(11) NOT NULL auto_increment,
`type_id` int(11) NOT NULL default '0',
`entry_id` int(11) NOT NULL default '0',
`number` varchar(255) NOT NULL default '',
KEY `entry_key` (`number_id`)
) ENGINE=MYISAM;# MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze).



CREATE TABLE `directory_phones` (
`phone_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`name` varchar(15) NOT NULL default '',
KEY `phone_key` (`p[...]

Danach auf die Datenbank gegangen, dort unter Rechte den Benutzer so wie in Deinem Screenshot erstellt.

Rufe ich nun http://localhost/directory/index.php auf, erscheint dort die Eingabemaske für Username und Passwort, darüber steht aber nach wie vor:

PHP:
Notice: Undefined index: action in C:\xampp\htdocs\directory\index.php on line 16

Drückt man auf login (ohne Daten, da egal) erscheint:

PHP:
Notice: Undefined variable: database_server in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database_user in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database_pawd in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11

Notice: Undefined variable: database in C:\xampp\htdocs\directory\baseFunction.inc.php on line 12
Konnte Datenbank nicht selektieren

EDIT:

Hier die config.inc.php

PHP:
<?
  $database_server  = "localhost";
  $database_user    = "admin";
  $database_pawd    = "admin";
  $database         = "xml_directory";
  $DirAbsoluteUri   = "localhost/directory/";
  $AvoidPhoneBug    = TRUE;
  $fallbacklanguage = 1;   // 1=de, 2=en
?>
 
Habe nun das "php" eingefügt.

Die "erste Seite" bleibt gleich, drücke ich auf Login, kommt nun:

PHP:
Warning: mysql_connect(): Access denied for user 'admin'@'localhost' (using password: YES) in C:\xampp\htdocs\directory\baseFunction.inc.php on line 11
Die Verbindung konnte nicht aufgebaut werden
 
Endlich mal eine "vernünftige" Fehlermeldung. :D

OK, wo kommen die Hochkommata her, wenns daran liegen sollte?

Du kannst es auch mal mit dem Administrator von PHPMyAdmin versuchen,
in der config.inc.php, denn der darf ja alles.
 
Zuletzt bearbeitet:
Den undefined index action kannst Du ignorieren, der Code ist nicht ganz sauber geschrieben, da müsste vorher eine isset Prüfung ob's den index überhaupt gibt.

Darf den admin auf die Datenbank zugreifen? (einzustellen unter Benutzer - Datenbank in phpMyAdmin)

Die Hochkomma Schreibung in der Fehlermeldung ist normal.
 
Achtung: Verwechslungsgefahr!

Rufe ich nun http://localhost/directory/index.php auf, erscheint dort die Eingabemaske für Username und Passwort, darüber steht aber nach wie vor:
Dieser User stammt aus der Tabelle: directory_user
PHP:
INSERT INTO `directory_user` ( `user_id` , `username` , `password` , `language` ) VALUES ( 1, 'admin', password( 'admin' ) , 1 );
...und hat mit dem Datenbankbenutzer...
PHP:
 <? 
  $database_server  = "localhost"; 
  $database_user    = "admin"; 
  $database_pawd    = "admin"; 
  $database         = "xml_directory"; 
  $DirAbsoluteUri   = "localhost/directory/"; 
  $AvoidPhoneBug    = TRUE; 
  $fallbacklanguage = 1;   // 1=de, 2=en 
?>
...nichts zu tun, obwohl die identisch sein dürfen.

Du solltest dich also mit dem "directory_user" admin/admin schon einloggen, über die index.php.
 
Zuletzt bearbeitet:
egal wen ich als Datenbankbenutzer reinschreibe, es kommt immer die gleiche Fehlermeldung, jeweils mit dem unter " $database_user" genannten Namen.
 
Mal anders:
Kannst Du Dich denn mit admin/admin bei phpMyAdmin einloggen?
Und wenn ja, wird die DB angezeigt?
 

Neueste Beiträge

Statistik des Forums

Themen
246,316
Beiträge
2,249,973
Mitglieder
373,928
Neuestes Mitglied
Crystoz
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.