Avatar billede BTEngineer Novice
03. juni 2011 - 15:31 Der er 18 kommentarer og
1 løsning

Array og array_sum();

Hej Eksperter.

Jeg er begyndt at lege med nogle arrays i PHP. Det jeg har lavet er en form hvor jeg har nogle inputs:

<?php
for($i = 0; $i <= 20; $i++) {
echo"<input type='text' name='test[]' size='32'><br />";
}
?>

Der kommer altså 21 felter. Indholdet i disse felter skal være tal, og jeg vil meget gerne kunne lægge dem sammen, hvor jeg fandt funktionen array_sum(); , men som jeg desværre ikke kan få til at virke.

$array = array(10,20,10,30,20);
$total=array_sum($array);
print($total);

Dette eksampel virker, men når jeg gør således:

$array = array($test[$i]);
$total=array_sum($array);
print($total);

.. sker der ingenting?

Jeg håber der er nogen der kan hjælpe.
Avatar billede BTEngineer Novice
03. juni 2011 - 15:42 #1
Dét jeg vil, er at have summen af alle test[], dvs. af 21.
Avatar billede majbom Novice
03. juni 2011 - 15:46 #2
prøv med:

$total = array_sum($_POST['test']);
Avatar billede BTEngineer Novice
03. juni 2011 - 16:03 #3
Det er ikke præcis $_POST[] jeg skal have.

Når man har trykket på submit-knappen i formen, køre dette script:


if(isset($_POST['calculate'])){

    for($i = 0; $i <= 20; $i++) {
               
        $subject = $subjects[$i];
       
        $wgy = $weight_grades_year[$i];
        $gy = $grades_year[$i];
       
        $we = $weight_exam[$i];
        $eg = $exam_grades[$i];
       
        $year_calculation[$i] = $wgy*$gy;
        $exam_calculation[$i] = $we*$eg;
       
}
}

Her er der nogle forskellige inputs subjects[], weight_grades_year[] osv.
Du kan se at jeg ganger $wgy med $gy, som er variablen $year_calculation.
Herefter ønsker jeg at få summen af HVER $year_calculation, fordi der jo er, eller kan være 21. Så altså først skal de ganges og herefter skal jeg have dem samlet. Spørgsmålet er bare hvordan? Eller om jeg skulle have lavet det på en anden måde.
Avatar billede NielsErikP Mester
03. juni 2011 - 16:14 #4
Hej..
ikke den store erfaring har jeg, men er det ikke noget med at du skal tælle [$i] op i :



    $array = array($test[$i]);



Og så lægge hver enkelte [$] sammen i resultat.
Avatar billede BTEngineer Novice
03. juni 2011 - 16:42 #5
Det jeg gerne ville, var jo netop at bruge array_sum til at tælle.
Avatar billede BTEngineer Novice
03. juni 2011 - 16:47 #6
Men du må meget gerne vise hvad du mener :-)
Avatar billede BTEngineer Novice
03. juni 2011 - 17:35 #7
Jeg har det fået til at virke ved bare at lægge dem sammen, det tog noget tid, men det virker. Er der ikke en nemmere må at gøre det på? Bare til en anden gang.

Btw, er der nogen der ved hvordan jeg kan gøre sådan, at value i de mange inputs, beholder deres value efter der er blevet trykket på submit knappen?

noget med:

<?php
for($i = 0; $i <= 20; $i++) {
echo"<input type='text' name='test[]' size='32' value='$_POST[$i]'><br />";
}
?>

Overstående virker ikke - nogen der ved hvordan det kan gøres?
Avatar billede olsensweb.dk Ekspert
03. juni 2011 - 17:53 #8

<?php
if(isset($_POST['calculate'])){
    $test = $_POST['test']; // #4
    $sum = 0; // #4

   
   
    for($i = 0; $i <= 20; $i++) {             
        $subject = $subjects[$i];     
        $wgy = $weight_grades_year[$i];
        $gy = $grades_year[$i];     
        $we = $weight_exam[$i];
        $eg = $exam_grades[$i];     
        $year_calculation[$i] = $wgy*$gy;
        $exam_calculation[$i] = $we*$eg;     
               
        $sum += $test[$i]; // #4
    }
    $total = array_sum($_POST['test']); // #2
   
   
    // test udskrivning
    echo $sum; echo "<br/>";
    echo $total;   

}

