HILFE mit Checkboxen

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

  • HILFE mit Checkboxen

    Hallo, Mahlzeit

    da ich nicht mehr weiter komme hoffe ich hier auf Eure Hilfe.
    Was ich erreichen will, ist :

    habe eine "interessen.php" und eine "updateinteressen.php" und eine Mysql-datenbank "interessen".

    Als erstes mal die Frage, wie soll ich die Datenbank aufbauen? Reicht es mit 1.Feld "username" und 2.Feld "interessen". (Denn ich habe ca. 50 Interessen, die dann herausgegebenen werden sollen). Oder muß ich in der Datenbank jedem Interessen ein Feld geben? Wäre sehr aufwendig.

    Die Tabelle "interessen" in der Datenbank ist leer. Wenn der User die interessen.php aufruft, kann er seine Interessen anklicken. Wenn er dann action drückt sollen dann die Interessen in der Datenbank erscheinen. Wenn er dann die interessen.php wieder aufruft erscheinen dann die von Ihm vorher angeklickten Interessen.

    Meine interessen.php:

    <?
    $link = mysql_pconnect("localhost","root","");
    mysql_select_db("portal",$link);
    $query="select * from interessen where username='$PHP_AUTH_USER'";
    $result=@mysql_db_query("portal",$query,$link);
    mysql_close ($link);

    ?>

    <form method="post" action="updateinteressen.php">

    <input type="checkbox" name="interessen[]" value="chat"> Chat<br>
    <input type="checkbox" name="interessen[]" value="hardware"> Hardware<br>
    <input type="checkbox" name="interessen[]" value="office"> Office<br>
    usw.

    Und dann die updateinteressen.php:

    <?php

    $link = mysql_pconnect("localhost","root","");
    mysql_select_db("portal",$link);
    $mysql = "UPDATE interessen SET interessen='$interessen' WHERE username='$PHP_AUTH_USER'";
    $result=@mysql_db_query("portal",$mysql,$link);
    mysql_close ($link);

    echo "Ihre Interessen wurden aktualisiert.\n";

    ?>

    Ich glaube irgendwie fehlt der Anschluß und ich hoffe daß mir jemand einen guten Tipp geben kann. Wäre für jede Hilfe dankbar.

    Danke
    Xaroc
    ************************
    Das Portal zum Geld verdienen
    ************************

  • #2
    Ich empfehle dir, zwei Tabellen zu benutzen.

    In einer Tabelle INTERESSEN sind einfach alle möglichen Interessen aufgelistet: Primary key 'ID' mit auto_increment, Varchar 'TEXT' mit Beschreibung.

    In der zweiten Tabelle ordnest du dann einer Person mit jedem Datensatz ein Interesse zu: PER_ID,INT_ID mit Primary Key über beide und foreign keys über PER_ID.

    Hier die MySQL-Queries zum Erzeugen der Tabellen:
    Code:
    CREATE TABLE Int2Per (
      PER_ID BIGINT UNSIGNED not null ,
      INT_ID BIGINT UNSIGNED not null ,
      PRIMARY KEY (PER_ID, INT_ID),
      INDEX (PER_ID)
    );
    CREATE TABLE Interessen (
      ID BIGINT UNSIGNED not null AUTO_INCREMENT,
      TEXT VARCHAR (30) not null ,
      PRIMARY KEY (ID)
    );
    Zum Aktualisieren dann einfach
    Code:
    mysql_query ('delete from Int2Per where PER_ID='.$person_id);
    for ($i=0; $i<count($interessen); $i++)
      mysql_query ('insert into Int2Per set PER_ID='.$person_id.', INT_ID='.$interessen[$i]);
    Dementsprechend mußt du dann natürlich noch dein Formular umbauen, so daß die Values die passenden IDs aus der Interessen-Tabelle sind.
    Durch die Tabelle läßt sich dann aber auch das Select einfach per php aufbauen:

    Code:
    // gegenwärtig eingetragene Interessen holen
    // eigene Schleife um DB möglichst gering zu belasten
    $q = mysql_query ('select INT_ID from Int2Per where PER_ID='.$person_id);
    $interessen = array();
    while ($r = mysql_fetch_row ($q))
      $interessen[$r[0]] = true;
    
    // alle Interessen holen und Checkboxen ausgeben
    $q = mysql_query ('select ID,TEXT from Interessen');
    while ($x = mysql_fetch_array($q))
      echo '<input type="checkbox" name="interessen[]" ', ($interessen[$x['ID']?'checked ':''),'value="',$x['ID'],'">',$x['TEXT'],"<br>\n";
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Danke

      Danke,

      habe alles soweit erledigt. Aber es funkt nicht so ganz oder ich habe etwas falsch verstanden.
      Beide Tabellen existieren.
      Wen meinst Du mit '.$person_id'?. Ist das die Person zu denen gerade die Interessen gehören.

      "In der zweiten Tabelle ordnest du dann einer Person mit jedem Datensatz ein Interesse zu: PER_ID,INT_ID mit Primary Key über beide und foreign keys über PER_ID."
      - was meinst Du damit? verstehe ich nicht ganz.

      echo '<input type="checkbox" name="interessen[]" ', ($interessen[$x['ID']?'checked ':''),'value="',$x['ID'],'">',$x['TEXT'],"<br>\n";
      In dieser Zeile besteht irgendwie ncoh ein Fehler. Ich habe die ID und TEXT mit den Werten ersetzt.

      Kannst Du mir nochmals helfen??

      Danke

      ************************
      Das Portal zum Geld verdienen
      ************************

      Kommentar


      • #4
        Wen meinst Du mit '.$person_id'?. Ist das die Person zu denen gerade die Interessen gehören.

        ganz genau


        "In der zweiten Tabelle ordnest du dann einer Person mit jedem Datensatz ein Interesse zu: PER_ID,INT_ID mit Primary Key über beide und foreign keys über PER_ID."
        - was meinst Du damit? verstehe ich nicht ganz.


        Du hast in dieser Tabelle für jede angeklickte Checkbox einen Datensatz. Hat also User 1 (PER_ID=1) die ersten beiden gecheckt, dann hast du für ihn zwei Datensätze in der Tabelle Int2Per: einer mit INT_ID=1, einer mit INT_ID=2, beide mit PER_ID=1.

        Der "Primary Key" ist der Hauptschlüssel einer Tabelle und sollte in jeder Tabelle einer Datenbank vorhanden sein. Mit dem Attribut "auto_increment" sorgst du im allgemeinen dafür, daß dieser Schlüssel beim Einfügen eines Datensatzes automatisch vergeben wird.
        Bei Zuordnungstabellen wie der um die es hier geht setzt man den Primary Key über beide IDs der fremden Tabellen, denn keine der beiden muß in dieser Tabelle eindeutig sein; lediglich jedes Wertepaar darf nur einmal vorkommen.

        Das setzen eines "Foreign Key" beschleunigt das Suchen und Sortieren nach einer Spalte.


        echo '<input type="checkbox" name="interessen[]" ', ($interessen[$x['ID']?'checked ':''), 'value="', $x['ID'],'">', $x['TEXT'], "<br>\n";
        In dieser Zeile besteht irgendwie ncoh ein Fehler. Ich habe die ID und TEXT mit den Werten ersetzt.


        echo '<input type="checkbox" name="interessen[]" ', ($interessen[$x['ID']]?'checked ':''), 'value="',$x['ID'], '">',$x['TEXT'], "<br>\n";
        stimmt ... eine eckige Klammer (vor 'checked ') wurde nicht geschlossen.


        Danke
        Bitte, bitte.

        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          ich bin zu doof

          SORRY,

          habe immer noch nicht so ganz verstanden.
          Die '.$person_id' ist bei mir der User der gerade eingeloggt ist und seine Interessen ändern kann. Der User heißt bei mir 'PHP_AUTH_USER' und hat das Feld: username in der Tabelle: user. Das heißt doch man muß zuerst den eingeloggten User auswählen. Ein Feld username gibt es ja nicht in der Tabelle interessen oder int2per. Wie soll dann die Interessen für den denjenigen User ausgewählt werden der gerade eingeloggt ist?

          So sieht im Moment meine interessen.php aus:

          <?
          $link = mysql_pconnect("localhost","root","");
          mysql_select_db("portal",$link);

          // gegenwärtig eingetragene Interessen holen
          // eigene Schleife um DB möglichst gering zu belasten
          $q = mysql_query ('select int_id from int2per where per_id='.$person_id);
          $interessen = array();
          while ($r = mysql_fetch_row ($q))
          $interessen[$r[0]] = true;

          // alle Interessen holen und Checkboxen ausgeben
          $q = mysql_query ('select id,text from interessen');
          while ($x = mysql_fetch_array($q))

          mysql_close ($link);

          ?>

          <form method="post" action="updateinteressen.php">

          <? echo '<input type="checkbox" name="interessen[]" ', ($interessen[$x['1']]?'checked ';''), 'value="',$x['1'], '">',$x['Chat'], "<br>\n"; ?>

          <input type="submit" value="Interessen speichern">

          </form>


          <? echo '<input type="checkbox" name="interessen[]" ', ($interessen[$x['1']]?'checked ';''), 'value="',$x['1'], '">',$x['Chat'], "<br>\n"; ?>
          Zeigt ein PARSE ERROR AN.

          Bitte nochmals um Hilfe! Was mache ich falsch?
          ************************
          Das Portal zum Geld verdienen
          ************************

          Kommentar


          • #6
            würde ich auch anzeigen....

            deine Abfrage, ob gecheckt oder nicht, war keine richtige Abfrage. Vielleicht klappts so...

            <input type="checkbox" name="interessen[]" <? if ($interessen[$x['1']]) echo " checked";?>value=<? echo $x['1'];?>"><? echo $x['Chat'];?><br>

            Kommentar


            • #7
              Danke BrainBug

              Hallo BrainBug,

              schön mal wieder was von Dir zu hören.
              Ich habe aber das Problem schon ganz anderst gelöst. Es funkt so wie ich es wollte und nur mit einer Tabelle.

              Aber trotzdem Danke für Deinen Hinweis.

              Bis bald mal wieder
              Xaroc
              ************************
              Das Portal zum Geld verdienen
              ************************

              Kommentar

              Lädt...
              X