• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

phpmyadmin zwei Tabellen verknüpfen ?

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Hallo Community,

ich versuche mal jetzt ganz genau zu erklären was ich vorhabe :) Ich habe ein Script zur Registrierung neuer User geschrieben. Bei der Registrierung der User werden Informationen wie Vorname, Nachname, Passwort usw. in eine phpmyadmin Tabelle eingetragen, zusätzlich wird für jeden User eine id verteilt die ebenfalls in der Tabelle steht und automatisch hochzählt für jeden neuen User der dazu kommt. Das ganze funktioniert auch wunderbar und ich habe keine Probleme damit.

Nun ist es auf meiner Website möglich das der User sein Profil bearbeiten kann. Dabei kann der User noch Informationen zu seinem Profil hinzufügen wie Wohnort, Hobbys, Job usw. Die Spalten in die diese Informationen eingetragen werden sollen, befinden sich jedoch nicht in der Tabelle in der die Registrierungs-Informationen (Vorname, Nachname usw.) enthalten sind.

Ich habe für die Individuellen Informationen eine neue Tabelle angelegt die sich in der selben Datenbank befindet wie die andere Tabelle.

Meine Frage ist nun: Wie kriege ich es hin das meine Website letztendlich weiß, welche Individuellen Informationen zu welchem User gehören ?

Versteht ihr ? Bei der Registrierung wird jedem User eine "id" zugeteilt so das es klar ist welcher Vorname usw. zu welchem User gehört.
Ich will es nun schaffen das die Individuellen Informationen klar zuzuordnen sind. Denn bis jetzt werden zwar die Informationen zum Wohnort usw. eingetragen und die stehen dann auch in den Spalten, aber zu welchem User die Informationen gehören ist nicht definiert.

Meine Überlegung war es eventuell die "id" die bei der Registrierung verteilt wird in irgend einer weise mit den Individuellen Informationen zu vernetzen, aber ich weiß nicht wie :/

Ich hoffe ihr könnt mir helfen und habt verstanden was ich vorhabe :)
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Hallo Community,

ich habe es jetzt geschafft das neue Information in einer phpmyadmin Tabelle ergänzt werden. Das einzige Problem ist das für die ergänzten Informationen eine neue id erstellt wird. Dabei will ich das diese Informationen einfach in die bestehende Zeile eines Users eingetragen wird.

Normalerweise habe ich ja die „id“ und sonstige Informationen des Users vom Login auf darauffolgende Seiten über session_start(); übermittelt.
Doch bei dem neuen Formular funktioniert das nicht. Wisst ihr was ich machen muss damit das Formular quasi weiß das ich angemeldet bin ?

Hier das Formular das meine bestehende Tabelle um eine Information ergänzt:
Code:
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'drago10');
?>
<!DOCTYPE html>
<html>
<head>
<title>Profil</title>
    
<link rel="stylesheet" href="Formdesign.css" type="text/css" />
<link href='https://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'>
    
</head>
<body>
        
<?php
$Wohnort = (isset($_POST["Wohnort"]) && is_string($_POST["Wohnort"])) ?
$_POST["Wohnort"] : "";   
    
    
$ok = false;
$fehlerfelder = array();
if (isset($_POST["Submit"])) {
    $ok = true;
    if (!isset($_POST["Wohnort"]) ||
    !is_string($_POST["Wohnort"]) ||
    trim($_POST["Wohnort"]) == ""  ){
    $ok = false;
    $fehlerfelder[] = "Wohnort";
    }
    
    if ($ok) {
?>   
    
<h1>Formulardaten</h1>
    
<?php

$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'drago10');
$statement = $pdo->prepare("INSERT INTO adressen (id, geschlecht, vorname, nachname, email, passwort, geburtstag, geburtsmonat, geburtsjahr, agb, wohnort, created_at, updated_at) VALUES (NULL,  '$Geschlecht','$Vorname', '$Nachname', '$Email', '$Passwort', '$Geburtstag', '$Geburtsmonat', '$Geburtsjahr', '$AGB', '$Wohnort', CURRENT_TIMESTAMP, NULL)");
$statement->execute();   
 

        
$Wohnort = htmlspecialchars($Wohnort);         
echo "<b> Wohnort:</b> $Wohnort<br />";       
echo "<br/>";
echo "Super! Alle Daten wurden erfolgreich &uumlbermittelt. <a href =Menu_Link_1log.php>Hier geht es weiter.</a>";
?>

<?php
        
  } else {
    echo "<p><b>Formular unvolst&auml;ndig</b></p>";
    echo "<ul><li>";
    echo implode("</li><li>", $fehlerfelder);
    echo "</li></ul>";
  }
}
if (!$ok) {
?>   
<fieldset>
<legend>Profil</legend>
<form method="post">
    
    
<label for="whort"> Wohnort:</label> <input type="text" name="Wohnort" value="<?php   

echo htmlspecialchars($Wohnort);
    
?>" /><br />
    
<input class="button" type="submit" name="Submit" value="Senden"/>
</form>
</fieldset>
<?php
 }
?>   
</body>
</html>
 

