Seite 1 von 2

Datenbank Problem / Bekomme Daten nicht in die DB geschriebe

Verfasst: Mi 13. Apr 2005, 09:41
von Condor
Hallo,

ich habe mir ein Registrierungsmodul zusammen geschrieben damit sich die User auf der Seite schon registrieren können. Jetzt müssen ja die Daten alle in die con_phplib_auth_user_md5 Tabelle rein, damit die User sich ja durch das Simple Login-Modul auf der Seite anmelden können. Er schreibt die Daten aber nicht in die Tabelle. Die Tabelle habe ich um ein paar Spalten erweitert und es geht nicht. Mein Script sagt mir Datenbankfehler. Nehme ich aber eine andere Tabelle bekomme ich die Daten reingeschrieben, ohne Probleme. Was läuft da schief ? Es kommt mir vor, als wäre die Tabelle con_phplib_auth_user_md5 geschützt oder sowas, oder ich bin einfach zu blöd. Oder gibts eine andere Möglichkeit das sich das Login Modul die Daten aus einer anderen Datenbank holt. Die Daten des Login-Moduls werden doch an die front_content.php geschickt oder ? Hat jemand einen Vorschlag ? Bitte ?!

Verfasst: Mi 13. Apr 2005, 10:09
von emergence
Jetzt müssen ja die Daten alle in die con_phplib_auth_user_md5 Tabelle rein, damit die User sich ja durch das Simple Login-Modul auf der Seite anmelden können. Er schreibt die Daten aber nicht in die Tabelle. Die Tabelle habe ich um ein paar Spalten erweitert und es geht nicht. Mein Script sagt mir Datenbankfehler. Nehme ich aber eine andere Tabelle bekomme ich die Daten reingeschrieben, ohne Probleme. Was läuft da schief ?
wie sieht denn die tabelle jetzt aus ?

mach mal in phpmyadmin ein

Code: Alles auswählen

show create table con_phplib_auth_user_md5
und die nächste frage wie sehen deine insert statements aus ?

und welche fehlermeldung erhälst du im phpmyadmin ?
Oder gibts eine andere Möglichkeit das sich das Login Modul die Daten aus einer anderen Datenbank holt.
ähm, authentifizierung über eine andere tabelle ist erst ab der 4.5.2alpha möglich... da gibts die nette funktion register_auth_handler in conlib/local.php
Die Daten des Login-Moduls werden doch an die front_content.php geschickt oder ?
ähm, das login modul übergibt zwei variablen an die front_content.php
username und password...
sobald username gesetzt ist wird ein login versucht...
schlägt dieser fehl, wirst du auf die login maske umgeleitet...

Verfasst: Mi 13. Apr 2005, 10:21
von Condor
Hi,

das Script sieht z.B so aus:

Code: Alles auswählen

<?PHP

// Zugangsdaten importieren
include('db.inc');

// Verbindung zum Datenbankserver herstellen
	$link=mysql_pconnect($dbserver, $dbuser, $dbpasswd);
	if ($link == FALSE)
	{
		echo "<p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden.\n";
		echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
		exit (); // PHP-Script beenden
	}

// Datenbank auswaehlen
	$dblink=mysql_select_db($dbname);
	if ($dblink == FALSE)
	{
		echo "<p><b>Leider kann die Datenbank nicht geöffnet werden.\n";
		echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
			exit (); // PHP-Script beenden
	}

// Variablen aus dem Forumlar übernehmen
    $vn=$_POST["vn"];
	$nn=$_POST["nn"];
	$strasse=$_POST["strasse"];
	$plz=$_POST["plz"];
	$ort=$_POST["ort"];
    $link=$_POST["link"];
	$tel=$_POST["tel"];
	$fax=$_POST["fax"];
	$handy=$_POST["mobil"];
    $mail=$_POST["mail"];
    $funk=$_POST["funk"];

// Überpruefen ob der User schon vorhanden ist
	$query1 = "SELECT vorname FROM $tab WHERE vorname LIKE '$vn' and nachname LIKE '$nn'";
	$result = mysql_query($query1);

