Avatar billede lsskaarup Nybegynder
26. august 2010 - 13:45 Der er 13 kommentarer og
1 løsning

Input felter fanges med forkert værdi

Jeg har nedenstående kode, som ud fra nogle arrays og dataudtræk, laver en liste indeholdende en mængde input felter.

Meningen er at brugerne kan ændre de allerede indtastede data, samt tilføje mere data til nederste niveua for hvert underpunkt.

Data ser korrekt ud i front-end'en, men når jeg prøver at fange data, for senere at smide det i databasen, så er det ikke indeholder felter, der indeholder de rigtige data. Det undrer mig lidt.

(div)
<ul>
    <?php
    $tæller = 0;
    for ($j=1;$j<=count($HOVEDAKT);$j++) {
    $hovedakt_nr = $HOVEDAKT[$j]['nr'];
    $hovedakt_be = $HOVEDAKT[$j]['beskrivelse'];?>
    <li>
        <a href="#" onclick="showhide('id_<?php echo $hovedakt_nr;?>');">
            <?php echo $hovedakt_nr." - ".$hovedakt_be;?>
        </a>
          <div id="id_<?php echo $hovedakt_nr;?>" style="display:block;">
        <?
            for ($i=1;$i<=count($UNDERAKT);$i++) {
                $underakt_nr = $UNDERAKT[$i]['nr'];
                $underakt_be = $UNDERAKT[$i]['beskrivelse'];
                if (substr($underakt_nr,0,1)."0" == $hovedakt_nr) {?>
                    <ul>
                    <?    $query = "SELECT * FROM kalkulation WHERE ordre_id = '".addslashes($_GET['id'])."' AND underakt = $underakt_nr";   
                    $sql = mysql_query($query) or die(mysql_error);
                   
                    if (!mysql_num_rows($sql) || !isset($sql)) {
                    //echo "hej";
                        $tæller++;?>
                        <li style="display:block;">
                        <a href="#" onclick="showhide('id_<?php echo $underakt_nr;?>');">
                            <?php echo $underakt_nr. " - ".$underakt_be;?>
                        </a>
                            <div id="id_<?php echo $underakt_nr;?>" style="display:block;">
                                <ul>
                                        <!-- Inputfelter til de underakt, der endnu ikke indeholder data-->
                                        <input type="text" class="inputextrasmall" name="navn[]">
                                        <input type="text" class="inputextrasmall" name="beskrivelse[]"/>
                                        <!--<input type="text" class="inputextrasmall" name="kostpris[]">-->
                                </ul>
                            </div>
                    <? } else {?>
                        <li>
                        <a href="#" onclick="showhide('id_<?php echo $underakt_nr;?>');">
                            <?php echo $underakt_nr. " - ".$underakt_be;?>
                        </a>
                            <div id="id_<?php echo $underakt_nr;?>" style="display:block;">
                                <?php while ($foo = mysql_fetch_assoc($sql)) {
                                $tæller++;?>
                                    <ul>
                                            <input type="text" name="underakt_id[]" value="<?php echo $foo['id']; ?>"/>
                                            <input type="text" class="inputextrasmall" name="navn[]" value="<?php echo $foo['navn']; ?>" />
                                            <input type="text" class="inputextrasmall" name="beskrivelse[]" value="<?php echo $foo['beskrivelse']; ?>" />
                                    </ul>
                                <?php }
                                $tæller++;?>
                                    <ul>
                                        <!-- Inputfelter til de underakt, der indeholder data-->
                                        <input type="text" class="inputextrasmall" name="navn[]">
                                        <input type="text" class="inputextrasmall" name="beskrivelse[]"/>
                                    </ul>
                            </div>
                    <? } ?>
                    </li>
                    </ul>
                <? }
            }?>
            </li>
            </div>
        <? }?>
    </li>
</ul>
(/div)


