irc
eByteNet » Forum » Programmieren » PHP & MySQL » Datenbezug aus anderer Tabelle
Seiten: 1

13.11.2008 um 22:01:05
Debbe


Avatar von Debbe

Registriert: 17.10.2006
eBN-Alter: 2J 2M 24T

Beiträge: 234
Verwarnungen: 0

eBytes: 560.5

Titel: Datenbezug aus anderer Tabelle
Moin community

Mein Code bis jetzt:

Code:
 
//open connection to db

$con = mysql_connect($host,$username,$password);
if (!$con);
{
	die('No connection to database');
}

//create tables

mysql_select_db($database,$con);
$sql= 'CREATE TABLE ranks
(
	id MEDIUMINT NOT NULL AUTO_INCREMENT,
	rank varchar(100) NOT NULL,
	PRIMARY KEY(id)
)';
mysql_query($sql,$con);
$sql = 'CREATE TABLE users
(
	id MEDIUMINT NOT NULL AUTO_INCREMENT,
	username varchar(30) NOT NULL,
	name varchar(30) NOT NULL,
	password varchar(30) NOT NULL,
	email varchar(100) NOT NULL,
	rank varchar(100) NOT NULL,
	PRIMARY KEY(id)
)';
mysql_query($sql,$con);

//close connection

mysql_close($con);


Meine Frage: Wie ihr seht habe ich 2 Tabellen, ranks und users. Sinn: ranks sollen in seperater tabelle gespeichert werden.

Wie kann ich nun
Code:
INSERT INTO users (id, username, name, password, email, rank)
VALUES (1, Debbe, Sven Kisseleff, MD5-Hash, myemailadress, HIER IST DIE GROSSE FRAGE rank)


den Wert aus der anderen Tabelle beziehen?

Greetz Debbe

P.S.: Allgemeine Fehler im Code dürfen auch gleich gemeldet werden.
_______________________________

Ist der Thread so langweilig, dass du meine Signatur lesen musst?
OFF Melden

13.11.2008 um 22:39:11
QuasimodosKlon


Avatar von QuasimodosKlon

Registriert: 09.08.2008
eBN-Alter: 5M 1T

Beiträge: 273
Verwarnungen: 0

eBytes: 4545.04

Titel: Re: Datenbezug aus anderer Tabelle
PHP-Code:
 #