// Fehlermeldung ausgeben, bzw. User einfuegen
	$num=mysql_NumRows($result);
 
 /*
 if ($T1 == "" and $T2 == "") { echo "Bitte tragen Sie einen Namen und ein Passwort ein !!!";}
else {
    if (strlen($T1) < 5 || strlen($T2) < 5) { echo "Der Name und das Passwort müssen länger sein als 4 Zeichen !!!";}
    else {
 */
    if     ($vn == "") {echo "Vorname eingeben";}
    elseif ($nn == "") {echo "Nachname eingeben";}
    elseif ($strasse == "") {echo "Strasse eingeben";}
    elseif ($plz == "") {echo "PLZ eingeben";}
    elseif ($ort == "") {echo "Ort eingeben";}
    elseif ($tel == "") {echo "Telefon eingeben";}
    elseif ($mail == "") {echo "Email eingeben";}
    else {
	if ($num) {
		echo "User schon vorhanden!";
	}
	else
	{

     // Zeichen auseinander nehmen für Passwort
     $ze1 = substr($vn,0,1);
     $ze2 = substr($nn,0,1);

     
     // Quersumme errechnen
     function quersumme($zahl) {

        settype($zahl, "string");

        $letzter = strlen($zahl)-1;

        $summe = 0;
        for($i=0; $i<=$letzter; $i++) {
                $summe = $summe+$zahl[$i];
        }
        return $summe;
}

$wert = $plz;
$quer = quersumme($wert);

$passwort = $ze1.$funk.$ze2.$quer;

      // alles in die DB einfügen


		$query2="INSERT INTO $tab
		SET      vorname='$vn',
			     nachname='$nn',
			     strasse='$strasse',
			     plz='$plz',
                 ort='$ort',
                 link='$link',
                 telefon='$tel',
                 fax='$fax',
                 handy='$handy',
                 email='$mail',
                 password='$passwort',
                 funktion='$funk';";

		$result2 = mysql_query($query2);

		if ($result2)
		{
			print"<p><blockquote><b>$vn</b> wurde erfolgreich aufgenommen.<blockquote></p>";
		}
		else
		{
			print"Datenbankfehler! Kunde konnte nicht aufgenommen werden!";
		}
      }
	}
	mysql_close();
?>
Das hab ich jetzt so zusammen gekloppt. Ist das richtig ? Was macht eigentlich dieser Befehl:

Code: Alles auswählen

show create table con_phplib_auth_user_md5
?
Hab ihn eingegeben und es passiert nichts. MyAdmin gibt nur was aus. MyAdmin hat mir keinen Fehler gesagt. Achso, die DB sieht jetzt so aus:

Code: Alles auswählen

DROP TABLE IF EXISTS `con_phplib_auth_user_md5`;
CREATE TABLE IF NOT EXISTS `con_phplib_auth_user_md5` (
  `user_id` varchar(32) NOT NULL default '',
  `username` varchar(32) NOT NULL default '',
  `vorname` varchar(32) NOT NULL default '',
  `nachname` varchar(32) NOT NULL default '',
  `password` varchar(32) NOT NULL default '',
  `perms` varchar(255) default NULL,
  `realname` varchar(255) default NULL,
  `email` varchar(255) default NULL,
  `webseite` varchar(255) NOT NULL default '',
  `telephone` varchar(255) default NULL,
  `fax` varchar(22) NOT NULL default '',
  `handy` varchar(22) NOT NULL default '',
  `address_street` varchar(255) default NULL,
  `address_zip` varchar(10) NOT NULL default '',
  `address_city` varchar(255) default NULL,
  `address_country` varchar(255) default NULL,
  `funktion` varchar(255) NOT NULL default '',
  `wysi` tinyint(2) default NULL,
  PRIMARY KEY  (`user_id`)
) TYPE=MyISAM;

Verfasst: Mi 13. Apr 2005, 10:49
von emergence
lass dir doch bei deinem script den generierten sql string ausgeben und das testest du im phpmyadmin...

nach dem $query1

einfach ein

Code: Alles auswählen

echo $query1."<br>";
und nach dem $query2

Code: Alles auswählen

echo $query1."<br>";
ergänzen...

abgesehen davon was ist denn in der variable $tab definiert ?

Verfasst: Mi 13. Apr 2005, 11:21
von Condor
Hi,
Probier ich gleich mal aus. $tab ist ja in der db.inc und da steht nur der Tabellenname. Müsste also jetzt

Code: Alles auswählen

$tab = con_phplib_auth_user_md5;
heissen.

Ich füge nochmal die db.inc ein:

Code: Alles auswählen

<?php

  //Verbindungsparameter für die Datenbank FF
  $dbserver = "localhost";
  $dbuser = "root";
  $dbpasswd = "";
  $dbname_auth ="mysql";
  $dbname = "contenido";
  $tab = "con_phplib_auth_user_md5";

?>