echo '<form action = "'.$_SERVER['PHP_SELF'].'" method="post"> >';
for($i = 0; $i <= 20; $i++) {
    echo"<input type='text' name='test[]' size='32'><br />";
}
echo"<input type='submit' name='calculate'><br />";
echo '</form>';
?>
Avatar billede olsensweb.dk Ekspert
03. juni 2011 - 19:02 #9
#7
 <?php
if(isset($_POST['calculate'])){
    $test = $_POST['test']; // #4
    $sum = 0; // #4
    for($i = 0; $i <= 20; $i++) {             
        $subject = $subjects[$i];     
        $wgy = $weight_grades_year[$i];
        $gy = $grades_year[$i];     
        $we = $weight_exam[$i];
        $eg = $exam_grades[$i];     
        $year_calculation[$i] = $wgy*$gy;
        $exam_calculation[$i] = $we*$eg;     
               
        $sum += $test[$i]; // #4
    }
   
    // test udskrivning
    echo $sum; echo "<br/>";
   
}

echo '<form action = "'.$_SERVER['PHP_SELF'].'" method="post">';
for($i = 0; $i <= 2; $i++) {
    echo"<input type='text' name='test[]' value ='".$test[$i]."' size='32'><br />";
}
echo"<input type='submit' name='calculate'><br />";
echo '</form>';
?>
Avatar billede BTEngineer Novice
03. juni 2011 - 19:02 #10
Mange tak. Det virker nu! :-)

Men kan nogen af jer sige mig, hvordan jeg kan beholde værdierne i felterne efter jeg har trykket på submit-knappen? Jeg har forsøgt:

<?php
for($i = 0; $i <= 20; $i++) {
echo"<input type='text' name='subjects[]' size='32' value='$_POST[subjects]'><br />";
}
?

Men det resultere i at den skriver "Array" i alle felterne, hvilket jo skyldes at der ikke er angivet et bestemt array til boksene, så den ved ikke hvilken en den skal tage. Men det hjælper ikke at skrive $_POST[subjects[$i];

Nogle idéer?
Avatar billede olsensweb.dk Ekspert
03. juni 2011 - 19:05 #11
der var lige smuttet et 0 i redigerings processen :)
for($i = 0; $i <= 20; $i++) {
    echo"<input type='text' name='test[]' value ='".$test[$i]."' size='32'><br />";
}
Avatar billede BTEngineer Novice
03. juni 2011 - 19:13 #12
Tusinde tak for hjælpen! Det virker sørme også :-)

Smid et svar :-)
Avatar billede olsensweb.dk Ekspert
03. juni 2011 - 22:25 #13
selv tak
Avatar billede BTEngineer Novice
12. juni 2011 - 21:25 #14
Jeg vil gerne oprette en ny tråd, for at give dig points for et spørgsmål mere, men det er vel nemmest at gøre det i denne her tråd:

for($i = 0; $i <= 20; $i++) {             
       
        $subject = $subjects[$i]; // Fag     
       
        $wgy = $weight_grades_year[$i]; // #1
        $gy = $grades_year[$i];   
        $we = $weight_exam[$i]; // #3
        $eg = $exam_grades[$i];
           
        $year_calculation[$i] = $wgy*$gy;
        $exam_calculation[$i] = $we*$eg; 
               
        $sum_weight_grades_year += $weight_grades_year[$i]; // #1
        $sum_grades_year += $grades_year[$i];   
        $sum_weight_exam += $weight_exam[$i]; // #3
        $sum_exam_grades += $exam_grades[$i];
   
    }

$sum_year_calculation =
$year_calculation[0]+$year_calculation[1]+$year_calculation[2]+$year_calculation[3]+$year_calculation[4]+$year_calculation[5]+$year_calculation[6]+$year_calculation[7]+$year_calculation[8]+$year_calculation[9]+$year_calculation[10]+$year_calculation[11]+$year_calculation[12]+$year_calculation[13]+$year_calculation[14]+$year_calculation[15]+$year_calculation[16]+$year_calculation[17]+$year_calculation[18]+$year_calculation[19]+$year_calculation[20];

   
    $sum_1 = array_sum($_POST['weight_grades_year']);
       
    $sum_3 = array_sum($_POST['weight_exam']);

Som du kan se har jeg lagt hver enkel sammen i $sum_year_calculation, men det virker ikke optimalt ligesom funktionen array_sum();

