Frage

Ich bin in den Anfängen der Lehre mich php. Ich bin mir Mikro-Projekte zu geben, mich zu drücken.

So weit ich habe eine MySQL-Datenbank, durch ein PHP-Formular erstellt. Eine Spalte ist für Karma. Ich habe die Werte der Datenbanktabelle Anzeige in einer HTML-Tabelle, und am Ende jeder Zeile, würde ich einen Klick auf einem Hyperlink mögen, kann ein Pluszeichen sagen, diese Zeile Karma Ebene um 1. Dann wird das Pluszeichen zu erhöhen weggehen würde.

I soll, dass jede Zeile eine ganze Zahl Autoinkrement als Primärschlüssel hat.

War es hilfreich?

Lösung

Für dieses Beispiel nehmen wir an, Sie auf so Antworten sind abstimmen. Dies wird mindestens drei Tabellen benötigen:

Nutzer , Antworten , Stimmen

Die Stimmen Tabelle hält die ganze Geschichte:

voteid | userid | answerid | value
----------------------------------
   1   |   12   |   383    |   1
   2   |   28   |   383    |  -1  (negative number would require signed values)

In diesem Beispiel sehen wir, dass zwei Stimmen aufgezeichnet wurden. Benutzer 12 und 28 stimmten beide auf Antwort 383. User-12 waren begeistert und fügte hinzu 1 zu ihrer Unterstützung. Benutzer 28 nicht mochte es, und subtrahiert 1 von seiner Unterstützung.

Jedesmal, wenn ein Benutzer Stimmen, sollten Sie zunächst prüfen, ob der Benutzer hat bereits auf diese bestimmte Frage gestimmt. Wenn sie haben, können Sie alle weiteren Versuche ablehnen zu stimmen, oder überschreiben ihre alten Abstimmung mit einer neuen.

SELECT * 
FROM votes 
WHERE (userid = 12) 
  AND (answerid = 383)

Das ist ein sehr einfaches Beispiel Abfrage, die Ihnen sagen, ob der Benutzer bereits oder nicht gestimmt hat. Wenn es Aufzeichnungen gibt, wissen Sie, sie gestimmt haben. Sie können mit einem sehr schönen reagieren „Sorry, Sie haben bereits abgestimmt.“ Nachricht, oder Sie können es überschreiben:

UPDATE votes 
SET value = $votevalue 
WHERE (userid = 12) 
  AND (answerid = 383)

Having said that, schauen wir uns an, wie SO erreicht dies:

Wenn Sie die oben-vote Pfeil klicken, feuert SO eine Anfrage aus, um einen URL wie folgt aus:

    http://stackoverflow.com/posts/1303528/vote/2

In dieser URL können wir die Abstimmung siehe Beitrag # 1303528 gegossen wird. Und der Stimme-Typ wird durch 2 dargestellt Diese 2 wahrscheinlich repräsentiert „hinzufügen.“ Sie könnten eine weitere grundlegende URL, verwenden und gehen Sie mit so etwas wie:

    vote.php?answerid=383&vote=1

Die vote.php Seite würde Code ähnlich den folgenden:

(Warnung: Verwenden Sie diesen Code nicht als Service-Leistung Es soll ein Beispiel sein, keine Lösung.)

if ($_GET) {

  $userid   = $_SESSION["userid"]; // assumes the user is logged in via SESSIONS
  $answerid = $_GET["answerid"];
  $votetype = $_GET["vote"];

  $query = "SELECT * 
            FROM votes 
            WHERE (userid = {$userid}) 
              AND (answerid = {$answerid})";

  $result = mysql_query($query) or die(mysql_error());

  if (mysql_num_rows($result) > 0) {
    # User has voted
    print "Sorry, you are only allowed one vote.";
  } else {
    # User has not voted, cast the vote
    $query = "INSERT INTO votes (userid, answerid, votevalue)
              VALUES({$userid},{$answerid},{$vote})";
    $result = mysql_query($query) or die(mysql_error());
    if (mysql_affected_rows($result) > 0) {
      print "Your vote has been recorded.";
    }
  }

}

Andere Tipps

Ich persönlich mag Jonathan Antwort.

Wenn Sie jedoch das Gefühl, dass Sie weitere Informationen benötigen, ich könnte in der Lage sein, zu helfen.

Als kleines Nebenprojekt habe ich versucht, wie bash.org für meine Universität ein Angebot Datenbank zu machen.
Es wurde mit MySQL und PHP entwickelt, es hat Entsendung / Abstimmung viel wie das, was Sie versuchen zu erreichen.
Es ist keineswegs eine gut gestaltete Web-App. Allerdings könnte es in der Lage sein, Sie gehen in die richtige Richtung zu bekommen.

Live-Tests Website : Link (! Sanft sein)

Code-auf GitHub : Link

Ich würde einen Blick auf die Datenbankschema , php - db-Integration und die ajax eine Abstimmung zu aktualisieren.

Der Code ist ziemlich einfach und gerade Vorwort. Eine Sache von Bedeutung ist das „ filter_input “ s, Diese Funktionen sind von einer PHP-Bibliothek auf Benutzereingaben zu sanieren, um SQL-Injektionen zu verhindern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top