Avatar billede nemkost Nybegynder
06. september 2015 - 14:45 Der er 8 kommentarer og
1 løsning

beregning fra udtræk fra min database

Halløj.

Jeg har travlet internettet igennem for sar, uden at blive meget klogere.
Jeg har en database med id,navn,Kcal(tal),protein(decimal),fedt(decimal),kulhydrat(decimal)

alt data er trukket ud i en while med tilhørende checkbox, så brugeren kan vælge de enkelte rækker ud, som de ønsker. De ting brugeren har valgt kommer ind på en ny side, men udover det ønsker jeg at systemet har beregnet f.eks den totale sum af kcal og de andre talværdier fra de valgte rækker, som bliver udprintet.

eksempel:
brugeren har valgt a38, ymerdrys og sukker. De 3 ting har hver værdierne af deres kcal, protein, fedt og kulhydrat.

hvad gør jeg?
Avatar billede olsensweb.dk Ekspert
06. september 2015 - 17:56 #1
da der ikke er noget code at arbejde ud fra er her nogle løse tanker

du kan kigge på sql sum
https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_sum
http://www.w3schools.com/sql/sql_func_sum.asp

eller du kan summe det op i din while løkke
(utested)
  
<?php
$sum_Kcal = 0;
$sum_protein = 0;
$sum_fedt = 0;
$rs = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($rs)){   
        $sum_Kcal += $row['Kcal'];
        $sum_protein += $row['protein'];
        $sum_fedt += $row['fedt'];
}

echo "totaler:<br>";
echo "Kcal = " . $sum_Kcal ."<br>";
echo "protein = " . $sum_protein ."<br>";
echo "fedt = " . $sum_fedt ."<br>";
?>



>De ting brugeren har valgt kommer ind på en ny side,
hvordan ??, hvikle format ??
måske man skulle kigge på http://php.net/array_sum

>alt data er trukket ud i en while med tilhørende checkbox,
du kunne også regne det ud løbende med javascript, når du alligevel har værdierne udtrukket for hver enkelt
http://stackoverflow.com/questions/21442833/javascript-add-checkbox-checked-values
http://stackoverflow.com/questions/12066649/jquery-checkbox-and-select-sum-the-values-and-add-in-var
Avatar billede nemkost Nybegynder
06. september 2015 - 19:36 #2
Som i nedenstående kode kan du se det er skrevet i php, hvor man checker den enkelte varer og trykket på submit knappen
Du får lige den kode der er skrevet:

<?php
$result = performQuery("SELECT * FROM kostdata");
       
$bg = '#eeeeee';
echo ' <form action="valgt.php" method="post"><table>';
        echo "<br>";
        echo "<tr><td> Navn</td>";
        echo "<td>Energi</td>";
        echo "<td>Protein</td>";
        echo "<td>Fedt</td>";
        echo "<td>Kulhydrat</td></tr>";
while ($row = mysqli_fetch_array($result , MYSQLI_ASSOC)) {
  $bg = ($bg=='#eeeeee' ? '#ffffff' : '#eeeeee');
  echo '<tr bgcolor="' . $bg . '">
  <td align="left">' . $row['Navn'] . '</td>
  <td align="left">' . $row['Energi'] . '</td>
  <td align="left">' . $row['Protein'] . '</td>
  <td align="left">' . $row['Fedt'] . '</td>
  <td align="left">' . $row['Kulhydrat'] . '</td>
  <td align="left">
  <input type="checkbox" name="checked[]" value="' . '<tr><td>' . $row['Navn'] . '</td>' . '<td>' . $row['Energi'] . '</td>' . '<td>' . $row['Protein'] . '</td>' . '<td>' . $row['Fedt'] . '</td>' . '<td>' . $row['Kulhydrat'] . '</td></tr>' . '" id="' . $row['Navn'] . '"  /> </td></tr>';
}
?>
</table>
<input type="submit" name="submit" value="submit" />
</form>