Koden som skal behandle felterne:
(div)
        $thispage = $_POST['thispage'];
        $tæller = $_POST['tæller'];
        unset($_POST['tæller']);
        unset($_POST['thispage']);
        unset($_POST['submit2']);
        unset($_POST['eid']);
        unset($_POST['bygherre_hidden']);

        $akt = array();
        $akt = $_POST['underakt_id'];
        //unset($_POST['underakt_id']);
       
//echo        count($akt);
        $keys = array_keys($_POST);

//echo count($keys);
        for ($i=0;$i<$tæller;$i++) {
            echo $_POST['underakt_id'][$i]." ";
        //foreach ($keys as $value) {
        //$ny = array();
            foreach ($keys as $feltnavn) {
            echo $feltnavn." - ".$_POST[$feltnavn][$i]."<br>";
            //    $ny = $_POST[$feltnavn];
                //if ($_POST['navn'][$i] != ""){
                    //echo $akt[$i] . " - " . $feltnavn . " - ".$_POST[$feltnavn][$i]."<br>";
                //}
            }
//            reset($keys);
//print_r($ny);
        }
    }
(/div)

Eksempel:
[IMG]http://i34.tinypic.com/301zkp0.jpg[/IMG]

Den med 4 i første felt (underakt_id-feltet), bliver fanget som indeholdende 3, og det kan jeg ikke lige forstår.

Håber det var bare nogenlunde til at forstå, og at I kan sige hvad jeg gør forkert?
Avatar billede lsskaarup Nybegynder
26. august 2010 - 13:48 #1
Ups, det indlæg kom ikke helt til at se ud, som jeg gerne ville. Prøver igen...

Jeg har nedenstående kode, som ud fra nogle arrays og dataudtræk, laver en liste indeholdende en mængde input felter.

Meningen er at brugerne kan ændre de allerede indtastede data, samt tilføje mere data til nederste niveua for hvert underpunkt.

Data ser korrekt ud i front-end'en, men når jeg prøver at fange data, for senere at smide det i databasen, så er det ikke indeholder felter, der indeholder de rigtige data. Det undrer mig lidt.


<ul>
    <?php
    $tæller = 0;
    for ($j=1;$j<=count($HOVEDAKT);$j++) {
    $hovedakt_nr = $HOVEDAKT[$j]['nr'];
    $hovedakt_be = $HOVEDAKT[$j]['beskrivelse'];?>
    <li>
        <a href="#" onclick="showhide('id_<?php echo $hovedakt_nr;?>');">
            <?php echo $hovedakt_nr." - ".$hovedakt_be;?>
        </a>
          <div id="id_<?php echo $hovedakt_nr;?>" style="display:block;">
        <?
            for ($i=1;$i<=count($UNDERAKT);$i++) {
                $underakt_nr = $UNDERAKT[$i]['nr'];
                $underakt_be = $UNDERAKT[$i]['beskrivelse'];
                if (substr($underakt_nr,0,1)."0" == $hovedakt_nr) {?>
                    <ul>
                    <?    $query = "SELECT * FROM kalkulation WHERE ordre_id = '".addslashes($_GET['id'])."' AND underakt = $underakt_nr";   
                    $sql = mysql_query($query) or die(mysql_error);
                   
                    if (!mysql_num_rows($sql) || !isset($sql)) {
                    //echo "hej";
                        $tæller++;?>
                        <li style="display:block;">
                        <a href="#" onclick="showhide('id_<?php echo $underakt_nr;?>');">
                            <?php echo $underakt_nr. " - ".$underakt_be;?>
                        </a>
                            <div id="id_<?php echo $underakt_nr;?>" style="display:block;">
                                <ul>
                                        <!-- Inputfelter til de underakt, der endnu ikke indeholder data-->
                                        <input type="text" class="inputextrasmall" name="navn[]">
                                        <input type="text" class="inputextrasmall" name="beskrivelse[]"/>
                                        <!--<input type="text" class="inputextrasmall" name="kostpris[]">-->
                                </ul>
                            </div>
                    <? } else {?>
                        <li>
                        <a href="#" onclick="showhide('id_<?php echo $underakt_nr;?>');">
                            <?php echo $underakt_nr. " - ".$underakt_be;?>
                        </a>
                            <div id="id_<?php echo $underakt_nr;?>" style="display:block;">
                                <?php while ($foo = mysql_fetch_assoc($sql)) {
                                $tæller++;?>
                                    <ul>
                                            <input type="text" name="underakt_id[]" value="<?php echo $foo['id']; ?>"/>
                                            <input type="text" class="inputextrasmall" name="navn[]" value="<?php echo $foo['navn']; ?>" />
                                            <input type="text" class="inputextrasmall" name="beskrivelse[]" value="<?php echo $foo['beskrivelse']; ?>" />
                                    </ul>
                                <?php }
                                $tæller++;?>
                                    <ul>
                                        <!-- Inputfelter til de underakt, der indeholder data-->
                                        <input type="text" class="inputextrasmall" name="navn[]">
                                        <input type="text" class="inputextrasmall" name="beskrivelse[]"/>
                                    </ul>
                            </div>
                    <? } ?>
                    </li>
                    </ul>
                <? }
            }?>
            </li>
            </div>
        <? }?>
    </li>
