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

Arbeiten mit Arrays in Datenbanken

Nikas3D

Neues Mitglied
Mein Ziel
Ich habe einen Blog programmiert. Blogs soll man "like" können.
Dafür gitb es einen entsprechendeb Button. Wenn man diesen Button drückt wird über AJAX eine PHP Funktion aufgerufen.
Diese Funktion soll, wenn man der erste "Liker" ist die Userid in die Spalte like in der Tabelle blogs schreiben.
Wenn ein zweiter User "Liken" möchte, soll die vorhandene UserId aus der Spalte like hheruasgelsesen werden und die Userid des anderen Users hinzugefügt werden. Ziel ist dann das in der Splate like steht z.B: 1, 2, 3 Und dadurch durch eine weitere Abfrage welcher vorher passiert verhindert wird, das ein User 2 mal "liked"


Idee
  • [SUB]Button KLICK[/SUB]
  • Rauslesen aller "Liker" aus DB
  • Überprüfen ob die eigene UserID in der DB steht
  • wenn ja: abbruch
  • wenn nein: EigeneId in DB eintragen
Umsetzung

PHP:
$blog_id = sichern($_GET['like_id'], 1, 1);
    $abfrage1 = mysql_query("SELECT `like` FROM `blog` WHERE  blog_id = ".$blog_id);
    Fehler();
    $row1 = mysql_fetch_object($abfrage1);
    $akt_like = $row1->like;
// Aktuelle Like_id auslesen

$DeinArray = unserialize($data);
// Umwandeln in Array
//--> Wie kann ich jetzt die $user_id (Beispielsweise) zum Array hinzufügen

$data = serialize($DeinArray);
// in textkette umwandeln und wieder in datebnak eintragen

    mysql_query("UPDATE `blog` SET `like` = ".$neu_like." WHERE blog_id = ".$blog_id);
    Fehler();


Meine Fragen
Wie kann ich die Stelle mit
/--> lösen
ist meine IDee üerhaupt umsetzbar

 
Werbung:
Wenn man diesen Button drückt wird über AJAX eine PHP Funktion aufgerufen.
Das hatte ich dir schon mal erklärt, dass das so nicht stimmt. Du kannst keine PHP Funktion mit JS aufrufen, sondern du machst einen Request an den Server, dieser startet - je nach Konfiguration - dann evtl. eine PHP Datei und dort wirst du vermutlich anhand eines Parameters, den du mit dem Request übergeben hast, eine Funktion aufrufen.

Ansonsten widersprechen deine Überlegungen, jeglicher Datenbanklogik. Deine Überlegungen zeigen, dass du keinerlei Grundlagen eines Datenbankdesigns kennst. Solange du das nicht geändert hast würde ich mir vorerst keine Gedanken über sowas machen.
 
Das mit dem Button habe ich schon längst selber geschafft!
Es geht jetzt darum zu veruschen, dass niemand 2 mal liken kann!
 
Werbung:
Das mit dem Button habe ich schon längst selber geschafft!
Es geht jetzt darum zu veruschen, dass niemand 2 mal liken kann!
Das ist mir schon klar, aber wie gesagt dein Ansatz zeigt, dass du dich nicht damit auseinandergesetzt hast, was Datenbanken können und was nicht und wie man sie benutzt.

Mir ist nicht ganz klar, was du mit "liken" erreichen willst. Das ist ja so ein komischer Facebook Begriff, aber da ich keinen zusammenhang mit FB erkennen kann, nehme ich an, du wilst eine Art Bewertungsystem für deinen Blog schreiben. Dann brauchst du eine Tabelle, mit den Spalten: ID_BLOGEINTRAG, USER_ID und beim eintragen schaust du nach, ob der user für diesen Blogeintrag schon einen Eintrag hat, wenn nicht fügst einfach einen Datensatz ein. Das mit dem serialisieren ist absolut überflüssig

EDIT: und das du das mit Button geschafft hast, ist mir klar, mir ging es um die falsche Verwendung des Ausdrucks "eine PHP Funktion starten"
 
Ja, was du brauchst, ist eine Many-to-many-Relation (m:n) zwischen einer Entität user und einer Entität entry.

Code:
user:

  +----+-------+
  | id | name  |
  +----+-------+
  |  1 | Fritz |
  |  2 | Susi  |
  |  3 | Merle |
  +----+-------+
    
entry:

  +----+-------------+---------------------+
  | id | title       | content             |
  +----+-------------+---------------------+
  |  1 | Hallo Welt  | Mein erster Eintrag |
  |  1 | Nummer zwei | Noch ein Eintrag    |
  +----+-------------+---------------------+
    
user_likes_entry:

  +---------+----------+
  | user_id | entry_id |
  +---------+----------+
  |       1 |        1 |
  |       2 |        1 |
  |       3 |        1 |
  |       2 |        2 |
  |       3 |        2 |
  +---------+----------+

An die gewünschten Informationen kommst du dann über Joins.
 
ok ich dachte vielleicht ohne eine neue tabelle anlegen zu müssen, geht das auch!
Aber danke, ich werde dann mit einer neuen Tabelle arbeiten!
 
Werbung:
Na ja, was heißt, es geht auch… Vieles geht, aber vieles davon ist total ungünstig und deshalb falsch. Bei deiner serialisierten Variante (= mehrere IDs in einem Feld speichern) wird es etwa sehr teuer, herauszufinden, welche Einträge ein bestimmter Nutzer mit einem „Like“ versehen hat, da für jedwede Arbeit mit den Daten zuerst die Serialisierung aufgehoben werden muss, was praktisch immer einen Full table scan zur Folge hat, und wahrscheinlich sogar eine Nachbearbeitung jedes Datensatzes mit PHP erfolgen muss.

Das ist in etwa so effizient, als würdest du, wenn du nach Dortmund willst, jeden Ort in Deutschland anfahren (bei Dortmund nicht stoppend – es könnten ja mehrere so heißen), dir den Namen und die Route merken und am Ende den Ort anfahren, der Dortmund heißt. Das geht, ist aber natürlich absoluter Schwachsinn.

Ein normalisiertes Datenbankschema mit passend gesetzten Indizes ist dagegen ein Navigationsgerät.
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben