Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankeintrag per Button

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbankeintrag per Button

    Hallo Ihr lieben,

    meine php Kenntnisse sind bisher leider recht Bescheiden.
    Jetzt stellt sich mir ein Problem, bei dem ich Hilfe gebrauchen könnte.

    Ich betreibe für meine kleine Firma ein Intranet mit Joomla.
    Hier möchte ich jetzt unterhalb des Artikels einen Button einfügen, mit dem der User bestätigen kann, dass er diesen Beitrag gelesen hat.

    Im Endeffekt soll nach dem Klicken des Buttons "nur" der Username in die Spalte "Username" in der tabelle "jos_content_readconf" eingetragen werden.

    mit folgendem codeschnipsel funktioniert das:

    PHP-Code:
    <?php $result mysql_query("INSERT INTO jos_content_readconf (username) VALUES ('$user->name')"); ?>
    Allerdings wird das ja nun sofort in die Datenbank geschrieben, sobald der User den Artikel aufruft.

    Wie kann ich das ganze denn jetzt in ein Formular packen, bei dem diese Daten erst in die Datenbank geschrieben werden, wenn der User den "Senden" Button drückt?

    Vielen lieben Dank im voraus für die Hilfe

    Sven


  • #2
    Du erstellst einfach ein normales Formular (siehe http://de.selfhtml.org/html/formulare/) und packst deinen Code in die Formular-Auswertung. Dann muss das Formular erst gesendet werden, damit der Eintrag gespeichert wird.

    Kommentar


    • #3
      Es muß kein Formular sein, Du kannst das auch einfach per <a>-Tag lösen mit Übergabe der UserId als Parameter.
      Bei der Abfrage stellt sich mir allerdings die Frage: "Wo ist der Bezug zwischen User und Artikel"
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        Zitat von Arne Drews Beitrag anzeigen
        "Wo ist der Bezug zwischen User und Artikel"
        Ja, der müsste da noch mit rein. Es sei denn, es gibt nur diesen einen Artikel, der bestätigt werden soll.

        Kommentar


        • #5
          Zitat von bursch
          Es sei denn, es gibt nur diesen einen Artikel, der bestätigt werden soll.
          Das wäre heavy, dafür ein CMS wie Joomla zu verwenden...
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Ups, natürlich muss ja doch die Artikel ID ausgelesen werden. wie würde das denn dann in einem <a>- Tag ausschauen? Parameter wären dann wohl $user->name und $id. . . . Stehe heute irgendwie auf dem Schlauch.

            Kommentar


            • #7
              <a href="http://www.meinedomain.de/meinedatei.php?user=(username)&artikel=(artikelid) ">Mein Link</a>

              Edit: Wobei man prüfen müsste, ob der angegebene User wirklich der eingeloggte ist.

              Kommentar


              • #8
                Ok, Danke soweit erst mal Werde mir das Morgen nochmal anschauen. Heute brummt mir irgendwie der Kopf.

                Kommentar


                • #9
                  So, hier bin ich dann mal wieder

                  Ich habe es jetzt mit viel googeln und try&error hinbekommen, dass meine "Lesebestätigungsbutton" den Usernamen und die Artikel ID in die Datenbank einträgt.

                  Jetzt versuche ich, die Datenbank nach genau diesen Werten abzufragen.
                  Also, beim laden der Seite soll geprüft werden, ob der eingeloggte User diesen Artikel schon als gelesen markiert hat. Wenn ja, soll der Button verschwinden.

                  Aber irgendwie bin ich noch zu unwissend, um den Code richtig hinzukriegen.

                  Ich versuche es derzeit mit:

                  PHP-Code:
                  $user_name $user->name;
                  $K2Itemid JRequest::getInt('id');

                  $einlesen mysql_query("SELECT article_id, user_name FROM jos_content_readconf WHERE user_name='".$user_name."' AND article_id='".$K2Itemid."'" );
                  if(
                  mysql_num_rows($einlesen)==1) echo "ja";
                  else echo 
                  "nein"
                  Funktioniert aber leider nicht.
                  Kann mir hier jemand weiterhelfen?

                  LG Sven (Der sich jetzt erst mal ein PHP Buch besorgt)

                  Kommentar


                  • #10
                    Hallo,

                    so auf dem ersten Blick sieht das nicht verkehrt aus.
                    Stehen in deinen Variablen wirklich die Werte, die du erwartest?
                    Hast du die Query schon einmal so durch die Datenbank geschickt (per NaviCat oder PHPMyAdmin zB) und das erwartete Ergebnis bekommen?

                    Zum Thema Buch:
                    http://www.php.de/php-einsteiger/110...tml#post812732


                    Standardtext für die Datenbankverbindung:
                    Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt. Zudem ist deine Query anfällig für SQL-Injections (aktuell nicht, aber falls du Variablen in dein Insert nimmst).
                    Durch einen Wechsel auf mysqli_* oder PDO greifst du aufdie modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections wirken.
                    Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
                    Relax, you're doing fine.
                    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                    Kommentar


                    • #11
                      Ha, das wars schon! Eine der Variablen war falsch. Nochmal ein bischen gegoogelt, jetzt klappts! Danke

                      Und Danke auch für den Buch Tipp

                      Kommentar


                      • #12
                        So, jetzt habe ich leider schon wieder ein Problem, bei dem ich nicht weiterkomme.

                        Also:

                        Ich habe 2 tabellen:

                        jos_k2_users mit u.a. dem feld "userName"

                        jos_content_readconf mit den feldern "user_name" und "article_id".

                        In der tabelle k2_users sind ALLE user im System mit usernamen hinterlegt.
                        In der tabelle content_readconf sind nur die User hinterlegt, die einen Artikel als gelesen markiert haben. Hier wurde dann der username sowie die Artikel ID eingetragen.

                        Jetzt möchte ich gerne eine Abfrage machen, welche User diesen Artikel noch NICHT gelesen haben, also eben nicht mit dieser Artikel ID in der tabelle content_readconf vertreten sind.

                        die Variable $K2Itemid fragt immer die aktuelle ID des Artikels ab.
                        Ich weiß zumindest, dass hier wohl eine Abfrage mit LEFT JOIN gemacht werden muss.
                        Aber ich weiß leider nicht, wie genau die Abfrage auszusehen hat.
                        Kann mir hier bitte jemand weiterhelfen?

                        LG

                        Sven

                        Kommentar


                        • #13
                          jos_content_readconf mit den feldern "user_name" und "article_id"
                          user_id und article_id wäre sinnvoller.
                          Ich weiß zumindest, dass hier wohl eine Abfrage mit LEFT JOIN gemacht werden muss.
                          Eben da müssest Du in Deinem Fall über user_name joinen:
                          Code:
                          SELECT
                              tabelle1.spalte_a,
                              tabelle1.spalte_b,
                              ...
                          FROM
                              tabelle1
                          LEFT JOIN
                              tabelle2 ON tabelle1.user_name = tabelle2.user_id
                          wie gesagt, user_id ( INDEX oder sogar PRIMARY KEY ) wäre besser.
                          Es geht aber auch über WHERE NOT IN ( hier mit user_id als Beispiel ):
                          Code:
                          SELECT
                              tabelle1.spalte_a,
                              tabelle1.spalte_b,
                              ...
                          FROM
                              tabelle1
                          WHERE
                              tabelle1.user_id NOT IN (
                                  SELECT user_id FROM tabelle2 WHERE article_id = ?
                              )
                          Competence-Center -> Enjoy the Informatrix
                          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                          Kommentar


                          • #14
                            Super, vielen Dank für die schnelle Antwort und Hilfe Werde das ganze jetzt wirklich mit der UserID verbinden. Sollte es mal 2 user mit dem gleichen Namen geben, gucke ich ja Dumm aus der Wäsche

                            Kommentar


                            • #15
                              Unique Constraint Index
                              GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                              Kommentar

                              Lädt...
                              X