</ul>



Koden som skal behandle felterne:

        $thispage = $_POST['thispage'];
        $tæller = $_POST['tæller'];
        unset($_POST['tæller']);
        unset($_POST['thispage']);
        unset($_POST['submit2']);
        unset($_POST['eid']);
        unset($_POST['bygherre_hidden']);

        $akt = array();
        $akt = $_POST['underakt_id'];
   
        $keys = array_keys($_POST);
        for ($i=0;$i<$tæller;$i++) {
            echo $_POST['underakt_id'][$i]." ";
            foreach ($keys as $feltnavn) {
            echo $feltnavn." - ".$_POST[$feltnavn][$i]."<br>";
            }
        }
    }


Eksempel:
http://i34.tinypic.com/301zkp0.jpg

Den med 4 i første felt (underakt_id-feltet), bliver fanget som indeholdende 3, og det kan jeg ikke lige forstår.

Håber det var bare nogenlunde til at forstå, og at I kan sige hvad jeg gør forkert?
Avatar billede jakobdo Ekspert
26. august 2010 - 14:30 #2
Prøv at kig i sovsen din kode laver, passer den kode ?
Har input felter korrekt id/navn og korrekt indhold ?
Avatar billede lsskaarup Nybegynder
26. august 2010 - 14:52 #3
Hvis du med sovson mener kildekoden, så synes jeg ikke at kunne se noget forkert der, f.eks. viser den følgende

<input type="text" name="underakt_id[]" value="4"/>
<input type="text" class="inputextrasmall" name="navn[]" value="Bla bla" />
<input type="text" class="inputextrasmall" name="beskrivelse[]" value="Eksternt køb" />

Men når jeg beder om output får jeg følgende

3
Bla bla
Eksternt køb

Hvor dælen det 3 kommer fra og hvorfor der ikke står 4, kan jeg bare ikke gennemskue.

Men der må være et eller andet forkert i navnede i felterne, eller noget jeg ikke får reset korrekt.
Avatar billede lsskaarup Nybegynder
26. august 2010 - 15:13 #4
Eller rettere jeg har en ide om hvor 3 kommer fra, for jeg har nemlig en record mere i databasen, men hører til en 3. underakt. De bliver vist rigtigt på oversigten, men derefter ser det ud som der bliver byttet rundt på dem.

DB:
Id  ordre_id  underakt  navn  beskrivelse  kostpris_id
1    5172      225    Pos 25  Stål i tag      1
2    5172      225    Pos 26  Stål i facader    2
3    5172      997    test      test          4
4    5172      230    Bla bla  Eksternt køb    3
Avatar billede jakobdo Ekspert
26. august 2010 - 15:14 #5
Prøv at smid følgende i toppen af din kode som behandler din POST.