På siden valgt.php
har jeg sat denne kode ind:

            <table>
        <?php
       
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo 'Følgende har du lagt ind i kostplanen';
        echo "<br>";
        echo "<tr><td> Navn</td>";
        echo "<td>Energi</td>";
        echo "<td>Protein</td>";
        echo "<td>Fedt</td>";
        echo "<td>Kulhydrat</td></tr>";
    foreach ($_POST['checked'] as $value) {
            echo ($value);
        }
}
        ?>             
            </table>

Håber det giver mening.
Prøver at kigge på de links du har sendt
Avatar billede olsensweb.dk Ekspert
07. september 2015 - 07:36 #3
du kan gøre det nemt for dig selv, ved at overføre row id (har du vel i db i forvejen), og kun denne.

i valgt.php emploder du disse til en komma seperaret string som du anvender i din sql til at hente alle de poster ud af db igen.
prisen er selvføgelig et ekstra sql kald

test tabel
   
CREATE TABLE IF NOT EXISTS `kostdata` (
`id` int(11) NOT NULL,
`Navn` varchar(25) COLLATE utf8_danish_ci NOT NULL,
`Energi` float NOT NULL,
`Protein` float NOT NULL,
`Fedt` float NOT NULL,
`Kulhydrat` float NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `kostdata` (`id`, `Navn`, `Energi`, `Protein`, `Fedt`, `Kulhydrat`) VALUES
(1, 'a38', 2, 3, 1, 1),
(2, 'ymerdrys', 5, 1, 0.1, 3);

ALTER TABLE `kostdata`
ADD PRIMARY KEY (`id`);

ALTER TABLE `kostdata`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;


index.php

        <?php
        $sql = "SELECT * FROM kostdata";
        $result = mysqli_query($conn, $sql);
        $bg = '#eeeeee';
        echo "<br>";
        echo ' <form action="valgt.php" method="post"><table>';
        echo "<tr><td> Navn</td>";
        echo "<td>Energi</td>";
        echo "<td>Protein</td>";
        echo "<td>Fedt</td>";
        echo "<td>Kulhydrat</td></tr>";
        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
            $bg = ($bg == '#eeeeee') ? '#ffffff' : '#eeeeee';
            echo '
  <tr bgcolor="' . $bg . '">
  <td align="left">' . $row['Navn'] . '</td>
  <td align="left">' . $row['Energi'] . '</td>
  <td align="left">' . $row['Protein'] . '</td>
  <td align="left">' . $row['Fedt'] . '</td>
  <td align="left">' . $row['Kulhydrat'] . '</td>
  <td align="left"><input type="checkbox" name="checked[]" value="' . $row['id'] . '"></td></tr>
  ';
        }
        ?>
    </table>
    <input type="submit" name="submit" value="submit" />
</form>


valgt.php

        <table>
            <?php
            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                echo 'Følgende har du lagt ind i kostplanen';
                echo "<br>";
                echo "<tr><td> Navn</td>";
                echo "<td>Energi</td>";
                echo "<td>Protein</td>";
                echo "<td>Fedt</td>";
                echo "<td>Kulhydrat</td></tr>";

                $sum_Energi = 0;
                $sum_protein = 0;
                $sum_fedt = 0;
                $sum_kulhydrat = 0;

                $id_liste = implode(",", $_POST['checked']);
                $sql = "SELECT * FROM kostdata where id IN($id_liste)";
                $result = mysqli_query($conn, $sql);
                while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                    $sum_Energi += $row['Energi'];
                    $sum_protein += $row['Protein'];
                    $sum_fedt += $row['Fedt'];
                    $sum_kulhydrat += $row['Kulhydrat'];

                    echo "<tr><td>" . $row['Navn'] . " </td>";
                    echo "<td>" . $row['Energi'] . " </td>";
                    echo "<td>" . $row['Protein'] . " </td>";
                    echo "<td>" . $row['Fedt'] . " </td>";
                    echo "<td>" . $row['Kulhydrat'] . " </td></tr>";
                }
                echo "<tr><td> totaler</td>";
                echo "<td>" . $sum_Energi . "</td>";
                echo "<td>" . $sum_protein . "</td>";
                echo "<td>" . $sum_fedt . "</td>";
                echo "<td>" . $sum_kulhydrat . "</td></tr>";
            }
            ?>
        </table>
