Avatar billede nemkost Nybegynder
21. september 2015 - 12:00 Der er 12 kommentarer

manipulere med tal fra databasen

Hejsa.

Jeg har en ret stor database. I den database er der et navn på forskellige madvarer.
Der er også indtastet kcal, kylhudrat, fedt og protein for hver enkel madvarer. Dette er udregnet ud fra pr. 100 g.
Dette er ikke hensigtmæssigt, når man vælger hver enkel madvaer. For brugeren vil gerne vide talene for f.eks. 250 gram hakket oksekød og 75 gram. for kartofler.

Kan det laves sådan så brugeren bestemmer hvor mange gram det skal være ved at trykke på en knap?

mvh.
Kim.
Avatar billede michael_stim Ekspert
21. september 2015 - 12:08 #1
Ja
Avatar billede nemkost Nybegynder
21. september 2015 - 12:22 #2
okay, det var da godt at høre.
Kan du forklare hvordan det kan laves, for er lidt på bar bund.
21. september 2015 - 12:22 #3
#1, det er uden tvivl det korrekte svar på spøgsmålet som det er stillet.  nemkost, som i dit tidligere spørgsmål har du ikke givet mange oplysninger, så vi skal til at gætte.  Jeg gætter på, at brugerne får en form, hvor de kan krydse af for madvarer.  Du kan så, for hver madvare, give et felt til at indføre vægt.  Til din database søgning får du så en variabel $_POST[vægt], og i stedet for at søge efter kcal o.s.v. søger du efter kcal*$_POST[vægt]/100.
Avatar billede olsensweb.dk Ekspert
21. september 2015 - 12:35 #4
@nemkost hvorfor vil du lave beregningen i sql ??,
http://stackoverflow.com/questions/11749120/mysql-query-divide-column-by-100

test tabel i http://www.eksperten.dk/spm/1005776 #3

SELECT Energi/100 as Energi_, Protein/100 as Protein_, Fedt/100 as Fedt_ FROM `kostdata`

dette udtræk skal ganges med det antal brugeren har indtasted
jeg vil ikke anbefale du laver beregningen i sql, lav det uden for databasen.

dit tidligere spm er i PHP, og det er deri jeg ville lave beregningen, eller bedst cientside dvs javascript.

tag resultatet fra databasen del med 100 og gang med det antal brugeren har indtasted.
21. september 2015 - 12:42 #5
#4, ja, efter at brugerne har angivet deres foretrukne vægt som databasens værdier skal ganges med (efter at have delt med 100) har du sikkert ret i, at denne udgangning bedre kan gøres i php koden end i databasen.
Avatar billede olsensweb.dk Ekspert
21. september 2015 - 13:01 #6
@nemkost du kunne kigge på denne tråd
http://www.eksperten.dk/spm/1005872
feks #1
men jeg vil ikke lave beregningen i sql.
Avatar billede nemkost Nybegynder
21. september 2015 - 14:33 #7
@ronols havde også tænkt det skulle være udenfor databasen og istedet i php udfra mit tidligere spørgsmål.
Jeg har lavet et søgefelt hvor brugeren kan skrive den madvarer de søger efter.
Eksempel søger ordet Agurk og der vil så komme resultaterne:
Navn    Energi    Protein    Fedt    Kulhydrat
Agurk, rå    45    0.7    0    2.1   
Agurk, syltet    296    0.3    0.2    17.3   
Agurk, syltet, uden tilsat sukker    41    0.3    0.2    2.3   
Drueagurk (sylteagurk), r    70    1.2    0    3.4   

Der er de tilhørende checkbox, så brugeren kan vælge hvad de vil overføre til næste side. Det er denne del af processen, hvor brugeren skal have mulighed for at vælge at f.eks agurk, rå skal være 50 gram, imens de andre søgte varer forbliver på 100 gram.

her er lige koden, som den ser ud lige nu:

                <form action="kostdatabase.php" method="POST">
                    <input type="text" name="query" placeholder="søg efter en madvar"/>
                    <input type="submit" value="søg"/>
                </form>
                <?php
               
    $query = (isset($_POST['query']) ? $_POST['query'] : null);

    $min_length = 1;
   
    if(strlen($query) >= $min_length){
       
        $query = htmlspecialchars($query);
       
        $query = mysql_real_escape_string($query);
       
        $sql = "SELECT * FROM nemkostdata WHERE Navn LIKE '%".$query."%'" or die(mysql_error());
        $result = mysqli_query($mysqli, $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">' . $_SESSION['Navn'] = $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>
  ';
   
        }
        }
    else{
        echo "Skriv et længere ord";
    }
        ?>
    </table>
    <form>
    <input type="submit" class="button" name="submit" value="overfør data" />
