• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP User in Freundesliste abspeichern

lokoroko

Mitglied
Hallo,

ich bastel mal wieder an einem Script und ich hoffe das aus der Überschrift schon so ein wenig klar wird was ich meine. Man kennt es auf jeder Social-Media Plattform das man anderen Usern "folgen" kann bzw. mit ihnen befreundet sein kann.

Ich habe dazu einen Code geschrieben der mir dabei helfen soll. An sich funktioniert dieser auch doch es gibt zwei Probleme auf die ich gleich noch eingehen möchte aber zu aller erst der Code :)

Code:
<form method="post" >
<?php

$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hund456');
$sql = "SELECT iduser, followed FROM abonennten";
foreach ($pdo->query($sql) as $row) {
    if ($row['iduser'] == $userid && $row['followed'] == $user) {
       echo '<input type="submit" name="Entfolgen" value="Entfolgen">';
      } else  {
        echo '<input type="submit" name="Folgen" value="Folgen">';
    }
    }

if ($_POST["Folgen"]) {

$statement = $pdo->prepare("INSERT INTO abonennten (id ,iduser, followed) VALUES (NULL, '$userid', '$user')");
$statement->execute();
}
   
if ($_POST["Entfolgen"]) {
   
    $statement = $pdo->prepare("DELETE FROM `abonennten` WHERE iduser = '$userid' AND followed = '$user'");
    $statement->execute();
}
?>
</form>

Also das Hauptproblem liegt in diesen Zeilen:

if ($row['iduser'] == $userid && $row['followed'] == $user) {
echo '<input type="submit" name="Entfolgen" value="Entfolgen">';
} else {
echo '<input type="submit" name="Folgen" value="Folgen">';
}

Letztendlich möchte ich folgendes. Wenn ein User einem anderen User bereits folgt, dann soll ein Button/input-Feld mit "Entfolgen" angezeigt werden.

Besucht ein User einen anderen User zum ersten mal oder folgt ihm noch nicht, soll ein "Folgen" Button angezeigt werden.

Zu aller erst habe ich das Problem das wenn noch nicht ein einziger Eintrag in der Tabelle vorliegt, auch kein Button angezeigt wird. Weder folgen noch entflogen...
Zudem gab es dann das Problem das sobald ich mehr als einem User gefolgt bin, bei jedem User dem ich folgte sowohl der folgen als auch der entflogen Button mit angezeigt wurde...

Also hatte ich mir überlegt was ich machen kann und habe dann den Code ein wenig umgeschrieben:

Code:
<form method="post" >
<?php

$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hund456');
$sql = "SELECT iduser, followed FROM abonennten";
$boom = $pdo->query($sql)->fetch();
    if ($boom['iduser'] == $userid && $boom['followed'] == $user) {
       echo '<input type="submit" name="Entfolgen" value="Entfolgen">';
      } else  {
        echo '<input type="submit" name="Folgen" value="Folgen">';
    }
   

if ($_POST["Folgen"]) {

$statement = $pdo->prepare("INSERT INTO abonennten (id ,iduser, followed) VALUES (NULL, '$userid', '$user')");
$statement->execute();
}
   
if ($_POST["Entfolgen"]) {
   
    $statement = $pdo->prepare("DELETE FROM `abonennten` WHERE iduser = '$userid' AND followed = '$user'");
    $statement->execute();
}
?>
</form>

Die Neuerung beziehent sich auf diese Zeilen:

$boom = $pdo->query($sql)->fetch();
if ($boom['iduser'] == $userid && $boom['followed'] == $user) {
echo '<input type="submit" name="Entfolgen" value="Entfolgen">';
} else {
echo '<input type="submit" name="Folgen" value="Folgen">';
}

Nun wird der "folgen" Button auch dann angezeigt wenn bisher kein Eintrag in der Tabelle existierte. Auch das Problem das beide Button auf einmal angezeigt werden hat sich hiermit erledigt. Neues Problem ist jetzt aber das dass ganze nur für den ersten User dem man folgt, einwandfrei funktioniert. Alle darauffolgenden Usern denen man folgt, werden zwar in die Tabelle eingetragen doch der Button verändert sich dahingehend nicht.

Also beim ersten User funktioniert es wie gesagt. Bei allen anderen Usern denen erst danach gefolgt wurde steht "folgen" obwohl bei jedem dem ich bereits folge, "entfolgen" stehen müsste :/


Ich hoffe es ist nicht all zu verwirrend und ihr versteht was das Problem ist. Wäre wirklich super falls jemand von euch eine Idee hätte was man tun kann :D
 
Werbung:
Wie handhabst du das denn in deiner Tabelle, wenn du mehr als einem User folgst?
Legst du noch eine Spalte an? Trennst du es mit Kommata?
 
Werbung:
Werbung:
Ich habe mit diesem Folgen Ding nicht viel Erfahrung, aber JEDES mal eine neue Spalte anzulegen halte ich für Sinnbefreit.
Warum nicht eine Spalte, in der dann die UserIDs mit Leerzeichen getrennt sind.