echo '<pre>';
print_r($_POST);
echo '</pre>';
Avatar billede lsskaarup Nybegynder
26. august 2010 - 15:31 #6
Nej, den giver da en dejligt overblik, har ledt efter noget lignede, nå men jeg får følgende ud:

Array
(
    [thispage] => 12
    [eid] => 5172
    [bygherre_hidden] => 1216
    [underakt_id] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 4
            [3] => 3
        )

    [navn] => Array
        (
            [0] => Pos 25
            [1] => Pos 26
            [2] =>
            [3] => Bla bla
            [4] =>
            [5] =>
            [6] =>
            [7] =>
            [8] =>
            [9] =>
            [10] =>
            [11] =>
            [12] =>
            [13] =>
            [14] =>
            [15] =>
            [16] =>
            [17] =>
            [18] =>
            [19] =>
            [20] =>
            [21] =>
            [22] =>
            [23] =>
            [24] =>
            [25] =>
            [26] =>
            [27] =>
            [28] =>
            [29] =>
            [30] =>
            [31] =>
            [32] =>
            [33] =>
            [34] =>
            [35] =>
            [36] =>
            [37] =>
            [38] =>
            [39] =>
            [40] =>
            [41] =>
            [42] =>
            [43] =>
            [44] =>
            [45] =>
            [46] =>
            [47] =>
            [48] =>
            [49] =>
            [50] =>
            [51] => test
            [52] =>
            [53] =>
        )

    [beskrivelse] => Array
        (
            [0] => Stål i tag
            [1] => Stål i facader
            [2] =>
            [3] => Eksternt køb
            [4] =>
            [5] =>
            [6] =>
            [7] =>
            [8] =>
            [9] =>
            [10] =>
            [11] =>
            [12] =>
            [13] =>
            [14] =>
            [15] =>
            [16] =>
            [17] =>
            [18] =>
            [19] =>
            [20] =>
            [21] =>
            [22] =>
            [23] =>
            [24] =>
            [25] =>
            [26] =>
            [27] =>
            [28] =>
            [29] =>
            [30] =>
            [31] =>
            [32] =>
            [33] =>
            [34] =>
            [35] =>
            [36] =>
            [37] =>
            [38] =>
            [39] =>
            [40] =>
            [41] =>
            [42] =>
            [43] =>
            [44] =>
            [45] =>
            [46] =>
            [47] =>
            [48] =>
            [49] =>
            [50] =>
            [51] => test
            [52] =>
            [53] =>
        )

    [submit2] => Fortsæt
    [tæller] => 54
)
Avatar billede lsskaarup Nybegynder
26. august 2010 - 15:34 #7
Problemet må være at underakt[] ikke er lige så stor som de andre arrays.

Den skulle have heddet noget lignede

[0] => 1
[1] => 2
[2] =>
[3] => 4
.
.
.
[51] => 3
Avatar billede lsskaarup Nybegynder
26. august 2010 - 15:36 #8
Aha, så det var fordi jeg ikke fik lavet de tomme felter til underakt_id[], for gør jeg det, ser det ud til at være korrekt output.

Nice, jeg holder den lige åben indtil jeg er helt sikker på det virker som det skal.
Avatar billede lsskaarup Nybegynder
26. august 2010 - 16:34 #9
Yes, det ser helt perfekt ud, nu kan jeg både rette eksisterende og tilføje nye underpunkter, hvis værdier så bliver gemt i databasen.

Den der
echo '<pre>';
print_r($_POST);
echo '</pre>';
var sgu genial.

Tak for hjælpen, jakobdo
Avatar billede ggxdg Nybegynder
26. august 2010 - 20:42 #10
Det er lidt mystisk opbygget alt det der, men jeg kan godt li' at jonglere noget kode, så jeg har lige prøvet at komprimere det hele lidt. Hvis jeg havde vidst helt præcist hvordan det hele skulle fungere, kunne man sikkert lave langt størstedelen af koden som en query :P