Hvordan laver jeg en array_sum på $sum_year_calculation. Har du en idé om det? :)
Avatar billede olsensweb.dk Ekspert
12. juni 2011 - 23:25 #15
har du prøvet denne ??
$sum_year_calculation = array_sum($year_calculation);
Avatar billede olsensweb.dk Ekspert
12. juni 2011 - 23:34 #16
ellers er der jo stadig denne metode
$sum_year_calculation = 0;
for($i = 0; $i <= 20; $i++) {   
  $sum_year_calculation += $year_calculation[$i];
}
Avatar billede BTEngineer Novice
12. juni 2011 - 23:53 #17
Hm, så passer udregningen ikke.

Problemet er at når jeg trykker "udregn", så regner den forkert første gang, dvs. man skal trykke to gange for at den regner rigtigt. Det er ikke hver gang at den tæller det hele med, jeg synes virkelig at det er underligt.

Man er logget ind som bruger, her kan du se hele scriptet:

<?php
session_start();
?>
<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript">
function PopUpHelp(MinURL)  {
window.open(MinURL,'popup','height=250,width=800', 'scroll=yes');
}
</script>

<link rel="stylesheet" href="stylesheet.css" type="text/css">

</head>

<body>

<?php
include("inc/cfg.php");

if(isset($_SESSION['email']) AND isset($_SESSION['password'])) {

$query_get = "SELECT subjects, weight_grades_year, grades_year, weight_exam, exam_grades FROM grades WHERE email='$_SESSION[email]'";
$result_get = mysql_query($query_get) or die(mysql_error());
while ( $row = mysql_fetch_array ( $result_get ) ){

  $subjects = explode("-",$row[subjects]);
  $weight_grades_year = explode("-",$row[weight_grades_year]);
  $grades_year = explode("-",$row[grades_year]);
  $weight_exam = explode("-",$row[weight_exam]);
  $exam_grades = explode("-",$row[exam_grades]);

}
}
?>

<form action="index.php" method="POST">

<div id="ramme">

    <div class="subjects">       
        <div id="headline">F</div>
       
                <?php
                    for($i = 0; $i <= 20; $i++) {
                        echo"<input type='text' name='subjects[]' size='32' value='".$subjects[$i]."'><br />";
                    }
                ?>       
               
    </div>
   
   
    <div class="weight_grades_year">
        <div id="headline">V</div>
            <?php
                for($i = 0; $i <= 20; $i++) {
                    echo"<input type='text' name='weight_grades_year[]' size='4' maxlenght='4' value='".$weight_grades_year[$i]."'><br />";
                }
            ?>       
    </div>
   
    <div class="grades_year">
        <div id="headline">Å</div>   
        <?php
            for($i = 0; $i <= 20; $i++) {
                echo"<input type='text' name='grades_year[]' size='2' maxlenght='2' value='".$grades_year[$i]."'><br />";
            }
        ?>       
    </div>   
   
    <div class="weight_exam">
        <div id="headline">V</div>
            <?php
                for($i = 0; $i <= 20; $i++) {
                    echo"<input type='text' name='weight_exam[]' size='4' maxlenght='4' value='".$weight_exam[$i]."'><br />";
                }
            ?>       
    </div>   
   
    <div class="exam_grades">
        <div id="headline">E</div>
            <?php
                for($i = 0; $i <= 20; $i++) {
                    echo"<input type='text' name='exam_grades[]' size='4' maxlenght='4' value='".$exam_grades[$i]."'><br />";
                }
            ?>       
    </div>
       

    <div class="right_box">
        <div id="headline2">Information</div>
        <div id="pad"><p>Tryk på nedenstående knap, når du har indtastet dine data:</p><br />
        <center><input id="calculate" type="submit" name="calculate" value="Beregn"></center><br /><br />

<?php