364 45 13...
 
Auf keinen Fall, das ist noch mehr sinnbefreit. Man nehme eine Tabelle mit drei Spalten
Code:
id    userid    follow
1      1          22
2      1          24
3      3          11
4      2          19


genau so siehts bei mir auch aus. Wäre tatsächlich quatsch das alles in eine Spalte zu schreiben @Aaron3219 ;)

Und ja ich trage immer eine neue Spalte in die Datenbank ein. Sieht im Endeffekt genau so aus wie in deinem Beispiel. Zum Error-Reporting...

Grundsätzlich würde ich ds gerne machen aber ich weiß nicht an welcher Stelle ich das machen soll. Letztendlich macht der Code ja was ich will. Das einzige was nicht will ist das sobald man einem User gefolgt ist, da dann immer noch der Button "Folgen" ausgelesen wird.

Dieses Problem muss mit diesen Zeilen zusammenhängen:
Code:
$boom = $pdo->query($sql)->fetch();
 if ($boom['iduser'] == $userid && $boom['followed'] == $user) {
 echo '<input type="submit" name="Entfolgen" value="Entfolgen">';
 } else {
 echo '<input type="submit" name="Folgen" value="Folgen">';
 }

Könnte es eventuell was mit dem fetch() zu tun haben ? Und wenn ich ein Error-Reporting mache, dann von was ?
 
Werbung:
Und ja ich trage immer eine neue Spalte in die Datenbank ein.
Das ist hochgradiger Quatsch! Bei mir würde keine Spalte hinzugefügt, sondern immer ein Datensatz hinzugefügt/gelöscht

Thema Error-Reporting: diese Zeilen an den Anfang des Scriptes:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);
 
Werbung:
Das ist hochgradiger Quatsch! Bei mir würde keine Spalte hinzugefügt, sondern immer ein Datensatz hinzugefügt/gelöscht

Thema Error-Reporting: diese Zeilen an den Anfang des Scriptes:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);

Sorry da hat es an der Wortwahl gehapert. Meine natürlich immer einen neuen Eintrag :D und das mit dem Error-Reporting werde ich machen aber ich vermute mal das dass bei diesem Code nichts bringen wird...
 
Also Error-Reporting gemacht und wie erwartet kam dabei nichts raus...

error_reporting(E_ALL); ini_set('display_errors', true);
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Library/WebServer/Documents/PHPversion/Profilline_Test.php:4) in /Library/WebServer/Documents/PHPversion/Profilline_Test.php on line 5

Das ist es was dabei ausgespuckt wird. Aber das hat ja nichts mit meinem Problem zu tun :/
 
Werbung:
Habe jetzt mal über var_dump($boom) was ausprobiert und da ist mir was interessantes bei aufgefallen. Folgendes wird angezeigt...


array(4) { ["iduser"]=> string(2) "29" [0]=> string(2) "29" ["followed"]=> string(2) "35" [1]=> string(2) "35" }

egal bei welchem User ich das mache.
 
Super so scheint es zu funktionieren. Der Code schaut nun so aus:

Code:
<?php

$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hund456');
$sql = "SELECT iduser, followed FROM abonennten WHERE iduser ='$userid' and followed = '$user'"; 
$boom = $pdo->query($sql)->fetch();
    if ($boom['iduser'] == $userid && $boom['followed'] == $user) {
       echo '<input type="submit" name="Entfolgen" value="Entfolgen">';
      } else  {
        echo '<input type="submit" name="Folgen" value="Folgen">';
    }


if ($_POST["Folgen"]) {

$statement = $pdo->prepare("INSERT INTO abonennten (id ,iduser, followed) VALUES (NULL, '$userid', '$user')");
$statement->execute();
}
    
if ($_POST["Entfolgen"]) {
    
    $statement = $pdo->prepare("DELETE FROM `abonennten` WHERE iduser = '$userid' AND followed = '$user'");
    $statement->execute();
}
?>

Die Buttons ändern sich jetzt je nach Status. Wird die Seite neu geladen verändert sich auch der Button. Kennst du eventuell eine einfache Möglichkeit mit der ich den Button direkt nach klick entsprechend umändern könnte ohne die Seite erst neu zu laden ?

Vermutlich würde ich bei sowas nicht an Javascript vorbei kommen oder ?
 
Die Reihenfolge vertauschen, erst Folgen oder Entfolgen setzen und dann die Buttons generieren?

Naja je nachdem was gerade gefragt ist. Sagen wir ich komme zum ersten mal auf die Seite eines Users und will dem jetzt folgen. Dann wird ja der Folgen Button generiert. Das funktioniert soweit auch.

Jetzt will ich aber bei klick auf Folgen direkt sichtbar machen das sich was getan hat. Also ich klicke auf Folgen und direkt danach soll sich der Button zu Entfolgen verändern...

Verstehst du was ich meine ?
 
Werbung:
Zurück
Oben