rababar2014
Goto Top

Spalten aus Tabellen für den jeweils eingeloggten User in einem Loop ausgeben, wie

Moin Leude,
ich arbeite gerade an einem Projekt, einer eigenen Memberpage für 130 Mitarbieter.

Ich habe zwei MySQL-Tabellen mit jeweils Userspezifischen Inhalten/Tabellen. Eine Usertabelle mit Daten zum User selbst (Namen, Emailadresse, usw.) und eine Tabelle, mit verschiedenen andern Inhalten auch Userspezifisch.

Ich habe jetzt eine einfache if und foreach Schleife geschrieben, um den jeweils eingeloggten User zu begrüssen und die Inhalte der Tabellenspalten für den jeweils eingeloggten User auszugeben.

Jetzt die Frage, wie bekomme ich es hin, dass ich mit nur dieser einen Schleife, jeiweils immer für den User, der eingeloggt ist die Daten ausgeben kann, ohne die Schleife 130 mal kopieren zu müssen.

Hier ist mal der Basis-Code für 2 User

<?php session_start (); ?>
<?php
$user1    =   $pdo->query ("SELECT * FROM `userlist`  WHERE username= 'user1'");  
enter code here
$user2    =   $pdo->query ("SELECT * FROM `userlist`  WHERE username= 'user2'");  
?>

<?php 

define( '_JEXEC', 1 ); define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );  

define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );  

require_once (JPATH_BASE . '/includes/defines.php');  

require_once (JPATH_BASE . '/includes/framework.php');  

require_once (JPATH_BASE .'/libraries/joomla/factory.php');  

$app = JFactory::getApplication('site');  

$user = JFactory::getUser();
$userid = $user->id;
$username = $user->username;
$name = $user->name;
$email = $user->email;

?>

<?php

if($user->username != '' )  

{
echo 'hello' . ' ' . $username;  
}

?>

<?php if($user->username == 'user1' ):?>  
     <?php echo 'Hello';?> <?php echo $username;?>`   
<?php foreach ($user1 AS $row):?> 
      <?php echo $row ['id'];?>   
      <?php echo $row ['name'];?>      
           <?php if ($row ['content'] != "0"):?>   
                      <?php echo 'Content' ?>   
           <?php endif?
<?php endforeach ?>
<?php endif?>


<?php if($user->username == 'user2' ):?>  
     <?php echo 'Hello';?> <?php echo $username;?>`   
<?php foreach ($user2 AS $row):?> 
      <?php echo $row ['id'];?>   
      <?php echo $row ['name'];?>      
           <?php if ($row ['content'] != "0"):?>   
                      <?php echo 'Content' ?>   
           <?php endif?
<?php endforeach ?>
<?php endif?>

Ich habe jetzt ein paar mal was von einer while Schleife gelesen und einem pdo_fetch_all_query, finde aber nicht wirklich eine Lösung. Vielleicht habe ich auch nur gerade ein Brett vor dem Kopf.

Wäre ganz prima, wenn mir jemand sagen könnte, wie ich diese Routine umsetze und mir ein paar Tips gibt.

Danke schonmal im Voraus.
Greetz

Content-Key: 340400

Url: https://administrator.de/contentid/340400

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: em-pie
em-pie 12.06.2017 um 22:32:53 Uhr
Goto Top
Moin,

warum so kompliziert?

Irgendwie ermittelst du ja sicherlich bereits, um welchen User es sich handelt, wenn er die Seite aufruft!?

Diesen Kenner verwendest du gegen deine Datenbank innerhalb der Where-Clause.
du baust dir dein Query vorher in einer Variablen zurecht und anstatt in Zeile 4 bzw. 6 dann dort dein Query zu platzieren, setzt du die Variable ein...

schaue auch diesbezüglich mal hier rein:
Liste mit 500 Datensätzen aus MySQL-Tabelle und in if condition verarbeiten
Ähnliches Problem wurde dort auch angefragt. Leider jedoch keine weitere Rückmeldung erhalten face-confused

Gruß
em-pie
Mitglied: rababar2014
rababar2014 13.06.2017, aktualisiert am 14.06.2017 um 13:16:21 Uhr
Goto Top
Na ja,
<?php 
32.
 
33.
if($user->username != '' )   
34.
 
35.
{ 
36.
echo 'hello' . ' ' . $username;   
37.
} 
38.
 
39.
?> 

Mit dieser Schleife wird abgefragt, ob ein Nutzer angemeldet ist und gibt im Frontend den Usernamen aus.