</form>
Avatar billede arne_v Ekspert
21. september 2015 - 16:13 #8
Jeg ville nok andre tabel strukturen til:

navn
enhed
vaegt
proteindelvaegt
fedtdelvaegt
kulhydratdelvaegt
alkoholdelvaegt

Eksempler:

letmaelk,1 liter,1000,0.04,0.01,0.05,0.00
agurkesalat,1 glas,250,0.01,0.00,0.10,0.00
Avatar billede arne_v Ekspert
21. september 2015 - 16:16 #9
Beregningerne skal ikke laves i SQL.

Hvis du laver en traditionel web app, saa laver du beregningerne i PHP.

Hvis du vil lave en "HTML5" web app og web services i PHP, saa laver du beregningerne server side i PHP eller clienmt side i JavaScript afhaengig af hvilken type API du foretraekker.
Avatar billede olsensweb.dk Ekspert
21. september 2015 - 18:51 #10
du kunne jo tilføje en col i din html tabel, med bruger input
jeg har fremhævet ændringer

<form action="kostdatabase.php" method="POST">
            <input type="text" name="query" placeholder="søg efter en madvar"/>
            <input type="submit" value="søg"/>
        </form>
        <?php
        $query = (isset($_POST['query']) ? $_POST['query'] : null);

        $min_length = 1;

        if (strlen($query) >= $min_length) {

            $query = htmlspecialchars($query);

            $query = mysql_real_escape_string($query);

            $sql = "SELECT * FROM nemkostdata WHERE Navn LIKE '%" . $query . "%'" or die(mysqli_error());
            $result = mysqli_query($mysqli, $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>";
            echo "<td>antal gram</td></tr>";
            while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                $bg = ($bg == '#EEEEEE') ? '#FFFFFF' : '#EEEEEE';
                echo '
  <tr bgcolor="' . $bg . '">
  <td align="left">' . $_SESSION['Navn'] = $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="text" name="gram['.$row['id'].']" value="100"></td>
  <td align="left"><input type="checkbox" name="checked[]" value="' . $row['id'] . '"></td></tr>
  ';
            }
        } else {
            echo "Skriv et længere ord";
        }
        ?>
    </table>
    <form>
        <input type="submit" class="button" name="submit" value="overfør data" />
    </form>                                   

læg mærke til index værdien er     $row['id']

valgt.php kunne se sådan ud, taget fra sidste spm
   
<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']);
                $gram_liste = $_POST['gram']; // her skal laves noget validering
               
                $sql = "SELECT * FROM nemkostdata where id IN($id_liste)";
                $result = mysqli_query($conn, $sql);
                while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                    $id=$row['id'];
                    $Energi = $row['Energi']/100 * $gram_liste[$id];
                    $Protein = $row['Protein']/100 * $gram_liste[$id];                   
                    $Fedt = $row['Fedt']/100 * $gram_liste[$id];
                    $Kulhydrat = $row['Kulhydrat']/100 * $gram_liste[$id];
                   
                    $sum_Energi += $Energi;
                    $sum_protein += $Protein;
                    $sum_fedt += $Fedt;
                    $sum_kulhydrat += $Kulhydrat;

                    echo "<tr><td>" . $row['Navn'] . " </td>";
                    echo "<td>" . $Energi . " </td>";
                    echo "<td>" . $Protein . " </td>";
                    echo "<td>" . $Fedt . " </td>";
                    echo "<td>" . $Kulhydrat . " </td></tr>";

                }
                echo "<tr><td> total</td>";
                echo "<td>" . $sum_Energi . "</td>";
                echo "<td>" . $sum_protein . "</td>";
                echo "<td>" . $sum_fedt . "</td>";
                echo "<td>" . $sum_kulhydrat . "</td></tr>";
            }
            ?>
        </table>
08. oktober 2015 - 13:09 #11
nemkost, kom du fra det igen?  Fik du problemet løst, eller er spørgsmålet ikke længere aktuelt, så luk det venligst igen, efter at have inviteret svar fra de der hjalp.  I modsat fald, så kom ind og forklar din videre hensigt.
23. april 2016 - 12:33 #12
nemkost, jeg prøver lige en gang mere.  Du oprettede spørgsmålet, og du fik adskillige indlæg, men du fik ikke afsluttet spørgsmålet, du har ladet os hænge i et åbent spørgsmål.  Hvis du mener du har fået hjælp, så bed om svar fra vedkommende, ellers luk med eget svar.  Please.
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