if
(
  
mysql_affected_rows($connection) > 0
  
&& $qy mysql_query('SELECT LAST_INSERT_ID()'$connection)
  && 
$row mysql_fetch_array($qy)
)
{
   
// dann insert/update mit fremdid=$row[0];


LG Helge

EDIT:
Obige Lösung wendet man an, wenn man einen zusammenhängenden Eintrag über mehrere Tabellen erzeugen will, und macht nur Sinn bei AutoInc-Feldern, wenn man nicht weiß, welche ID zuletzt erzeugt wurde. Die Funktion ist sicher innerhalb der Datenbankverbindung, heißt, selbst wenn inzwischen über eine andere Verbindung ein weiterer Eintrag geschrieben wurde, erhältst Du Deine zuletzt erzeugte AutoID.

Bei näherem hinsehen verstehe ich Dein Problem allerdings nicht mehr. Wieso trägst Du in die Usertabelle den Rang als VARCHAR ein? Sinn der anderen Tabelle sollte doch sein, daß man sich auf die Einträge per ID beziehen kann, wobei dem PHP-Programm die Bezeichnung für den Rang völlig egal sein kann. Die Bezeichnung ist nur für die Ausgabe an den User interessant. Auswahl z.B. mit
<option name="rang" value="$row->id">$row->bezeichnung</option>
erzeugen. Die Ränge dürften vorher schon festgelegt sein und bei der Zuweisung an den User kommt das Problem, in 2 Tabellen gleichzeitig schreiben zu müssen erst gar nicht auf.
Zuletzt bearbeitet von QuasimodosKlon am 13.11.2008 um 23:09:44 Uhr
_______________________________

Klarer Verfechter der alten Rechtschreibung!

Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Und das nennen sie dann ihren Standpunkt.
Albert Einstein
OFF Melden

.::Werbung::.

14.11.2008 um 06:47:14
Debbe


Avatar von Debbe

Registriert: 17.10.2006
eBN-Alter: 2J 2M 24T

Beiträge: 234
Verwarnungen: 0

eBytes: 560.5

Titel: Re: Datenbezug aus anderer Tabelle
Einer von uns steht grad auf der Leitung und ich habe schwer den Verdacht, dass ich das bin.

Wenn ich eine Benutzerverwaltung programiere, möchte ich ja die einzelnen Tabellen möglichst einfach halten. Also -> wiederkehrende Elemente ordne ich in anderen Tabellen (z.B. Ranks)

Damit ich wieder auf die Elemente zugreiffen kann, gebe ich den ranks id's

-------------
|id | rank |
|0 |blocked|
|1 | admin |
|2 |... |
|3 |... |
|4 |... |
|5 |... |
-------------

die Tabelle Ranks wird bei der Erstellung mit Daten gefüllt. Sie dient nur als Quelle und wird nachher nicht mehr editiert, bzw doch, bleibt möglich, ist aber nicht vorgesehen.

Nun in der Tabelle users soll in der Spalte rank mittels einer ID das varchar Feld aus der anderen Reihe beziehen.

Um das Dreieck zu kompletieren: Backend der Website: Ich editiere einen Benutzer und weise demBenutzer xyz den Rank "admin" zu. In der User tabelle soll 1 stehen und nicht Admin.

Wenn ich nun Bilanz aus deinem Codeschnipsel ziehe:

PHP-Code:
 #
if
(
  
mysql_affected_rows($connection) > 0
  
&& $qy mysql_query('SELECT * FROM ranks WHERE id=0'$connection)
  && 
$row mysql_fetch_array($qy)
)
{
   
// dann insert/update mit fremdid=$row[0];


Greetz Debbe
_______________________________

Ist der Thread so langweilig, dass du meine Signatur lesen musst?
OFF Melden

14.11.2008 um 08:28:29
dominopage


Avatar von dominopage

Registriert: 20.05.2006
eBN-Alter: 2J 7M 24T

Beiträge: 1634
Verwarnungen: 0

eBytes: 19993.7

Titel: Re: Datenbezug aus anderer Tabelle
ich würde die ränge nicht in einer tabelle sondern in einem array in deiner cofig, bzw. index datei speichern...
du musst sie so oder so vor jedem insert in ein array einlesen, da man mit php immer nur einen befehl ausführen kann.

oder liege ich falsch?

dominopage
_______________________________

Eine Signatur?
Brauche ich nicht,...
...meine Posts sind interessant genug!



Du hast sie ja doch gelesen!?

Schäme dich :roll:

Macht aber nix^^, dann kannst du auch gleich mal hier schauen
OFF Melden

14.11.2008 um 12:51:55
grubi
Administrator

Avatar von grubi

Registriert: 21.05.2006
eBN-Alter: 2J 7M 23T

Beiträge: 680
Verwarnungen: 0

eBytes: 71974.3

Titel: Re: Datenbezug aus anderer Tabelle
Ich verstehe dein Problem noch nicht ganz. Du weiß nicht, wie die ID des jeweiligen Ranks bekommst, um diese dann in die User-Tabelle einzutragen?

Du kannst doch dein Dropdown/Checkboxen, was auch immer, die ID als Wert (value) setzten und diese dann einfach beim Update eintragen.

So könnte der Aufbau des DropDown aussehen. (Mal ganz plump HTML/PHP misch, auch wenn ich eine Trennung bevorzuge (TemplateSystem^^))
PHP-Code:
<?
$sql 
"SELECT `id`, `rank` FROM `ranks`";
$res mysql_query($sql) or die(mysql_error());

$select '<select name="rank">';
while(
$row mysql_fetch_assoc($res))
{
   
// Man kann auch noch eine Prüfung des aktuellen Rankes einbauen, um das dann zu selectieren
   
$select .= '<option value="'.$row['id'].'">'.$row['rank'].'</option>';
}
$select .= '</select>';

#blablabla.. tu hier noch n bissel was un da auch...

echo $select



Beim speichern des Users hast du dann in $_POST['rank'] (Wenn du als method POST gewählt hast beim Formular) die ID des Ranks und kannst es dann im Update-Query einbauen.
Zuletzt bearbeitet von grubi am 14.11.2008 um 12:52:13 Uhr
_______________________________

Ich bin "Niemand", denn "Niemand" ist perfekt ;)
OFF Melden

15.11.2008 um 03:11:24
QuasimodosKlon


Avatar von QuasimodosKlon

Registriert: 09.08.2008
eBN-Alter: 5M 1T

Beiträge: 273
Verwarnungen: 0

eBytes: 4545.04

Titel: Re: Datenbezug aus anderer Tabelle
Meinen Beispiel-Code benötigst Du in diesem Fall nicht, wie ich später im EDIT schon angemerkt hatte. Genau wie in grubis Fertiglösung war es gemeint.

Mein Problem an Deinem Code mit VARCHAR steckt hier:
PHP-Code:
 #
$sql 'CREATE TABLE users
(
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    username varchar(30) NOT NULL,
    name varchar(30) NOT NULL,
    password varchar(30) NOT NULL,
    email varchar(100) NOT NULL,
    rank varchar(100) NOT NULL,         //  <==  MEDIUMINT statt VARCHAR(100)
    PRIMARY KEY(id)
)'

_______________________________

Klarer Verfechter der alten Rechtschreibung!

Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Und das nennen sie dann ihren Standpunkt.
Albert Einstein
OFF Melden


eByteNet » Forum » Programmieren » PHP & MySQL » Datenbezug aus anderer Tabelle
Seiten: 1

Du hast in diesem Forum keine Schreibrechte!

Computer Notdienst in Leipzig | Software Installtionsservice | Computer