Avatar billede nemkost Nybegynder
07. september 2015 - 10:42 #4
det virker jo strålende! :)
Min udfordring er bare at ord, som er skrevet med æøå, kommer dette tegn &#65533;.
Jeg har blot copy/paste alt dit ind i SQL. Min php side er sat som UTF-8.
Hvad pokker er der galt?
Avatar billede olsensweb.dk Ekspert
07. september 2015 - 13:13 #5
>Min udfordring er bare at ord, som er skrevet med æøå, kommer dette tegn &#65533;.
>Jeg har blot copy/paste alt dit ind i SQL. Min php side er sat som UTF-8.

er siden gemt som UTF-8 uden BOM ??
har du sat <meta charset="utf-8"> i html ?? (tror jeg pga "Min php side er sat som UTF-8")

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>test</title>
    </head>
    <body>
        her er det jeg viste i #3
    </body>
</html>



har du sat charset på din sql connection ?? hvis det er text fra databasen
http://php.net/manual/en/mysqli.set-charset.php

da jeg afprøvede den viste code var der fint æøå

her er en checkliste fra http://www.eksperten.dk/spm/964375 #4

* er din fil encodet med utf-8
* er din fil gemt som utf-8 uden BOM
* er alle includerede filer utf-8
* er sidens charset sat til utf-8 ( <meta http-equiv="content-type" content="text/html; charset=utf-8" > )
* nb lig mærke til det arne_v skriver i http://www.eksperten.dk/spm/956216 #9  Og husk lige at HTTP header overruler META tag.

kan du svare ja ovenstående ja så burde du kører utf-8 hele vejen rundt
Avatar billede nemkost Nybegynder
07. september 2015 - 14:31 #6
Hvis vi tager punkterne fra starten af.
1. Ved ikke om den er utf-8 encodet
2. Ved ikke om den bliver gemt som utf-8
Bruger Netbeans 8.0.2 til at kode i.
3. ved jeg heller ikke, når jeg ikke ved om de overstående er.
4. Charset er sat på den samme måde, som du beskriver.
5. Min database er på et localhost og tænker at jeg ikke kan teste dette online?

Jeg har forsøgt at indsætte data via php til min database og når jeg trækker det ud igen, står det fint og flot med æøå. Dog er der underlige tegn i min database.
Det jeg har skrevet ind manuelt i phpadmin eller importeret fra en csv fil står korrekt med æøå, men er stadig med underlige tegn på min side.
Avatar billede nemkost Nybegynder
07. september 2015 - 14:43 #7
så tror jeg at jeg har løst problemet.
havde ikke sat charset på min sql connection helt korrekt. tak for hjælpen. Send et svar og du får dine velfortjente point
Avatar billede olsensweb.dk Ekspert
07. september 2015 - 16:29 #8
>Det jeg har skrevet ind manuelt i phpadmin eller importeret fra en csv fil står korrekt med æøå, men er stadig med underlige tegn på min side.
læs http://www.eksperten.dk/spm/943684 #4

>havde ikke sat charset på min sql connection
klsssisk, set den altid, det spare mange problemer, havde alle led i database kæden kørt sammen charset, var det ikke nødvendigt at sette charsettet på connection, men jeg gør det altid.


vedr. netbeans
http://stackoverflow.com/questions/24778725/how-to-change-default-encoding-in-netbeans-8-0
http://stackoverflow.com/questions/4133195/how-to-change-file-encoding-in-netbeans

og et svar så vi kan lukke
Avatar billede nemkost Nybegynder
21. september 2015 - 10:32 #9
tak for hjælpen - beklager jeg først lukker den nu.
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

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