Avatar billede BTEngineer Novice
18. juli 2011 - 14:29 Der er 14 kommentarer og
1 løsning

Opdatering problem med PHP

Hej Eksperter,

Med henvisning til: http://www.eksperten.dk/spm/940295 den sidste del, har jeg nogle problemer. Scriptet opdaterer ikke første gang, men først når man trykker anden gang virker det som det skal (submit-knappen). Jeg vil tro at det har noget at gøre med mine arrays - array_sum funktionen måske. Hele scriptet er postet i overstående tråd, hvis i ruller næsten helt ned i tråden.

Jeg håber i kan have en idé om hvad det skyldes.
Avatar billede erikjacobsen Ekspert
18. juli 2011 - 16:08 #1
Det er vel bare fordi du SELECT-er øverst i scriptet (og dermed ikke får opdateringer med), og opdaterer i bunden af scriptet. Du skal nok bare bytte om på de to ting.
Avatar billede BTEngineer Novice
18. juli 2011 - 16:17 #2
Hmm, jeg kan ikke lige se hvordan jeg skal kunne bytte om på dem, da UPDATE funktionen jo først kan bruges efter at der er trykket på submit-knappen - jeg kan ikke lige se hvordan jeg så kan flytte den op?  Er der mulighed for at du kan vise det?
Avatar billede erikjacobsen Ekspert
18. juli 2011 - 16:23 #3
Det er en misforståelse, der er set før. Nej, der er ingen forbindelse, der opretholdes, mens brugeren ser siden.

Et script udføres helt færdig, hver gang. Både når du sender <form>-en ud til brugeren, og når han derefter trykker på knappen efter at have tastet ind. Derfor "skal" man altid i toppen af scriptet håndtere brugerens inddata, og derefter vise ham en HTML-side med et resultat. (Bedre: efter håndtering af inddata, så redirecte til en HTML-side med et resultat).

Og du har netop oplevet hvad der sker, når man ikke gør det sådan ;)
Avatar billede BTEngineer Novice
18. juli 2011 - 16:33 #4
Yes, det er jeg med på.
Men resultatet skal netop vises på samme side.
Avatar billede erikjacobsen Ekspert
18. juli 2011 - 16:40 #5
Godt. Så skal du bare gøre som skrevet.
Avatar billede BTEngineer Novice
18. juli 2011 - 16:58 #6
Undskyld, men jeg ved slet ikke lige hvordan jeg skal gøre det nu.
Avatar billede BTEngineer Novice
18. juli 2011 - 17:16 #7
Hvis jeg skal flytte update funktionen, så skal alt det andet også med. Problemet er også at resultatet skal stå i højre side, og altså ikke i toppen. Jeg ved ikke hvordan jeg skal skille det ad.. Det virker i hvert fald ikke når jeg forsøger at gøre det som du skriver.
Avatar billede BTEngineer Novice
18. juli 2011 - 17:19 #8
Grunden til at jeg SELECT'er øverst er, at jeg gerne vil have at de data der bliver indskrevet, forbliver i de forskellige bokse, derfor bliver jeg nødt til at SELECT' øverst..
Avatar billede erikjacobsen Ekspert
18. juli 2011 - 19:05 #9
Men når du laver en SELECT før du opdaterer, får du jo ikke de data der bliver indskrevet. Du får de gamle data fra databasen, der jo ikke er ændret.

"Det virker i hvert fald ikke når jeg forsøger at gøre det som du skriver. " ... det kan vi ikke bruge til noget:
  1) Ingen ved hvad du faktisk har gjort. Du kan vise noget kode, hvis du skal have hjælp.
  2) Og hvad der ikke virker, skal vi bare gætte os til.
Avatar billede BTEngineer Novice
18. juli 2011 - 19:15 #10
Koden er:

<?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 erikjacobsen Ekspert
18. juli 2011 - 19:22 #11
Din opdatering af databasen UPDATE/INSERT står stadig i bunden, og jeg siger at det skal være det først du gør i scriptet.
Avatar billede BTEngineer Novice
18. juli 2011 - 19:26 #12
Ja, men hvis jeg flytter det fra det andet, så kokser det.
Avatar billede erikjacobsen Ekspert
18. juli 2011 - 19:32 #13
ok
Avatar billede BTEngineer Novice
19. juli 2011 - 20:41 #14
Tak for svarene. Jeg prøver at spørge et andet sted.
Avatar billede BTEngineer Novice
19. juli 2011 - 20:41 #15
Jeg ser at du ikke samler på points..
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