Verfasst: Mi 13. Apr 2005, 11:28
von Condor
Das sagt mir jetzt MyAdmin:

Code: Alles auswählen

#1064 - You have an error in your SQL syntax near 'SELECT vorname FROM con_phplib_auth_user_md5 WHERE vorname LIKE 'a' and nachname' at line 2

Verfasst: Mi 13. Apr 2005, 12:00
von emergence

Code: Alles auswählen

SELECT vorname FROM con_phplib_auth_user_md5 WHERE vorname LIKE 'a' and nachname LIKE 'b'
wenn ich die tabelle wie du sie definiert hast angelegt habe und dieses einzelne query ausführe erhalte ich keinen fehler...

ähm wie sieht denn das sql query aus das du getestet hast ?

Verfasst: Mi 13. Apr 2005, 12:11
von Condor
Hi,

wundert mich nicht, das es bei dir geht und bei mir nicht. Das ist schon normal bei mir. Das habe ich eingegeben:

Code: Alles auswählen

SELECT vorname FROM con_phplib_auth_user_md5 WHERE vorname LIKE 'a' and nachname LIKE 'b'

Verfasst: Mi 13. Apr 2005, 12:13
von Condor
Hi,
ich bins nochmal. Ich habs jetzt nochmal in MyAdmin eingegeben und es kam kein Fehler. Und jetzt ?

Verfasst: Mi 13. Apr 2005, 12:19
von Condor
Hallöchen,

ein Wunder, es funktioniert. Dankeschön für deine tolle Hilfe :lol:

Ich hab da noch eine Frage. Ich hab es jetzt geschaft einen User in die Tabelle einzufügen. Aber wenn ich mich einloggen möchte, geht es nicht. Liegt es an der "user_id" ? Muss da was rein und wenn ja was und wie mach ich das ? Ist das eine Session oder was ? Das Passwort lautet bei mir jetzt z.B "ROMF25" und wird jetzt im Script so verschlüsselt:

Code: Alles auswählen

$passwort = $ze1.$funk.$ze2.$quer;

$pass_enc = md5($passwort);
Contenido entschlüsselt es doch mit dieser md5.js oder nicht ? Was muss ich denn noch ändern damit ich mich einloggen kann ?

Verfasst: Mi 13. Apr 2005, 13:15
von emergence
na ja die user_id müsstest du schon mit generieren wenn du einen benutzer in con_phplib_auth_user_md5 anlegst...

die user_id ist nichts anderes wie der username als md5 kodierter wert

Code: Alles auswählen

$newuserid = md5($username);
ähm contenido entschlüsselt ? nein
md5 kodierte werte können nicht wieder zurück konvertiert werden...

und die md5.js wird im frontend an sich nicht verwendet...

Verfasst: Mi 13. Apr 2005, 13:33
von Condor
Hi,
danke fürs schnelle antworten. Probier ich nachher mal aus. Das es nicht wieder zurück kodiert wird ist mir schon klar. Ich meinte was anderes. Irgendwas muss doch prüfen das z.B "hw8328zhgf832548" das Passwort "1234" ist. Welche Funktion macht das ?

Verfasst: Mi 13. Apr 2005, 13:42
von emergence
frontend:
conlib/local.php
class Contenido_Frontend_Challenge_Crypt_Auth *
function auth_validatelogin

backend:
conlib/local.php
class Contenido_Challenge_Crypt_Auth *
function auth_validatelogin

* beide basieren auf der klasse conlib/auth.inc

Verfasst: Mi 13. Apr 2005, 13:51
von Condor
Achso. Jetzt bin ich wieder etwas schlauer, aber nur ein wenig :lol:
Ich hab da aber noch ein Problem was micht unheimlich nervt. Ich habe eine Kategorie die geschützt ist. Diese Kategorie hat z.B. 5 Unterkategorien. Wenn ich mich jetzt durch das Login-Modul einlogge komme ich auf die Startseite der geschützten Kategorie. Jetzt sehe ich dann meine Navi. Wenn ich jetzt aber z.B auf Menüpunkt-1 klicke denkt CMS das ich nicht eingeloggt bin und schmeisst mir das Login-Fenster von Contendio vor. Ist das jetzt so, das ich mich für jede Ebene, also Kategorie, die geschützt ist einloggen muss ? Nein, oder ?

Verfasst: Mi 13. Apr 2005, 13:59
von emergence
sicher das du wirklich eingelogged bist ?

check das mal mit

Code: Alles auswählen

print_r($auth);