Avatar billede Six Nybegynder
18. december 2004 - 12:56 Der er 20 kommentarer og
1 løsning

Problem med array i php

Hej eksperter.

Mit problem er følgende; Jeg kan kun slette vare[f.eks. 1] fra mit array én gang.

Selvom jeg laver en ny udskrift af mit array.

Jeg får udskrevet mit array således:

                                    if (isset($_SESSION['varer'])) {
                                        $varer = $_SESSION['varer'];
                                    }

                                    if ($varer) {
                                        for ($i=0;$i<sizeof($varer);$i++) {
                                            echo "ID:".$i."<br />";
                                            echo "Vare: ".$varer[$i][0]."<br />";
                                          echo "Antal: ".$varer[$i][1]."<br />";
                                            echo "Pris: ".$varer[$i][2]."<br />";
                                            echo "<a href=\"inc\\sletvare.php?id=".$i."\">slet vare</a><br /><br />";
                                        }
                                    };

Og sletter med følgende:

session_start();
$varer = $_SESSION['varer'];
$vare_id = $_REQUEST['id'];
    if (isset($_SESSION['varer'])) {
      unset($_SESSION['varer'][$vare_id]);
    }

header("Location: ". DIRNAME($_SERVER['HTTP_REFERER']) ."/" ."index.php?mode=kurv");

Kan i se mit problem ?
Avatar billede Six Nybegynder
18. december 2004 - 13:19 #1
Hmm - jeg kan heller ikke tilføje nye varer i mit array, hvis det er blevet unset.

F.eks. hvis jeg har lavet en unset($_SESSION['varer'][1]); så kan jeg ikke tilføje i arrayet før jeg kommer op på plads nr 2 i arrayet.
Avatar billede coderdk Praktikant
18. december 2004 - 13:45 #2
Prøv efter unset:

array_unique( $_SESSION['varer'] );
Avatar billede Six Nybegynder
18. december 2004 - 13:46 #3
dvs. således:

    if (isset($_SESSION['varer'])) {
      unset($_SESSION['varer'][$vare_id]);
        array_unique( $_SESSION['varer'] );
    }
?
Avatar billede Six Nybegynder
18. december 2004 - 13:47 #4
Det virker ikke :(
Avatar billede Six Nybegynder
18. december 2004 - 14:01 #5
Jeg forstår virkelig ikke hvorfor det ikke vil virke. Det virker som om, at når jeg har slettet/unset et array[id] så kan jeg ikke bruge det igen hverken til at slette med, eller til at indsætte med.
Avatar billede skovenborg Nybegynder
18. december 2004 - 14:13 #6
Jeg tror problemmet opstår i og med id'erne bliver forkerte efter du har slettet den første vare. Du kan istedet prøve en anden løsning med en foreach-løkke, som finder det præcise index i arrayet hver varer har:
if ($varer) {
    foreach ($varer as $key => $vare) {
        echo "Vare: ".$vare[0]."<br />";
        echo "Antal: ".$vare[1]."<br />";
        echo "Pris: ".$vare[2]."<br />";
        echo "<a href=\"inc\\sletvare.php?id=".$key."\">slet vare</a><br /><br />";
    }
};
Avatar billede Six Nybegynder
18. december 2004 - 14:19 #7
Skovenborg - Igen havde du 100% ret. Og du kom igen med løsningen.

Smid svar :D

/* Panik slut */
Avatar billede skovenborg Nybegynder
18. december 2004 - 14:25 #8
det lyder godt - og helt og lykke med opgaven (eller hvad det er)
Avatar billede Six Nybegynder
18. december 2004 - 14:26 #9
Jo tak. Ja det er en opgave, min eksamens opgave :D
Avatar billede skovenborg Nybegynder
18. december 2004 - 14:31 #10
jamen, så held og lykke med den - nu må jeg nok også hellere komme i gang med min egen :-)

og tak for points :-)
Avatar billede Six Nybegynder
18. december 2004 - 14:37 #11
et sidste spm ;D

                                    if ($varer) {
                                      foreach ($varer as $key => $vare) {
                                            $samlet_pris = $vare[3] * $vare[2];
                                            echo "V_model: ".$vare[0]."<br />";
                                            echo "Vare: ".$vare[1]."<br />";
                                            echo "Antal: ".$vare[2]."<br />";
                                            echo "Pris: ".$samlet_pris."<br />";
                                            echo "<a href=\"inc\\sletvare.php?id=".$key."\">slet vare</a><br /><br />";
                                      };
                                    };

Hvorfor kan jeg ikke få den til at skrive en samlet pris?

Burde det der ikke være sådan rimeligt simpelt ?!
Avatar billede skovenborg Nybegynder
18. december 2004 - 14:44 #12
det virker nu også fint for mig - men er du sikker på at  $vare[3] og $vare[2] indeholder priser og antal?

