19. juni 2003 - 15:28Der er
23 kommentarer og 1 løsning
Opdater flere rækker på en gang.
Flg. script opdaterer kun den sidste række af alle som den skriver ud. Der skal (vel nok/måske) indsættes en array for at alle felter opdateres. Hjælp ønskes.
<?// Sætter den nye rækkefølge. if ($action=="opdater"){ $resultat = mysql_query("update create_db set sortering='$ny_sortering' where id_create='$id_create'" )or die (mysql_error()); echo "Opdateret";}
// Henter alle øvelser i create DB $find = mysql_query("SELECT * FROM create_db WHERE id_bruger ='$_SESSION[husk_id]' ORDER BY sortering asc") or die(mysql_error()); $count = mysql_num_rows($find); if ($count){?> <h3>Nuværende træningsprogram:</h3> <p> <form action="<? echo $php_self; ?>" method="post"> <? while ($row = mysql_fetch_array($find)) {?> <a href=java script:void(0) onClick="window.open('vis_ovl.php?id_ovl=<?=$row[id_ovl];?>','','width=580,height=550,left = 200, top = 100,menubar=no,scrollbars=yes')"> <? // Finder kategorien ud fra id_ovl $navn = mysql_query("SELECT * FROM ovelse_db WHERE id_ovl ='$row[id_ovl]'") or die(mysql_error()); $navn2 = mysql_num_rows($navn); while ($row2 = mysql_fetch_array($navn)) { print $row2[ovl_navn];?></A> - <?=$row2[kat];if ($row2[subkat]){?>/<?=$row2[subkat];}?> - <a href="index.php?slet=<?=$row2[id_ovl];}?>&list=slet.php">Slet</A> - <input type="text" name="ny_sortering" value="<?=$row[sortering];?>"> <input type="hidden" name="id_create" value="<?=$row[id_create];?>"> <br><?}?><br> <input type="submit" name="action" size=10 value="opdater"></form> <br></p> <?}?>
if ($action=="opdater"){ $resultat = mysql_query("update create_db set sortering='$ny_sortering' where id_create='$id_create'" )or die (mysql_error()); include ("opdateret.php"); }
// Henter alle øvelser i create DB
$find = mysql_query("SELECT * FROM create_db WHERE id_bruger ='$_SESSION[husk_id]' ORDER BY sortering asc") or die(mysql_error()); $count = mysql_num_rows($find); if ($count){?>
<?// Sætter den nye rækkefølge. if ($action=="opdater"){ $resultat = mysql_query("update create_db set sortering='$ny_sortering' where id_create='$id_create'" )or die (mysql_error()); include ("opdateret.php"); }
if (!$action){ // Henter alle øvelser i create DB
$find = mysql_query("SELECT * FROM create_db WHERE id_bruger ='$_SESSION[husk_id]' ORDER BY sortering asc") or die(mysql_error()); $count = mysql_num_rows($find); if ($count){?>
<h3>Nuværende træningsprogram:</h3> <p>Sæt rækkefølgen på de enkelte øvelser ved hjælp af menuen til højre.<br> <form action="<? echo $php_self; ?>" method="post">
<? while ($row = mysql_fetch_array($find)) { ?>
<table cellspacing="0" cellpadding="0" border="0"> <? // Finder kategorien ud fra id_ovl
Jeg tror mere det er et (d)HTML-problem end et php-problem du har her. Der er mange ting der går grueligt galt i Netscape7 og jeg får samtlige øvelser med hver gang til at vælge rækkefølge på.
men en god del af det KAN gøres i php, og det vil da også være det bedste for det du laver i php er ikke så afhængigt af hvilken browser du bruger.
På siden før (hvor du vælger øvelser) bør du gemme en mysql_record eller sessiondata der fortæller hvad der blev valgt. det kan du så finde frem igen på næste side ved hjælp af sessionid.
Og så kun udskrive rækkefølge linier for de øvelser.
Du antyder i oplægget at det skal være muligt at tilføje øvelser på side 2, det vil jeg fraråde. Mon ikke den situation du ønsker at håndtere er der hvor samme øvelse skal gentages iløbet af en træningssession, det ville jeg snarere gøre ved at lade brugeren vælge det samme 2 eller flere gange på første side, og så holde rede i hvor mange gange det er valgt.
Du skriver du får samtlige øvelser med, når der skal vælges række følge. Er det alle 14 eller alle som er i vinduet til højre?
På siden, hvor jeg vælger øvelser, gemmes id på øvelsen og id på brugeren, ikke mere.
Det er ikke muligt at tilføje nye øvelser på side 2. Det skal være muligt, som nu, at få listet sine valgte øvelser, og give dem et nummer alt efter hvilken øvelse, som skal udføres først.
Når denne bug er på plads, skal de gemte $sorteringer hives ud i en ny rækkefølge, som så printer træningsprogrammet ud i den rækkefølge som brugeren ønsker det og ikke bare den tilfældige rækkefølge, som det pt. står i.
Jeg håber du forstår min hensigt. Jeg har ikke testet siden i Netscape (og gør det nok heller ikke før jeg får klager fra brugerne)
Det som jeg søger er ved en løkke, som heletiden henter $sortering og opdaterer tabellen så længe der er øvelser som har en værdi i $sortering.
Det kan så udvides med finesser som en sammentælling af den samlede træningstid, outputfelter der fortæller hvormeget tid der ialt er afsat til fingerslag, ol. Alt ialt tror jeg det vil være en mere overskuelig formular at udfylde for diverse trænere.
på siden før er der alle de samme, men også nogle andre, såsom 'nedvarmning' og 'diagonalspil', men ikke flere end at de alle kunne ligge bekvemt i en select.
Forstår godt din hensigt (og eksemplet) men der skulle gerne komme mange øvelser efterhånden som der kommer flere brugere. Derfor er jeg nødt til at dele dem op i disse kategorier. Jeg mener det vil give et bedre overblik og undgå selectboxene, samt mulighed for at få beskrivelserne på de enkelte øvelser ved at klikke på den.
De der beskrivelser af øvelserne var jeg også ked af at smide væk, forestillede mig at de kunne ligge som seperate links ved siden af formularen.
Men din kategoriopdeling har jeg ikke noget imod at skrotte, såvidt jeg kan se er din kategoriopdeling ikke en der bestemmer at i hele den træningssession vil der kun forekomme øvelser i den kategori, så der er ikke rigtig nogen klar viden der overføres til side2. hvis der var kunne man lade php udfylde selectboksene på basis a hvilken kategori der blev valgt på en tidligere side.
eller man kunne erstatte hver selectboks med 2 hvor indholdet i den anden skifter alt efter hvad der er valgt i den første. minutter. [text} kategori: [ select ] øvelse: [ afledt select ]
i hver linie. men du skal op omkring 30-50 øvelser før sådan en opdeling er mere tidsbesparende end den er irriterende fordi der skal vælges 2 gange.
Kategoriopdelingen skal blive der. Der kan være flere øvelser i forskellige kategorier, som kommer til at hedde det samme, ligeldes er det nemmere når der skal vælges øvelser at man kun søger blandt dem som har interesse og ikke alle øvelser.
Din løsning vil løse mit problem mht. til at indexere øvelserne, men problemet er at det vil være uoverskueligt med alle de forskellige når de ikke er kategoriseret.
Ex. Selv om man starter med opvarmning kan det godt ske at opvarmningsøvelse nummer 10 skal ind før nummer 4. For de nyeste øvelser, efter som de bliver oprettet af forskellige brugere, vil få fortløbende numre (id_ovl) Ligeledes kan man jo godt lave en kompetetiv øvelse inden man laver lidt småspil, men øvelser med småspil vil være logisk at have først set fra en træners synspunkt.
Mht. minutforbrug, er det et tekstfelt, hvor man også kan indtaste 2 ture, 4 omgange etc. så det er ikke kun tid der snakkes om.
thorstein>> Jeg er måske lidt tung ;o), men hvad er det helt præcist der ikke bliver opdateret - jeg har prøvet at logge mig ind med test/test og leget lidt med øvelserne, men jeg kommer hele tiden retur til selectbokse-siden - kan man ikke se det man har indtastet noget sted?
Når du er på siden med selectboxene ude til højr, hvor rækkefølgen skal vælges, opdateres kun den sidste box. Den skal opdatere rækkefølgen på alle boxe/øvelser.
Der skal sættes en form for array/løkke ind, som kører en opdatering indtil den har gennemgået alle de valgte øvelser.
Som sagt jeg er åben for alle forslag. Denne kommando er dog ukendt for mig endnu (som så mange andre). Kan du give mig et forslag, som passer sammen med mine variabler??
<? // forbind til din database her // include ("sql.php"); $tabel = "saelgere"; if($_GET['send'] == "Send") { foreach($_GET['saelger'] as $key => $value) { $qry_update = "UPDATE $tabel SET salg1=$value[0] WHERE sælgernr=$key"; mysql_query($qry_update) or die(mysql_error()); echo "Salgstal er opdateret for sælger nr. " . $key; } } ?> Tilhørende tabel:
CREATE TABLE saelgere ( id int(11) NOT NULL auto_increment, sælgernr tinyint(3) NOT NULL default '0', salg1 float NOT NULL default '0', PRIMARY KEY (id) ) TYPE=MyISAM;
Min tabel: CREATE TABLE create_db ( id_create tinyint(4) NOT NULL auto_increment, id_bruger tinyint(4) NOT NULL default '0', id_ovl tinyint(4) NOT NULL default '0', sortering tinyint(4) NOT NULL default '0', PRIMARY KEY (id_create) ) TYPE=MyISAM COMMENT='Træningsprogram DB til Øvl coach.dk';
SÅ skal opdateringen bare rette sorteringen hvor $key = id_create......
Og ligeledes skal min selectbox sættes ind i stedet for input text feltet.
Jeg er rimelig tabt bag en vogn lige pt- måske hjælper det når puteren har været slukket et døgns tid. :o(
det du har fundet der opdaterer så vidt jeg kan se kun én bestemt sælger. dvs kun en opdatering af et felt - det du vil er at opdatere alle øvelserne på én gang ik?
Jeg har tænkt lidt: 1) hvis jeg har forstået det korrekt - skal alle felter opdateres og gemmes i DB - ik?
2) De gemmes lige efter hinanden med fortløbende id_create ik?
3) Der ligger så et problem i at man ikke ved hviklen øvelse de hører til - eller baseres dette på id_bruger
Hvis ikke der er nogen entydig markering af hvilken øvelse de hører til, skalder måske laves et felt mere i DB der indeholde en slags ID for den øvelses række der er ved at blive oprettet.
1) Der er kun et felt, som skal opdateres. Det er $sortering.
2) Og for at det bliver den rigtige $sortering, som opdateres, skal den vælges ud fra id_create, som dannes allerede når en øvelse vælges. Dette sker ikke i dette script, men i et tidligere, hvor også id_ovl og id_bruger gemmes.
3) Ud fra at sorteringen gemmes efter id_create, vil man også vide hvilken øvelse sorteringen vil tilhøre..
Jeg prøvede i går at indsætte 3 sælgere, og det fungerede fint. Ligeledes udskiftede jeg sælgerne og tabellen til min, og fik et udtræk med et id_bruger, som også virkede fint.
Problemet var bare at 'Sælger " . $saelgere[1] .' udskrev id_bruger og ikke id_create, som er hensigten.
Jeg håber at kunne få konkrete løsningsforslag på mit script og ikke andre mulige løsningsforslag....
Synes godt om
Ny brugerNybegynder
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.