[Funktion] checkbox hinter datensatz zum ändern von status

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

  • [Funktion] checkbox hinter datensatz zum ändern von status

    hallo

    ich möchte hinter jeden datensatz(rechnung) den ich ausgegeben bekomme (wenn ich mir alle rechnungen eines kunden anzeigen lasse) eine checkbox haben, mit deren hilfe ich das feld status in der tabelle rechnung ändern kann. (status hat zwei zustände 1 und 0).

    tebellen in db:
    1 tabelle kunde (knr(primary), vorname, name, versichert)
    2 tabelle rechnung (rnr(primary), knr, datum, status)

    wenn ich z.B mehrere checkboxen anhake und dann z.B. auf den button "als bezahlt speichern" gehe soll bei allen angehakten atensätzen das feld status den wert 0 bekommen.

    so sieht meine ausgabe momentan aus:

    siehe beitrag weiter unten:
    Zuletzt geändert von hdmnf; 01.02.2007, 14:02.

  • #2
    Schau mal hier im Forum unter Checkboxen auswerten, da findest Du jede Menge Lösungen.

    Kommentar


    • #3
      irgendiwe komme ich gerade gar nicht mehr klar

      so sieht jetzt meine abfrage aus, es werden die checkboxen angezeigt, sowie der speichern button, aber irgendwie komme ich mit der aufgerufenen seite "sql_rechnungen_eines_kunden_als_bezahlt.php" nicht klar.

      ich weiß nicht wie ich die variable check richtig in der aufgerufenen datei "sql_rechnungen_eines_kunden_als_bezahlt.php" auslesen kann (nur die angehakten checkboxen) und dann mit dem ergebnis einen gescheiten insert machen kann.

      momentan passiert beim aufruf der "sql_rechnungen_eines_kunden_als_bezahlt.php" noch gar nichts.



      echo "
      <form name='check' method='post' action='sql_rechnungen_eines_kunden_als_bezahlt.php'>
      <table> ";
      while ($row = mysql_fetch_row ($result)) {
      if($row[0]==0){echo "<span class=text>"."Es existieren keine Rechnungen f&uuml;r diesen Kunden"."</span>";}
      else {
      echo "<tr> <td>"."Rechnungs Nr.: " . $row[0] . "</td>";
      echo "<td>"."&nbsp;&nbsp;&nbsp;Kunden Nr.: " . $row[1] . "</td>";
      echo "<td >"."&nbsp;&nbsp;&nbsp;Vorname: " . $row[2] . "</td>";
      echo "<td >"."&nbsp;&nbsp;&nbsp;Name: " . $row[3] . "</td>";
      echo "<td >"."&nbsp;&nbsp;&nbsp;";
      if($row[4]==0){echo "Privatpatient";}else {echo"Kassenpatient";}; echo"</td>";
      echo "<td>"."&nbsp;&nbsp;&nbsp;Status: "; if($row[5]==0){echo "bazahlt";}else {echo"offen";}; echo"</td>";
      echo "<td>"."&nbsp;&nbsp;&nbsp;Datum: " . $row[6] . "
      &nbsp;&nbsp;&nbsp; Als bezahlt speichern: <input type=checkbox name='check[]' value='$row[5]'>
      "."</td></tr>";
      }}
      echo "<input type='submit' value='Als bezahlt speichern' name='abschicken'></form></table>";
      Zuletzt geändert von hdmnf; 01.02.2007, 14:01.

      Kommentar


      • #4
        Regeln lesen, Code vernünftig lesbar posten, Danke.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          und bitte auf das wesentliche reduzieren, deine html-gestaltung ist von bedeutung.

          http://tut.php-q.net/formulare.html#u13

          Kommentar


          • #6
            ich weiß, dass in der variablen "check[]" alle angehakten checkboxen an die aufgerufene datei "sql_rechnungen_eines_kunden_als_bezahlt.php" übergeben werden sollen, aber...

            1. ich weiß nicht wie ich dann die markierten checkboxen passend zu den jeweiliegen datensatz bekomme

            2. es sollte ja irgendwie eine schleife durchlaufen werden die erkennt, ob eine checkbox angehakt ist oder nicht und dann einen db insert ausführt

            Kommentar


            • #7
              schau mit print_r(), was in $_POST steht und vieles wird klarer.

              es kann u.u. sinnvoll sein, eine eintrag-id in die eckigen klammern zu schreiben.

              Kommentar


              • #8
                hallo

                wenn ich alle 4 rechnungen des kunden öffne und dann dahinter alle 4 checkboxen markiere, dann bekomme ich diese ausgabe in der datei "sql_rechnungen_eines_kunden_als_bezahlt.php"

                ausgabe mit print_r()
                Array ( [0] => 0 [1] => 0 [2] => 1 [3] => 0 )

                wenn ich nur den 1und 3 datensatz markiere bekomme ich diese ausgabe:
                Array ( [0] => 0 [1] => 1 )

                ich übergebe den checkboxen den wert des feldes status, also bezahlt =0 oder offen =1 -> das funktioniert schon

                aber wenn ich z.b. nur eine checkbox markiere, dann weiß ich doch jetzt gar nicht mehr zu welchen datensatz diese gehört hat...?
                Zuletzt geändert von hdmnf; 01.02.2007, 17:46.

                Kommentar


                • #9
                  Original geschrieben von penizillin
                  es kann u.u. sinnvoll sein, eine eintrag-id in die eckigen klammern zu schreiben.

                  Kommentar


                  • #10
                    ok ich habe nun diese funk eingebaut und bekomme damit auch eigentlich alle benötigten werte überliefert


                    if (isset($_POST['check'])) {
                    reset($_POST['check']);
                    foreach ($_POST['check'] as $k => $v) {
                    print "Feld: $k Status: $v<br>";
                    ->hier müßte jetzt eine abfrage rein.....vielleicht so ? if ($_POST['check'][$k]==$_POST['status'][$k]){echo"gleich -> db eintrag";}else{echo"nichts tuen";}
                    }
                    } else {
                    print "keine rechnung ausgwaehlt<br>";
                    }

                    ich müßte hier am besten abfragen, ob das feld check und das feld status an einer bestimmten array position den gleichen wert haben. wenn die checkbox markiert ist hat sie den wert 1 und ansonsten keinen wert.

                    ps: in der übergebenden datei habe ich noch volgendes geändert: <input type=checkbox name='check[$z]' value='$row[5]'>

                    oder bin ich vielleicht gerade aufm holzweg?
                    Zuletzt geändert von hdmnf; 02.02.2007, 08:31.

                    Kommentar


                    • #11
                      so wie ich es heute morgen gepostet habe funzt es nicht ?

                      bitte gebt mir noch einen gedanken anstoß...

                      Kommentar


                      • #12
                        if(x==x) ist auch unsinn.

                        die form ist richtig, das empfangen noch nicht ganz. nimm das reset raus, es ist selten notwendig.

                        was ist $z? wenn du die eintrag id dafür nimmst, hast du in $k bereits den gesuchten wert. value (und somit $v) ist meistens unwichtig.

                        Kommentar


                        • #13
                          anzeigen aller offenen rechnungen:

                          $z=0; -> eintrag id
                          <form table usw...>
                          while ($row = mysql_fetch_row ($result)) {
                          ......
                          ...<td usw... <input type=checkbox name='check[$z]' value='$row[5]'>
                          ....
                          $z++;
                          }
                          </form>

                          so bekomme ich immer die position/nr des wirklich geänderten datensatz mit übergenben.

                          jetzt wo das reset raus ist bekomme ich volgendes ausgegeben, wenn ich den 1, 3 und 5 datensatz auswähle:

                          PHP-Code:
                          if (isset($_POST['check'])) {
                            foreach (
                          $_POST['check'] as $k => $v) {
                              print 
                          "Feld: $k Status: $v<br>";
                              if (
                          $_POST['check'][$k]==$_POST['status'][$k]){
                              
                                  
                          $verbindung mysql_connect($server$user$pass)
                                  or die (
                          "verbindung zu sql geht nicht");

                                  
                          mysql_select_db($database$verbindung);

                                  
                          $sql "UPDATE rechnung SET status = '0' WHERE rechnung.rnr = '"$_POST['rnr']."' ";

                                  
                          $ausgabe "<span class=text>"."Die Rechnung/en wurde/n als bezahlt gespeichert."."</span>";

                                  
                          mysql_query($sql) or die ("sql eintrag fehler");
                                  
                                  echo
                          "<br>gleich -> db eintrag $k<br><br>";
                                  
                                  
                          mysql_close();
                                  }
                                  
                              else{
                                  echo
                          "nichts tuen";
                                  }
                                }

                          else {
                                print 
                          "<span class=text>"."Es wurde keine Rechnung ausgewaehlt"."</span>";
                              } 
                          Es sollte eigentlich alles funktionieren...wenn ich eine/mehrere rechnung/en auswähle dann passiert gar nichts und ich bekomme nur diese ausgabe:

                          das feld status in der tabelle rechnung ändert sich nicht, aber es sollte von 1 auf 0 geändert werden.

                          Feld: 0 Status: 1
                          gleich -> db eintrag 0
                          Feld: 2 Status: 1
                          gleich -> db eintrag 2
                          Feld: 4 Status: 1
                          gleich -> db eintrag 4


                          ich vermute es liegt am select, aber ich sehe nicht wo....
                          Zuletzt geändert von hdmnf; 02.02.2007, 16:48.

                          Kommentar


                          • #14
                            was soll die abfrage
                            if ($_POST['check'][$k]==$_POST['status'][$k]) ?

                            die db-verbindung in einer schleife zu öffnen ist unsinnig.

                            wenn du in $k die nummer übergibst, warum ist in deinem statement irgend ein anderes feld ($_POST['rnr']) zu sehen? warum lässt du dir nicht mal die query ausgeben, die du produzierst, wenn du schon merkst, da ist etwas faul? warum muss man eine zahl in hochkommata setzen? wozu verkettest du zwei aufeinanderfolgende strings?

                            Kommentar


                            • #15
                              so habs hin bekommen....

                              das wars: WHERE rnr = ". $_POST['rnr'][$k]."

                              kleiner fehler große wirkung

                              vielen dank noch einmal an alle, vorallem ans antibiotika!!!
                              Zuletzt geändert von hdmnf; 03.02.2007, 12:53.

                              Kommentar

                              Lädt...
                              X