if(isset($_POST['calculate'])){

  $weight_grades_year = $_POST['weight_grades_year']; // #1
  $sum_weight_grades_year = 0; // #1
 
 
  $weight_exam = $_POST['weight_exam']; // #3
  $sum_weight_exam = 0; // #3 
   
    for($i = 0; $i <= 20; $i++) {             
       
        $subject = $subjects[$i]; // Fag     
       
        $wgy = $weight_grades_year[$i]; // #1
        $gy = $grades_year[$i];   
        $we = $weight_exam[$i]; // #3
        $eg = $exam_grades[$i];
           
        $year_calculation[$i] = $wgy*$gy;
        $exam_calculation[$i] = $we*$eg; 
               
        $sum_weight_grades_year += $weight_grades_year[$i]; // #1
        $sum_grades_year += $grades_year[$i];   
        $sum_weight_exam += $weight_exam[$i]; // #3
        $sum_exam_grades += $exam_grades[$i];
   
    }
   
  // Summen af alle årskarakter der er ganget med vægten.
 
      $sum_year_calculation = array_sum($year_calculation);

// Summen af alle eksamenskarakter der er ganget med vægten.
   
    $sum_exam_calculation = array_sum($exam_calculation);
   
    $sum_1 = array_sum($weight_grades_year);
       
    $sum_3 = array_sum($weight_exam);
         
 
    $sum_one = $sum_exam_calculation+$sum_year_calculation;
    $sum_two = $sum_1+$sum_3;
   
    $calculate_average = $sum_one/$sum_two;
    $show_average = number_format($calculate_average, 1, ',', ' ');
   
    $bonus_s = 1.03*$calculate_average;
    $bonus = number_format($bonus_s, 1, ',',' ');
   
    echo "<b>$show_average</b><br /><br />Inkl. evt. bonus: <b>$bonus</b>";


if(isset($_SESSION['email']) AND isset($_SESSION['password'])) {

include("inc/cfg.php");

$load = mysql_query("SELECT * FROM brugere WHERE email = '$_SESSION[email]'") or die(mysql_error());
$show = mysql_fetch_array($load);

$te = mysql_query("SELECT * FROM grades WHERE email = '$_SESSION[email]'");
if (mysql_num_rows($te) > "0") {

$subjects = implode("-",$_POST[subjects]);   
$weight_grades_year = implode("-",$_POST[weight_grades_year]);
$grades_year = implode("-",$_POST[grades_year]);
$weight_exam = implode("-",$_POST[weight_exam]);
$exam_grades = implode("-",$_POST[exam_grades]);

mysql_query("UPDATE grades SET subjects='$subjects', weight_grades_year='$weight_grades_year', grades_year='$grades_year', weight_exam='$weight_exam',exam_grades='$exam_grades', snit='$show_average', gnssnit='$bonus', sum_weight_year='$sum_1', sum_weight_exam='$sum_3', sum_year_grades='$sum_year_calculation', sum_exam_grades='$sum_exam_calculation'  WHERE email = '$_SESSION[email]'") or die(mysql_error());

echo "<meta http-equiv='refresh' content='0;'>";

} else {

$subjects = implode("-",$_POST[subjects]);   
$weight_grades_year = implode("-",$_POST[weight_grades_year]);
$grades_year = implode("-",$_POST[grades_year]);
$weight_exam = implode("-",$_POST[weight_exam]);
$exam_grades = implode("-",$_POST[exam_grades]);

mysql_query("INSERT INTO grades (`subjects`,`weight_grades_year`, `grades_year`, `weight_exam`, `exam_grades`, `email`, `snit`, `gnssnit`, `sum_weight_year`, `sum_weight_exam`, `sum_year_grades`, `sum_exam_grades`) VALUES ('$subjects', '$weight_grades_year', '$grades_year', '$weight_exam', '$exam_grades', '$show[email]', '$show_average', '$bonus', '$sum_1', '$sum_3', '$sum_year_calculation', '$sum_exam_calculation')") or die(mysql_error());

echo "<font color='green'><b>Dataerne er nu gemt.</b></font>";

}
}   
}

?>
<br /><br />
<b>Brug for hjælp?</b><br />
<a href="" onclick="PopUpHelp('help.html');return false;">
Tryk for hjælp</a><br /><br />

<?php
if(isset($_SESSION['email']) AND isset($_SESSION['password'])) {

$qu = mysql_query("SELECT * FROM grades WHERE email = '$_SESSION[email]'") or die(mysql_error());
$s = mysql_fetch_array($qu);
   
echo "<br /><br /><b>$s[snit]</b><br />Inkl. evt. bonus <b>$s[gnssnit]</b>.";
}
?>

</div>
    </div>
           
</div>
</form>   


</body>

</html>
Avatar billede BTEngineer Novice
14. juni 2011 - 09:30 #18
Any suggestions?
Avatar billede olsensweb.dk Ekspert
14. juni 2011 - 15:27 #19
#18
ikke umildbart
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