Mit dieser Schleife, wird der Content für den jeweiligen User ausgegeben, sofern er angemeldet ist, hier am Beispiel User2.
<?php if($user->username == 'user2' ):?>   
54.
     <?php echo 'Hello';?> <?php echo $username;?>`    
55.
<?php foreach ($user2 AS $row):?>  
56.
      <?php echo $row ['id'];?>    
57.
      <?php echo $row ['name'];?>       
58.
           <?php if ($row ['content'] != "0"):?>    
59.
                      <?php echo 'Content' ?>    
60.
           <?php endif? 
61.
<?php endforeach ?> 
62.
<?php endif?
Hab mir das Beispiel aus dem anderen Post durchgelesen.

Aber damit müsste ich in die "where" Condition im sql-query ja trotzdem alle Benutzer abbilden und jeweils a.user1, b.user2, c.user 3 eintragen, korrekt? Oder verstehe ich Dich da jetzt falsch? Das will ich ja umgehen.

Mir schwebt da was vor in Richtung:
Wenn ein User angemeldet ist, durchlaufe die Tabellen und gibt die Inhalte für die Spalten aus, ohne für jeden User einen query oder eine Schleife schreiben zu müssen.

Gruss
Mitglied: Thomas2
Thomas2 13.06.2017 aktualisiert um 09:15:42 Uhr
Goto Top
Hey,

da scheint es ja sehr an den Grundlagen zu hapern. Wenn dein Benutzer sich über deine Seite anmeldet, dann hast du doch den Benutzernamen. Deine SQL Abfragen machst du nur für diesen Benutzernamen (die Variable, wo der Username drin steht). Fertig. ;)

bei WHERE username='user1' das user1 durch deine entsprechende Variable ersetzen.
$user1    =   $pdo->query ("SELECT * FROM `userlist`  WHERE username= 'user1'");   

Gruß,
Thomas
Mitglied: rababar2014
rababar2014 13.06.2017 um 09:57:01 Uhr
Goto Top
also Du meinst so:

$user = $pdo->query ("SELECT * FROM `userlist` WHERE username= $username");?
Mitglied: Thomas2
Thomas2 13.06.2017 um 12:11:17 Uhr
Goto Top
Hi,

das kann ich dir nicht sagen. In deinem Code ist nicht erkennbar, woher deine Anmeldedaten kommen.

Wenn du dich damit auf die unten stehende Zeile beziehst, dann klappt das nicht.
$username = $user->username;

Das meine ich jetzt nicht böse, aber du solltest deinen eigene Code schon verstehen. Ich würde dir empfehlen, erstmal ein paar Tutorials zum Thema Login/Benutzerverwaltung durchzuarbeiten.

Meine Vermutung: du hast keine Anmeldeseite und deshalb liest du die Benutzerdaten hart codiert aus deiner Tabelle raus...


Gruß,
Thomas
Mitglied: rababar2014
rababar2014 13.06.2017 um 13:37:33 Uhr
Goto Top
Na ja, der Login passiert über Joomla.

Über diesen Codeblock wir der jeweils aktive bzw, angemeldete User geholt. und im Frontend ausgegeben.


<?php  
10.
 
11.
define( '_JEXEC', 1 ); define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );   
12.
 
13.
define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );   
14.
 
15.
require_once (JPATH_BASE . '/includes/defines.php');   
16.
 
17.
require_once (JPATH_BASE . '/includes/framework.php');   
18.
 
19.
require_once (JPATH_BASE .'/libraries/joomla/factory.php');   
20.
 
21.
$app = JFactory::getApplication('site');   
22.
 
23.
$user = JFactory::getUser(); 
24.
$userid = $user->id; 
25.
$username = $user->username; 
26.
$name = $user->name; 
27.
$email = $user->email; 
28.
 
29.
?> 
30.
 
31.
<?php 
32.
 
33.
if($user->username != '' )   
34.
 
35.
{ 
36.
echo 'hello' . ' ' . $username;   
37.
} 
38.
 
39.
?> 
Mitglied: Thomas2
Thomas2 13.06.2017 aktualisiert um 15:27:12 Uhr
Goto Top
Hi,

das macht es einfacher.

Um deine Frage zu beantworten:
Jetzt die Frage, wie bekomme ich es hin, dass ich mit nur dieser einen Schleife, jeiweils immer für den User, der eingeloggt ist die Daten ausgeben kann, ohne die Schleife 130 mal kopieren zu müssen.

echo "hello" . $user->name;  
keine Schleife notwendig.

Du hast nicht verstanden, wie der Programmcode funktioniert.
Im Zweifelsfrei immer Werte ausgeben und schauen was eigentlich drin steht. Ich habe ewig nicht mit PHP programmiert, falls da ein Syntaxfehler ist, kriegst du den hoffentlich behoben. :D

"Über diesen Codeblock wir der jeweils aktive bzw, angemeldete User geholt. und im Frontend ausgegeben."
Da hast du dir doch schon selbst die Antwort gegeben. ;)

Gruß,
Thomas
Mitglied: rababar2014
rababar2014 14.06.2017 aktualisiert um 08:04:13 Uhr
Goto Top
Ne, mit dem Code ist alles ok.
Ich habe mittlerweile ein bisschen weiter recherchiert und bin auf ein paar Code-Beispiele für eine User-Profile-Page gestossen.

Die Basis ist die Variable $Username, die dann auch für die Where-Bedingung im sql-query verwendet wird.
also im Prinzip ausgehen von:
$userdata = $pdo->query("SELECT * FROM `users` WHERE `username`=".$username1);  
Mitglied: em-pie
em-pie 14.06.2017 um 08:35:38 Uhr
Goto Top
Genau das hat Thomas dir mehrfach und ich dir einangs versucht zu erklären....

Da ein User nur einmal bestehen kann, erhälst du im SQL Query auch nur ein Result..

Und wenn du deine beiden Tabellen miteinander verknüpfst (INNER JOIN), dann brauchst du auch nur 1x ein Statement abfeuern und erhälst direkt alle erforderlichen Spalten!

$strQry = "SELECT a.username, a.surname, a.lastname, b.welcomeText, b.extended Text FROM users as a INNER JOIN extendedInfos as b on a.username = b.username WHERE username=".$username;  

$userdata = $pdo->query($strQry);

So einfach ist das
Mitglied: rababar2014
rababar2014 14.06.2017 um 10:27:24 Uhr
Goto Top
Die Basis des Codes ist mir schon klar.

Die beiden Probleme waren eigentlich nur, dass die Variable $username mit der falschen Schreibweise im SQL-Query definiert war und dass ich versucht habe, den Inhalt über eine "while" -Schleife auszugeben. Der query-string mysql_fetch_array ist aber veraltet und der alternative pdo-query scheint noch einen syntax-fehler zu haben.

Mit einer foreach-Scheife gehts aber auch.