Det kunne også være en god idé at lave priser og antal om til tal når du sætter dem ind i arrayet:
$varer[] = array($_POST['vmodel'],$_POST['varenavn'],(int) $_POST['antal'],(int) $_POST['pris']);

og så må vi nok også hellere lægge end reference til det forrige spørgsmål: http://exp.dk/spm/572255
Avatar billede Six Nybegynder
18. december 2004 - 14:45 #13
Problemet ligger andetsteds.. så bare glem mit spm hehe :D
Avatar billede Six Nybegynder
18. december 2004 - 14:48 #14
Jeg har den her linie i min tilfojvarer.php:
$varer[] = array($_POST['v_model'],$_POST['v_id'],$_POST['antal'], $_POST['v_pris']);

Og udskriver jeg v_pris i min vare_fremvisning så indeholder den også prisen, men jeg kan ikke få den overført til mit array
Avatar billede Six Nybegynder
18. december 2004 - 14:50 #15
Og nu ser den således ud:
$varer[] = array($_POST['v_model'],$_POST['v_id'],(int) $_POST['antal'], (int) $_POST['v_pris']);
:D
Avatar billede Six Nybegynder
18. december 2004 - 14:56 #16
Hmm kan man kun opbevare 3 oplysninger i 1 array? For det virker hvis jeg laver det sådan: $varer[] = array($_POST['v_model'],$_POST['v_id'],(int) $_POST['v_pris']);
Avatar billede skovenborg Nybegynder
18. december 2004 - 14:58 #17
er du sikker på du har et felt i det dokument hvori du tilføjer varer som har name="v_pris"=
Avatar billede Six Nybegynder
18. december 2004 - 15:01 #18
Dette er tabellen hvorfra oplysningerne kommer.

            echo
                "<table cellspacing=\"0\" cellpadding=\"0\" class=\"vare_tabel\">
                    <tr>
                        <td colspan=\"3\" class=\"vare_tabel_overskrift\">".$row->V_MODEL."</td>
                    </tr>
                    <tr>
                        <td colspan=\"2\"class=\"vare_tabel_beskrivelse\">".$beskrivelse."</td>
                        <td rowspan=\"2\" class=\"vare_pic\">". $picture ."</td>
                    </tr>
                    <tr>
                        <td class=\"vare_tabel_pris\">".$pris."</td>
                        <td class=\"vare_tabel_koeb\">
                        <form action=\"inc\\tilfojvarer.php\" method=\"post\">
                            <input type=\"hidden\" name=\"v_model\" value=\"".$row->V_MODEL."\">
                            <input type=\"hidden\" name=\"v_id\" value=\"".$row->V_ID."\">
                            <input type=\"hidden\" name=\"v_pris\" value=\"".$pris1."\">
                            Antal:<input type=\"text\" name=\"v_antal\" maxlength=\"4\" size=\"4\"><br />
                            <input type=\"submit\" value=\"Køb\">
                        </form>
                        </td>
                    </tr>
                </table>
                ";

Det her er hvor det bliver sat ind:

<?php

if ($_POST) {
    session_start();
  if (isset($_SESSION['varer'])) {
      $varer = $_SESSION['varer'];
  }
  else {
        $varer = array();
    }
   
    $varer[] = array($_POST['v_model'],(int) $_POST['v_id'],(int) $_POST['v_antal'], $_POST['v_pris']);
  $_SESSION['varer'] = $varer;
    header("Location: ". DIRNAME($_SERVER['HTTP_REFERER']) ."/" ."index.php?mode=kurv");

}
?>
Avatar billede Six Nybegynder
18. december 2004 - 15:04 #19
Og her udskriver jeg varen:

                                <?
                                    array_unique( $_SESSION['varer'] );
                                    if (isset($_SESSION['varer'])) {
                                        $varer = $_SESSION['varer'];
                                    }

                                    if ($varer) {
                                      foreach ($varer as $key => $vare) {
                                            echo "V_model: ".$vare[0]."<br />";
                                            echo "Vare: ".$vare[1]."<br />";
                                            echo "Antal: ".$vare[2]."<br />";
                                            echo "Pris: ".$varer[3]."<br />";
                                            echo "<a href=\"inc\\sletvare.php?id=".$key."\">slet vare</a><br /><br />";
                                      };
                                    };

                                ?>
Avatar billede skovenborg Nybegynder
18. december 2004 - 15:10 #20
der skal stå:
echo "Pris: ".$vare[3]."<br />";
ikke $varer. Og så kan du godt tilføje nu tilføje (int) foran pris:
$varer[] = array($_POST['v_model'],(int) $_POST['v_id'],(int) $_POST['v_antal'], (int) $_POST['v_pris']);
Avatar billede Six Nybegynder
18. december 2004 - 15:14 #21
Jamen :D

Jeg er dig evigt taknemmelig.

Og så er det endda sådan en lam fejl. Jeg skal vidst lige være lidt mere opmærksom.

Takker endnu engang :)
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