Men her er mit (garanteret buggy) foreslag :P

<?php
  echo "<ul>";
  foreach ($HOVEDAKT as $h_val) {
    $h_nr = $h_val['nr'];
    $h_be = $h_val['beskrivelse'];
    echo "  <li>\n
        ."    <a href=\"#\" onclick=\"showhide(\'id_".$h_nr."\');\">".$h_nr." - ".$h_be."</a>\n"
        ."    <div id=\"id_".$h_nr.">\" style=\"display:block;\">\n";
    foreach ($UNDERAKT as $u_val) {
      $u_nr = $u_val['nr'];
      $u_be = $u_val['beskrivelse'];
      if (substr($u_nr,0,1)."0" == $h_nr) {
        echo "      <ul>\n";
        $query = "SELECT * FROM kalkulation WHERE ordre_id = '".addslashes($_GET['id'])."' AND underakt = $u_nr"; 
        $sql = mysql_query($query) or die(mysql_error);
        if (!mysql_num_rows($sql) || !isset($sql)) { $q_res = false; } else { $q_res = true; }
        if ($q_res) { echo "        <li>"; } else { echo "        <li style=\"display:block;\">"; }
        echo "          <a href=\"#\" onclick=\"showhide(\'id_".$u_nr."\');\">".$u_nr." - ".$u_be."</a>\n"
            ."          <div id=\"id_".$u_nr."\" style=\"display:block;\">\n";
        if ($q_res) {
          while ($foo = mysql_fetch_assoc($sql)) {
            echo "            <ul>\n"
                ."              <input type=\"text\" name=\"underakt_id[]\" value=\"".$foo['id']."\" />\n"
                ."              <input type=\"text\" class=\"inputextrasmall\" name=\"navn[]\" value=\"".$foo['navn']."\" />\n"
                ."              <input type=\"text\" class=\"inputextrasmall\" name=\"beskrivelse[]\" value=\"".$foo['beskrivelse']."\" />\n"
                ."            </ul>\n";
          }
        }
        echo "            <ul>\n"
            ."              <input type=\"text\" class=\"inputextrasmall\" name=\"navn[]\">\n"
            ."              <input type=\"text\" class=\"inputextrasmall\" name=\"beskrivelse[]\"/>\n"
            ."            </ul>\n"
            ."          </div>\n";
      }
      echo "        </li>\n"
          ."      </ul>\n";   
    }
    echo "    </div>\n"
        ."  </li>\n";
  }
  echo "</ul>\n";
?>



        $thispage = $_POST['thispage'];
        $tæller = $_POST['tæller'];
        unset($_POST['tæller']);
        unset($_POST['thispage']);
        unset($_POST['submit2']);
        unset($_POST['eid']);
        unset($_POST['bygherre_hidden']);


        for ($i=1; $i<=count($_POST['navn']); $i++;)  {
            echo $_POST['underakt_id'][$i]." ";
            foreach ($_POST as $key => $value) {
              echo $key." - ".$value[$i]."<br>";
            }
        }
    }
Avatar billede ggxdg Nybegynder
26. august 2010 - 21:10 #11
så fandt jeg lige de første småfejl som er rettet i flg:

<?php
  echo "<ul>\n";
  foreach ($HOVEDAKT as $h_val) {
    $h_nr = $h_val['nr'];
    $h_be = $h_val['beskrivelse'];
    echo "  <li>\n"
        ."    <a href=\"#\" onclick=\"showhide(\'id_".$h_nr."\');\">".$h_nr." - ".$h_be."</a>\n"
        ."    <div id=\"id_".$h_nr.">\" style=\"display:block;\">\n";
Avatar billede jakobdo Ekspert
26. august 2010 - 21:17 #12
Svar!
Avatar billede jakobdo Ekspert
27. august 2010 - 12:21 #13
Takker for point.
Avatar billede lsskaarup Nybegynder
27. august 2010 - 13:44 #14
Velbekomme og tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester