Avatar billede Slettet bruger
10. februar 2011 - 12:29 Der er 5 kommentarer og
1 løsning

Problemer med at update flere udtrækninger på en gang.

Jeg vil gerne have at når jeg trykker opdater, så opdatere den alle udtræk.

Jeg har denne kode:


$result = mysql_query("SELECT ID,START,SLUT,OC,RUNDE FROM Rundetid ORDER BY ID") or die(mysql_error());
while ($row = mysql_fetch_array($result))
{
$oc=$row['OC'];
$start=$row['START'];
$slut=$row['SLUT'];
$round=$row['RUNDE'];
$rid=$row['ID'];
$nr++;
$n++;
if ($_SESSION['adminmode'] == 'off'){
if ($round != 18) {
if ($n % 2 == 0) {
echo "<tr><td>$round</td><td>$start</td><td>$slut</td>";
} ELSE {
echo "<td>$start</td><td>$slut</td></tr>";
}
}
}
if ($_SESSION['adminmode'] == 'on'){
if ($round != 18){
if ($n % 2 == 0) {

echo "<tr><td>$round</td><td><input type='text' name='start' value='$start'></td><td><input type='text' name='slut' value='$slut'><input type='hidden' name='rid' value='$rid'></td>";
} ELSE {
echo "<td><input type='text' name='start' value='$start'></td><td><input type='text' name='slut' value='$slut'><input type='hidden' name='rid' value='$rid'></td></tr>";
}
}
if ($round == 18){
echo "<tr><td colspan='3'>Sæson slut  (sæt tid langt frem i tide)</td><td><input type='text' name='start' value='$start'></td><td><input type='text' name='slut' value='$slut'><input type='hidden' name='rid' value='$rid'></td></tr>";
}
}
}
if ($_SESSION['adminmode'] == 'on'){
echo "<tr><td colspan='5' align='center'><input type='submit' name='submit' class='bottom' value='Opdater'></td></tr>";
}
echo "</form>";


Dem sender jeg jo til denne side:

<?
session_start();
include ('config.php');

        $rid = addslashes($_POST['rid']);
        $start = addslashes($_POST['start']);
    $slut = addslashes($_POST['slut']);


      mysql_query("UPDATE Rundetid SET START='$start',SLUT='$slut' WHERE ID='$rid'") or die(mysql_error());


header("Location: $_SERVER[HTTP_REFERER]");
?>


Hvad gør jeg galt?
10. februar 2011 - 13:09 #1
Du har ikke forklaret (eller jeg har ikke forstaaet) hvad problemet er.  Hvad er det du vil opnaa med din kode og hvad faar du i stedet for?

Men hvad problemet saa er, jeg har problemer med at forstaa strukturen i din kode.  To ting falder i oejnene: 

(1) I linierne 15 til 17 i din kode har du en IF ELSE struktur.  IF delen indeholder en <tr> men ikke nogen </tr>, og ELSE delen indeholder ikke nogen <tr> men en </tr>.  Saa der kommer kludder i raekkerne i html tabellen.  Jeg ville mene det skulle vaere noget i denne retning:

echo "<tr>";
if ($n % 2 == 0) {
echo "<td>$round</td><td>$start</td><td>$slut</td>";
} ELSE {
echo "<td>$start</td><td>$slut</td>";
echo "</tr>";

(2)  I den sidste linie i den foerste box afslutter du en html form - echo "</form>";  Men jeg kan ikke se at du nogen steder paabegynder formen, altsaa med echo "<form>";

Det er i linie 24 du begynder med dine <input> elementer, saa skulle du have startet med echo"<form action = [den side du vil sende til] method='form'><tr><td>$round</td> o.s.v.???
Avatar billede Slettet bruger
10. februar 2011 - 13:13 #2
1)
Det er medvilje.
Jeg får på den måde hver anden udtræk til at afslutte med </tr>

2)
Kan se at der mangler den øverste linje:

echo "<form name='form' method='post' action='round_edit.php'>";

Ved ikke hvorfor den ikke lige kom med, men det er en fejl.

round_edit.php er så siden jeg sender til.


Mit problem er at den ikke opdatere alle udtræk.
Den opdatere kun det sidste udtræk...
10. februar 2011 - 14:00 #3
Ok, meget hurtigt (for jeg skal afsted), jeg forstaar at du traekker alle rundetider ud af databasetabellen Rundetid og viser dem i en html tabel.  Hvis $_SESSION['adminmode'] == 'on' laver du en formular saaledes at du kan opdatere vaerdierne af de enkelte rundetider og derefter trykke paa submit knappen i bunden af formularen.  Saa forventer du at alle rundetider (eller de du har rettet) skal opdateres i databasetabellen Rundetid, men du faar kun opdate af en enkelt rundetid i databasen.  Er det korrekt forstaaet?

Det har nok noget at goere med at variablerne for alle raekkerne hedder det samme.  Startvaerdien for den foerste runde kommer til at hedde $_POST['start'], og det samme hedder starttiden for runde 2 og runde 3 o.s.v.  Saa vaerdierne i runderne overskriver hinanden, og til sidst indeholder $_POST['start'] vaerdien for den sidste raekke.  En loesning kunne vaere at lave en selvstaendig formular med en selvstaendig submit knap for hver raekke i html tabellen.  Saa submitter du individuelt de raekker du har rettet.  Saa som:

while ($row = mysql_fetch_array($result))
{
....
echo "<tr><form action=...><td>...<input type='text' name='start'..</td><td><input type='submit' name='submit'></td></form></tr>";

Ellers maa du nok ind paa at give variablerne for hver raekke forskellige navne og i  round_edit.php at have en loekke der sender hver raekke til mysql.
Avatar billede Slettet bruger
10. februar 2011 - 14:10 #4
Det var lidt det jeg frygtede.
Det er sådan det har fungeret før
Ville gerne undgå alle de knapper da de fylder meget i designet.
Derfor ville jeg helst have en knap der opdatere alle sammen.

Jeg lader den lige stå åben et par timer, hvis nogen har et forslag eller en anden mulighed.

Ellers må jeg forsætte med at gøre det på den måde.
10. februar 2011 - 17:21 #5
Hvis du gerne vil undgaa en lang raekke knapper hvad saa med at bruge en lynlaas?

Nej, spoeg til side - jeg har taenkt over alternativerne, men de ser gruelige ud.  Det med at give vaerdierne forskellige variabelnavne kan vel klares ved at tilfoeje $rid vaerdien til de forskellige navne saa som:

...<input type='text' name = '$ridstart' ...>

I stedet for saa at proeve at holde rede paa hvilke vaerdier der er forandret og update tabellen ville det saa nok vaere nemmere at delete det hele og saa inserte det hele forfra i en loekke.  For at faa en loekke kan du danne en array af $rid vaerdierne saaledes:

while
{
..

ridarray[] = $rid
....

og saa loekken:

foreach(ridarray as $r)
{
mysql_query("insert into Rundetid values('" . $_POST['$rrid'] . "', '"$_POST['$rstart'] . "' ... where id = '" . $_POST['$rrid'] . "');
}

Syntaksen er sandsynligvis forkert, og der skal nok pusles meget for at faa den rigtig.  Saa med mindre der er andre medlemmer der har ideer vil jeg foreslaa at du holder dig til en submitknap for hver raekke i tabellen.

Men hvis det 'kun' er til brug for admin kunne du jo lave knapper der fylder mindre ved i stedet for value='Opdater' for eksempel at bruge value='o'.
Avatar billede Slettet bruger
10. februar 2011 - 18:32 #6
Hehe.. Tror jeg vælger lynlåsen :P

Eller bare en submit knap for hver.
Der er også små fordele ved at gøre det på den måde.
Så det må blive sådan det er. :)

Tak for forslaget ellers.
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

IT-JOB

Politiets Efterretningstjeneste

SOC-analytikere i PET

Capgemini Danmark A/S

SAP Engagement Manager

TD SYNNEX Denmark ApS

BDM Cisco Security