zilVerGFX

Macoun
Registriert
26.12.08
Beiträge
118
Du hast also 2 Tabellen für deine Benutzer-Informationen angelegt, einmal für Anmeldungsdaten (nennen wir die Tabelle "user"), und einmal für das Benutzer-Profil (nennen wir sie "user_profile"). Die Aufteilung der Daten auf mehrere Tabellen macht sogar total Sinn, der Fachbegriff hierfür nennt sich "Normalisierung".

Das was du tun musst, ist eine Relation zwischen beiden Tabellen herzustellen - und das machst du ganz einfach indem du die Tabelle "user_profile" um eine weitere Spalte erweiterst, mit welcher du einen Eintrag in "user_profile" eindeutig einem Eintrag in "user" zuordnen kannst.

Wir nennen diese Spalte einfach mal "user_profile.user_id". "user_profile.user_id" ist ein Fremdschlüssel zu "user.id".
Wenn sich also ein Benutzer registrierst - und dementsprechend ein Profil angelegt werden muss - legst du einen neuen Eintrag in "user_profile" an und belegst "user_profile.user_id" mit der "user.id" (die Id, welche automatisch hochzählt) des entsprechenden Benutzers.

Wenn du jetzt das Benutzer-Profil abfragen willst, dann kannst du das beispielsweise so:
Code:
SELECT place, hobby, job FROM user_profile WHERE user_id=?
"?" wird natürlich mit der aktuellen "user.id" ersetzt.

Da du vermutlich die Daten von "user" und "user_profile" zur selben Zeit benötigen wirst, kannst du diese gleichzeitig über einen "JOIN" abfragen.

Schau mal hier. Die Erklärung ist denke ich ziemlich einleuchtend.

Den Rest bekommst du schon selbst raus :)
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@zilVerGFX mmh also es geht ja im wesentlich um diesen Bereich:
Code:
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'drago10');
$statement = $pdo->prepare("INSERT INTO adressen (id, geschlecht, vorname, nachname, email, passwort, geburtstag, geburtsmonat, geburtsjahr, agb, wohnort, created_at, updated_at) VALUES (NULL,  '$Geschlecht','$Vorname', '$Nachname', '$Email', '$Passwort', '$Geburtstag', '$Geburtsmonat', '$Geburtsjahr', '$AGB', '$Wohnort', CURRENT_TIMESTAMP, NULL)");
$statement->execute();

Dieser muss geändert werden und zwar muss ich den UPDATE Syntax verwenden. So wie ich erfahren habe ist das dieser:
UPDATE tabelle SET feldname = wert WHERE (bedingung);

Macht das hier dann Sinn ?
UPDATE adressen SET wohnort = $Wohnort WHERE id = $userid

Ich bin mir nicht ganz sicher ob ich das so machen kann. Damit das am Ende auch hinhaut muss ich wahrscheinlich erst ne Nutzer id Abfrage vom Login Starten, in etwa so $userid = $_SESSION['userid']; oder ?

Angenommen ich kann das so machen, wie müsste ich das dann in das Script einbauen ? Also jetzt in Anbracht auf den Code den ich hier jetzt gepostet habe :)
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
hab es gerade einfach mal ausprobiert :D es klappt alles. Wirklich vielen Dank für alles, hat mir sehr viel gebracht!!!
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@zilVerGFX eine Frage hätte ich noch :) und zwar zu folgendem:
Code:
<?php
if(!isset($_SESSION['userwohnort'])) {
die('Bitte zuerst <a href="Mac_Version1.php">einloggen</a>');
}
//Abfrage der Nutzer ID vom Login
$userwohnort = $_SESSION['userwohnort'];
echo $userwohnort;
?>

Es klappt alles wunderbar mit dem auslesen und anzeigen der Variable $userwohnort. Doch falls es dafür keinen Eintrag gibt dann möchte ich das in dem Feld in dem die $userwohnort ausgelesen wird einfach nur "Wohnort" steht. Der User kann ja frei entscheiden ob er seinen Wohnort angibt und deswegen soll solange es für diese Info keinen Wert gibt einfach nur "Wohnort" in dem Feld stehen. Eventuell ne Idee ?
 

zilVerGFX

Macoun
Registriert
26.12.08
Beiträge
118
Das bekommst du auch selbst raus.

Du kannst es ja bereits beschrieben: WENN $userwohnort leer ist, DANN soll in $userwohnort "Wohnort" stehen.
Jetzt formulier daraus mal einen Code :)
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
@zilVerGFX Hey sorry das ich nichts geschrieben habe, hatte viel zu tun :)
Ich habe es jetzt auf jeden Fall hinbekommen und zwar mit folgendem Code
Code:
if (empty($userwohnort)) {
    echo 'Wohnort';
}

Es funktioniert jetzt alles aber eine Frage hätte ich da schon noch. Das ganze ändert sich nämlich erst nachdem sich der User ausgelegt hat und die Session beendet wurde. Erst bei einem neuen Session Start wird die Änderung vorgenommen. Gibt es eine Möglichkeit die aktuelle Session quasi zu aktualisieren ?