Ankündigung

Einklappen
Keine Ankündigung bisher.

checkbox indexieren

Einklappen

Neue Werbung 2019

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

  • checkbox indexieren

    Hallo liebe com,

    ich weiß, das leidige Thema "undefined index". Ich konnte bisher nicht die checkboxen indexieren und bekomme beim ausführen der sql-query ein(ige) "undefined index" Meldungen. Jedoch nur bei den checkboxen, welche nicht checked sind, diese ja auch keinen "on" Wert übertragen. Das stört mich jedoch, obwohl die query ja ausgeführt wird.

    die checkboxen im formular:

    Code:
    <input name="mo" type="checkbox" value="1">
    <input name="di" type="checkbox" value="1">
    <input n........
    dann die query:

    Code:
    mysq_query = "INSERT INTO events (mo, di, mi..) VALUES ('".$_REQUEST['mo']."',
    		'".$_REQUEST['di']."', .....
    Danach wird dann die Fehlermeldung ausgegeben. Wie bekomme ich das if isset($_Request['mo']) jetzt hin wenn die query auch dann dann ausgeführt werden soll, wenn diese nicht gesetzt sind bzw. wie muss ich diese Variablen deklarieren?

    Vielen dank schonmal....

  • #2
    Die Existenz einer Variablen oder eines Elements kannst Du mit isset() abtesten
    http://php.net/isset

    Kommentar


    • #3
      Danke, dort sehe ich eigentlich immer nach...

      Kommentar


      • #4
        für jeden Tag ein eigenes Feld ok da lässt sich drüber streiten ich hätte das über n Integerwert gelöst.

        1 Mo 0000001
        2 Die 0000010
        4 Mi 0000100
        8 Do 0....
        usw.

        wenn Mo,Die u. Mi zb. angeklickt hast den Wert 7 wenn du nun überprüfen willst ob Mo u. Die gesetzt sind dann machst einfach folgende Abfrage:

        Code:
        Mo + Die == ($wochentage & (Mo + Die))
        Du machst einfach eine UND Verknüpfung zwischen den zu prüfenden Wochentagen u. den gestezten Wochentagen u. das Ergebnis vergleichst wieder mit den zu prüfenden Wochentagen.

        So brauchst nur ein Feld u. ich finde es ist noch recht übersichtlich wenn man das kleine Binäre 1x1 im Kopf hat
        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

        Kommentar


        • #5
          Naja, Wochentage sind nun aber eine eindeutig eingrenzbare Anzahl an Feldern
          Wenn nun WHERE Abfragen über einzelne Wochwentage gemacht werden sollen, ist es sinnvoller, sie in eigenen Feldern zu haben. Klar kennt auch mysql Bitoperation. Aber da macht kein Index mit -> Datenbank vergeblich.

          Kommentar


          • #6
            Zitat von Bruchpilot
            Naja, Wochentage sind nun aber eine eindeutig eingrenzbare Anzahl an Feldern
            Wenn nun WHERE Abfragen über einzelne Wochwentage gemacht werden sollen, ist es sinnvoller, sie in eigenen Feldern zu haben. Klar kennt auch mysql Bitoperation. Aber da macht kein Index mit -> Datenbank vergeblich.
            Naja das mit den Index leuchtet mir ein aber mit der Abfrage für einzelene Wochentage weniger das funktioniert mit der Bit-Vergleichung genauso das Beispiel dazu hab ich gezeigt
            Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

            Kommentar


            • #7
              Mangels Zeit hier ein Muster für das Abfragen von Checkboxes:
              [Sorry, daß ich als 'Anfänger' es wage, hier bei den 'Profis' etwas zu posten!]
              Code:
              <HR>
              <?php
              
              if (isset($_POST['submit']))
              {
                  echo "das Formular hat folgende Informationen geliefert:";
              
                  print '<pre>';
                  var_dump($_POST);
                  print '</pre>';
              
                  print 'Mittels FOREACH-Schleife ausgegeben: 
              ';
              
                  foreach($_POST['cbx'] as $key => $value)
                  {
                      echo "key = $key  ,value =  $value 
              ";
                  }
              
                  print 'Bitte versuchen Sie es nochmal';
              
              }
              else
              {
              
                 ?>
              
                 <form action="<?php echo $PHP_SELF; ?>" method="POST">
              
                  cbx: verschiedene Keys, verschiedene Werte 
              
                  : <input type="checkbox" name="cbx[0]" value="Mo">Montag
              
                  : <input type="checkbox" name="cbx[1]" value="Di">Dienstag
              
                  : <input type="checkbox" name="cbx[2]" value="Mi">Mittwoch
              
                  : <input type="checkbox" name="cbx[3]" value="Do">Donnerstag
              
                  : <input type="checkbox" name="cbx[4]" value="Fr">Freitag
              
                  : <input type="checkbox" name="cbx[5]" value="Sa">Samstag
              
                  : <input type="checkbox" name="cbx[6]" value="So">Sonntag
              
                  
              
              
                  <input type="submit" name="submit" value="absenden">
              
              
                 </form>
              
                 <?php
              }
              ?>
              <HR>
              Wie man sehen kann, enthält $_POST ein Array mit dem Key "cbx".
              Von diesem Array $_Post['cbx']

              kann man dann sehr einfach mittels ---> foreach($_POST['cbx'] as $key => $value)

              die Inhalte von $key und $value ermitteln un weiterverarbeiten.

              Man muß halt die Checkbox so bauen, wie im o.g. Beipiel.

              mfg
              ~dilemma~

              Kommentar


              • #8
                Der Beitrag wurde verschoben, wegen...
                ... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten..

                Bemerkung:
                Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/forum/viewtopic.php?t=21431

                moved to PHP - Anfänger
                mod = master of disaster

                Kommentar


                • #9
                  Zitat von HStev
                  Naja das mit den Index leuchtet mir ein aber mit der Abfrage für einzelene Wochentage weniger das funktioniert mit der Bit-Vergleichung genauso das Beispiel dazu hab ich gezeigt
                  Das gehört doch zusammen.
                  Wenn Du keinen Index benutzen kanns,t sondern eh jeden einzelnen Datensatz abtesten musst, brauchst Du keine Datenbank.

                  Kommentar


                  • #10
                    Ich entschuldige mich für den Eintrag bei den Profis. Kommt nicht wieder vor.

                    Jedenfalls ging es mir bei den checkboxen darum, den Zustand in eine INSERT-Query einzugeben. Dabei kam der index undef. zustande.

                    Das habe ich dann so gelöst:

                    Code:
                    mysq_query=(INSERT into events.... mo, di..) VALUES ('".(isset($_REQUEST['mo']))."','".(isset($_REQUEST['di']))."',...
                    das funktioniert so und es gibt keine Fehlermeldung mehr. Aber irgendwie scheint mir das nicht so recht zu gefallen, warum auch immer.

                    @HStev
                    Das mit der Bitrechnung ist eine gute Idee, ist mir aber im Moment aus Zeitmangel und dem index setzen zu aufwendig. Aber werde das mit dem Bitrechnen im Hinterkopf behalten.

                    @Bruchpilot
                    Mit dem Index hast Recht, da ich eine Abfrage nach Wochentage vorhabe.
                    Also (SELECT x,y,... from events WHERE $wochentag=1) Da ich noch mehrere Spalten in der Tab. habe werde ich wohl auch darauf ein index setzen.

                    @dilemma
                    Ich stufe dich zum Profi rauf! :wink:
                    Ne ehrlich, du hast mir mal eine sehr gute Antwort gegeben und mich aus einem ~ rausgeholt. Ich werde das Script bestimmt noch brauchen.

                    Kommentar


                    • #11
                      Zitat von Bruchpilot
                      Wenn Du keinen Index benutzen kanns,t sondern eh jeden einzelnen Datensatz abtesten musst, brauchst Du keine Datenbank.
                      naja trotzdem versteh ich nicht ganz auf was du Hinaus willst... wieso Abtesten? Wenn ich zb. nach Wochentag geordnet haben will mach ich einfach n ORDER BY ich seh da keinen großen Unterschied ob nun per Bitrechnung auf ein Feld begrenzt oder 7 Felder in diesen Fall.
                      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                      Kommentar


                      • #12
                        Bspw wenn Du alle Datensätze mit ausgewähltem Montag haben willst.
                        Wie machst Du das bitweise, so dass nicht alle Datensätze während der Abfrage abgetestet werden müssen?

                        Kommentar


                        • #13
                          macht es einen Unterschied ob ich nun Bitweise oder direkt das Feld vergleiche ??
                          Ich denke wenn überhaupt ist der Unterschied ziemlich gering.

                          edit]

                          ob nun WHERE 1 = ($wtag & 1) oder ob da steht oder $Mo = 1 macht wohl keinen Unterschied

                          edit2]
                          so hier mal etwas genauer

                          Code:
                          Beipiel:
                          
                          Bitweise (Montag gleich Int Wert 1)
                          SELECT ... WHERE 1 = (WTAG & 1)
                          
                          Mit 7 Feldern 
                          SELECT ... WHERE Mo = 1
                          Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                          Kommentar


                          • #14
                            macht es einen Unterschied ob ich nun Bitweise oder direkt das Feld vergleiche ??
                            Ich denke wenn überhaupt ist der Unterschied ziemlich gering.

                            edit]

                            ob nun WHERE 1 = ($wtag & 1) oder ob da steht oder $Mo = 1 macht wohl keinen Unterschied
                            Doch. Es macht einen Unterschied. Einen sehr großen Unterschied.
                            Das eine kann aus einem Index bedient werden. Für das andere muss bei der Abfrage jeder Datensatz untersucht werden.
                            Für letzteres braucht man kaum eine Datenbank; dafür werden sie nicht entwickelt.

                            Kommentar


                            • #15
                              hmmm dann muss ich mir das mit den Index noch mal anschauen dachte bisher immer
                              Abfrage = Abfrage
                              Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                              Kommentar

                              Lädt...
                              X