Jan: Updaten von Auswahlfeldern

Guten Abend,

ich zerbreche mir jetzt seit Std den Kopf, wie ich die Auswahlfelder per Update auch in die Datenbank bekomme, ich habe hierzu genommen wie auch schon beim einfügen, genau dasselbe Script, habe nur den SQL Befehl geändert. Sieht wie folgt aus.

Im Formular heissen die Input Felder alle Interessen numeriert von 1 - 9 die durch Variable i dann ja auch "geplust" wird Mein Vorhaben wenn die Checkbox deaktiviert wird sollte es ja false werden also sollte in die Datenbank 'N' eingetragen werden, allerdings bekomme ich auch bei true keinen Eintrag

Formular:
<tr>
  <td width="175"><b>Interessen:</b>
  <td><input type="checkbox" value="Y" name="Interessen1" <? if($idata[1] == "Y") echo "checked"; ?>>&nbsp;Fernsehen</td>
  <td><input type="checkbox" value="Y" name="Interessen2" <? if($idata[2] == "Y") echo "checked"; ?>>&nbsp;Kino</td>
  <td><input type="checkbox" value="Y" name="Interessen3" <? if($idata[3] == "Y") echo "checked"; ?>>&nbsp;Freunde treffen</td>
<tr>
  <td>&nbsp;</td>
  <td><input type="checkbox" value="Y" name="Interessen4" <? if($idata[4] == "Y") echo "checked"; ?>>&nbsp;Flirten</td>
  <td><input type="checkbox" value="Y" name="Interessen5" <? if($idata[5] == "Y") echo "checked"; ?>>&nbsp;Computer</td>
  <td><input type="checkbox" value="Y" name="Interessen6" <? if($idata[6] == "Y") echo "checked"; ?>>&nbsp;Disco/Partys</td>
<tr>
  <td>&nbsp;</td>
  <td><input type="checkbox" value="Y" name="Interessen7" <? if($idata[7] == "Y") echo "checked"; ?>>&nbsp;Sport</td>
  <td><input type="checkbox" value="Y" name="Interessen8" <? if($idata[8] == "Y") echo "checked"; ?>>&nbsp;Musik</td>
  <td><input type="checkbox" value="Y" name="Interessen9" <? if($idata[9] == "Y") echo "checked"; ?>>&nbsp;Musik machen</td>
<tr>
  <td>&nbsp;</td>
  <td colspan="4">&nbsp;</td>

PHP Script:
$p=0;
$add = "";
for($i=1; $i<9; $i++) {
if($_POST['Interessen'.$i]) {
  $p++;
  $add .= ", inte$i='Y'";
  $text.=$_POST['Interessen'.$i];
} else {
  $add .= ", inte$i='N'";
}
}

mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

  1. Guten Abend,

    ich zerbreche mir jetzt seit Std den Kopf, wie ich die Auswahlfelder per Update auch in die Datenbank bekomme, ich habe hierzu genommen wie auch schon beim einfügen, genau dasselbe Script, habe nur den SQL Befehl geändert. Sieht wie folgt aus.

    Im Formular heissen die Input Felder alle Interessen numeriert von 1 - 9 die durch Variable i dann ja auch "geplust" wird Mein Vorhaben wenn die Checkbox deaktiviert wird sollte es ja false werden also sollte in die Datenbank 'N' eingetragen werden, allerdings bekomme ich auch bei true keinen Eintrag

    Formular:
    <tr>
      <td width="175"><b>Interessen:</b>
      <td><input type="checkbox" value="Y" name="Interessen1" <? if($idata[1] == "Y") echo "checked"; ?>>&nbsp;Fernsehen</td>
      <td><input type="checkbox" value="Y" name="Interessen2" <? if($idata[2] == "Y") echo "checked"; ?>>&nbsp;Kino</td>
      <td><input type="checkbox" value="Y" name="Interessen3" <? if($idata[3] == "Y") echo "checked"; ?>>&nbsp;Freunde treffen</td>
    <tr>
      <td>&nbsp;</td>
      <td><input type="checkbox" value="Y" name="Interessen4" <? if($idata[4] == "Y") echo "checked"; ?>>&nbsp;Flirten</td>
      <td><input type="checkbox" value="Y" name="Interessen5" <? if($idata[5] == "Y") echo "checked"; ?>>&nbsp;Computer</td>
      <td><input type="checkbox" value="Y" name="Interessen6" <? if($idata[6] == "Y") echo "checked"; ?>>&nbsp;Disco/Partys</td>
    <tr>
      <td>&nbsp;</td>
      <td><input type="checkbox" value="Y" name="Interessen7" <? if($idata[7] == "Y") echo "checked"; ?>>&nbsp;Sport</td>
      <td><input type="checkbox" value="Y" name="Interessen8" <? if($idata[8] == "Y") echo "checked"; ?>>&nbsp;Musik</td>
      <td><input type="checkbox" value="Y" name="Interessen9" <? if($idata[9] == "Y") echo "checked"; ?>>&nbsp;Musik machen</td>
    <tr>
      <td>&nbsp;</td>
      <td colspan="4">&nbsp;</td>

    PHP Script:
    $p=0;
    $add = "";
    for($i=1; $i<9; $i++) {
    if($_POST['Interessen'.$i]) {
      $p++;
      $add .= ", inte$i='Y'";
      $text.=$_POST['Interessen'.$i];
    } else {
      $add .= ", inte$i='N'";
    }
    }

    mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

    Gruß Jan

    1. Probiere doch wirklich mal den SQL String aus geben zu lassen.

      Ändere deinen SQL Teil

      mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

      in

      $sql="UPDATE user_interessen SET ".$add." WHERE uid='".$uid."'";
      echo "<br><hr>SQL_STRING:".$sql."<br><hr>";
      mysql_query($sql);

      Dann Poste doch bitte mal den String der da ausgegeben wird, dann können wir auch viel leichter schauen, was dein Script da genau zusammen baut.

      Gruß
      Schnaps

      1. Hi Schnaps,

        $sql="UPDATE user_interessen SET ".$add." WHERE uid='".$uid."'";
        echo "<br><hr>SQL_STRING:".$sql."<br><hr>";
        mysql_query($sql);

        In Arbeit:

        Dann Poste doch bitte mal den String der da ausgegeben wird, dann können wir auch viel leichter schauen, was dein Script da genau zusammen baut.

        Heraus kommen tut dabei dass er wohl nur Inte9 auf true setzt??

        SQL_STRING:UPDATE user_interessen SET inte9='Y' WHERE uid='7'

        Gruß Jan

        1. Hi an alle die mich hier unterstütz habeb habe eine Lösung gefunden, ich bedanke mich!

          Gruß Jan

  2. Huhu Jan

    $p=0;
    $add = "";
    for($i=1; $i<9; $i++) {
    if($_POST['Interessen'.$i]) {
      $p++;
      $add .= ", inte$i='Y'";
      $text.=$_POST['Interessen'.$i];
    } else {
      $add .= ", inte$i='N'";
    }
    }

    mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

    Mmmmmh, Deine Variable "$add" beginnt in jedem Fall mit einem Komma.
    Das muss einen SQL-Fehler geben.
    Also mysql_query() immer nur mit Fehlerbehandlung.

    mysql_query($query) OR die ('Ups, hat nicht geklappt weil ...'.mysql_error());

    Abgesehen davon ist Dein Ansatz etwas umständlich, Du solltest Dich mit Arrays beschäftigen.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Huhu

      Huhu Jan

      $p=0;
      $add = "";
      for($i=1; $i<9; $i++) {
      if($_POST['Interessen'.$i]) {
        $p++;
        $add .= ", inte$i='Y'";
        $text.=$_POST['Interessen'.$i];
      } else {
        $add .= ", inte$i='N'";
      }
      }

      mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

      Mmmmmh, Deine Variable "$add" beginnt in jedem Fall mit einem Komma.
      Das muss einen SQL-Fehler geben.
      Also mysql_query() immer nur mit Fehlerbehandlung.

      mysql_query($query) OR die ('Ups, hat nicht geklappt weil ...'.mysql_error());

      Abgesehen davon ist Dein Ansatz etwas umständlich, Du solltest Dich mit Arrays beschäftigen.

      Viele Grüße

      lulu

      Viele Grüße

      lulu

      --
      bythewaythewebsuxgoofflineandenjoytheday
      1. Huhu

        ... mit den vielen Knöppen am PC.
        Sorry, da habe ich geprellt.
        Kann also gelöscht werden.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
    2. Huhu Jan

      $p=0;
      $add = "";
      for($i=1; $i<9; $i++) {
      if($_POST['Interessen'.$i]) {
        $p++;
        $add .= ", inte$i='Y'";
        $text.=$_POST['Interessen'.$i];
      } else {
        $add .= ", inte$i='N'";
      }
      }

      mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

      Mmmmmh, Deine Variable "$add" beginnt in jedem Fall mit einem Komma.

      Tut sie nicht, (oder tut sie es doch?) es kann eigentlich nicht sein, dass es nen SQL fehler gibt... da ich mit genau den gleichen Variablen und dem selben Script ja schon bei der Anmeldung arbeite...
      und da geht es einwandfrei...

      mysql_query($query) OR die ('Ups, hat nicht geklappt weil ...'.mysql_error());

      Ich weiss... aber nein ist nicht!!!

      1. Huhu Jan

        Mmmmmh, Deine Variable "$add" beginnt in jedem Fall mit einem Komma.
        Tut sie nicht, (oder tut sie es doch?) es kann eigentlich nicht sein, dass es nen SQL fehler gibt... da ich mit genau den gleichen Variablen und dem selben Script ja schon bei der Anmeldung arbeite...
        und da geht es einwandfrei...

        ok, ich kann mich ja nur den Code beziehen den Du postest und der ist offensichtlich falsch.

        Vereinfacht steht da

        $add = '';

        if ( [...] ){

        $add .= ', ';

        }else{

        $add .= ', ';

        }

        Und das ergibt eingesetzt in

        mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

        sicherlich keine gültige SQL-Syntax.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Hi Lulu,

          dann jetzt einaml die beiden scriptstellen voneinander getrennt:

          die aus dem Registrierungsform: (es klappt ohne Probleme)

          $text.="\nInteressen: ";
          $p=0;
          $add = "";
          for($i=1; $i<9; $i++) {
          if($_POST['Interessen'.$i]) {
            $p++;
            $add .= ", inte$i='Y'";
            $text.=$_POST['Interessen'.$i];
          } else {
            $add .= ", inte$i='N'";
          }
          }
          if($p==0) {
          $text.="keine Angaben\n";
          }

          mysql_query("INSERT INTO user_interessen SET uid='$uid' $add, andere='$_POST[Int_andere]'");

          und dann aus dem Update:

          $p=0;
          $add = "";
          for($i=1; $i<9; $i++) {
          if($_POST['Interessen'.$i]) {
            $p++;
            $add .=, "inte$i='Y'";
          } else {
            $add = ", inte$i='N'";
          }
          }
          mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

          Tja... ich weiss nich weiter...
          Danke für die Versuche der Hilfe!

      2. echo $begrüßung;

        Mmmmmh, Deine Variable "$add" beginnt in jedem Fall mit einem Komma.
        Tut sie nicht, (oder tut sie es doch?)

        $add = "";

        Hier ist sie leer.

        for($i=1; $i<9; $i++) {

        (Übrigens, 1 bis 8 sind die Werte, die $i in dieser Schleife annimmt. Wolltest du nicht auch noch das 9. Feld bearbeiten?)

        if($_POST['Interessen'.$i]) {
          $add .= ", inte$i='Y'";

        und hier kommt das Komma

        } else {
          $add .= ", inte$i='N'";

        oder auch hier.

        Initialisiere $add mit einem leeren Array: $add = array();
        Weise die Werte ohne Komma einem neuen Element von $add zu: $add[] = "inte...";
        Nach der Schleife implodiere $add mit einem ',' als glue-Parameter: $add = implode(',', $add);
        So sind die Kommas nur noch zwischen den Werten.

        mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

        Bau dir dein SQL-Statement erstmal in einer Variable zusammen.
          $sql = "...";
          mysql_query($sql)
        Dann kannst du dir mit echo $sql auch mal ausgeben lassen, was du wirklich zu MySQL sendest.

        echo "$verabschiedung $name";

        1. Hallo echo $begrüßung; !!

          Mmmmmh, Deine Variable "$add" beginnt in jedem Fall mit einem Komma.
          Tut sie nicht, (oder tut sie es doch?)

          $add = "";

          Hier ist sie leer.

          Richtig!

          for($i=1; $i<9; $i++) {

          (Übrigens, 1 bis 8 sind die Werte, die $i in dieser Schleife annimmt. Wolltest du nicht auch noch das 9. Feld bearbeiten?)

          Ja, dieses 9 Feld was ich ansprach kam im nach hinien noch dazu so wäre es richtig

          for($i=1; $i<10; $i++) {

          if($_POST['Interessen'.$i]) {
            $add .= ", inte$i='Y'";

          und hier kommt das Komma

          } else {
            $add .= ", inte$i='N'";

          oder auch hier.

          Ja, diese "Kommas" stehen um die Variable $Text anzuhängen, habe ich vergessen beim ersten Posting herauszunehmen, habe das Script auch ohne die Ounkte durchlaufen lassen eigetragen wird allerdings trotzdem nichts

          Initialisiere $add mit einem leeren Array: $add = array();
          Weise die Werte ohne Komma einem neuen Element von $add zu: $add[] = "inte...";
          Nach der Schleife implodiere $add mit einem ',' als glue-Parameter: $add = implode(',', $add);
          So sind die Kommas nur noch zwischen den Werten.

          mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'");

          Bau dir dein SQL-Statement erstmal in einer Variable zusammen.
            $sql = "...";
            mysql_query($sql)
          Dann kannst du dir mit echo $sql auch mal ausgeben lassen, was du wirklich zu MySQL sendest.

          Vielleicht machen wir das mal in Ruhe bei ner Tasse Kaffee... ich habe vor 2 Monaten mit Php angefangen und kann bis jetzt auch noch nicht mehr als ich aus meinen schlauen Büchern bis hierhin entnehmen kann...

          Gruß Jan

          1. Hat wirklich keiner eine Idee?

            es geht auch so nicht, obwohl die Syntax so stimmen sollte:

            <tr>
              <td width="175"><b>Interessen:</b>
              <td><input type="checkbox" value="Y" name="Interessen1" <? if($idata[1] == "Y") echo "checked"; ?>>&nbsp;Fernsehen</td>
              <td><input type="checkbox" value="Y" name="Interessen2" <? if($idata[2] == "Y") echo "checked"; ?>>&nbsp;Kino</td>
              <td><input type="checkbox" value="Y" name="Interessen3" <? if($idata[3] == "Y") echo "checked"; ?>>&nbsp;Freunde treffen</td>
            <tr>
              <td>&nbsp;</td>
              <td><input type="checkbox" value="Y" name="Interessen4" <? if($idata[4] == "Y") echo "checked"; ?>>&nbsp;Flirten</td>
              <td><input type="checkbox" value="Y" name="Interessen5" <? if($idata[5] == "Y") echo "checked"; ?>>&nbsp;Computer</td>
              <td><input type="checkbox" value="Y" name="Interessen6" <? if($idata[6] == "Y") echo "checked"; ?>>&nbsp;Disco/Partys</td>
            <tr>
              <td>&nbsp;</td>
              <td><input type="checkbox" value="Y" name="Interessen7" <? if($idata[7] == "Y") echo "checked"; ?>>&nbsp;Sport</td>
              <td><input type="checkbox" value="Y" name="Interessen8" <? if($idata[8] == "Y") echo "checked"; ?>>&nbsp;Musik</td>
              <td><input type="checkbox" value="Y" name="Interessen9" <? if($idata[9] == "Y") echo "checked"; ?>>&nbsp;Musik machen</td>

            $p=0;
            $add = "";
            for($i=1; $i<10; $i++) {
            if($_POST['Interessen'.$i]) {
              $p++;
              $add = "inte$i='Y'";
            } else {
              $add = "inte$i='N'";
            }
            }

            mysql_query("UPDATE user_interessen SET $add WHERE uid='$uid'")

            Der Verzweiflung sehr nahe....

            Jan

            1. echo $begrüßung;

              Hat wirklich keiner eine Idee?

              Lies bitte nochmal meine Antwort. Speziell den Abschnitt der mit "Initialisiere..." anfängt. Dort zeigte ich dir bereits einen Lösungsweg.

              echo "$verabschiedung $name";