23. februar 2006 - 00:16Der er
9 kommentarer og 1 løsning
Problem med "oppdatering" av tabell
Hei. jeg har et problem som det måske kan være en nem løsnig på, men jeg har ikke klart å finne en løsning. Dette er en site for administrasjon av produkt-tabeller. På min site skal man kunne velge en bestemt tabell fra en drop down box. Når navnet til en tabell er valgt, og det trykkes på velg. Kjøres en sql spørring som henter den aktuelle tabellen. Feltene i tabellen består av textfield's, sånn man kan gjøre endringer. Når man har gjort en endring, trykker man bare på endre knappen som er til høyre for det aktueller produkte (til høyre for hvert produkt i tabellen er det en endre-button). Da kjøres det en ny sql spørring som oppdaterer endringene som er gjort i tabellen. Her kommer mitt problem...
Jeg vil da at den samme tabellen som det ble gjort endringer på skal komme opp på skjermen igjen, etter endringen (altså etter man har trykket på endre i den andre formen). Noen forslag til hvordan jeg skal få til det?
Kode:
//Her velger man først den tabellen man vil gjøre endringer på
<?php { { ?> //Funksjon som lagrer endringene som blir gjort på produktene <?php $endre = $_REQUEST['endre']; $type = $_REQUEST['type']; if($type) { $prodnavn = $_REQUEST['prodnavn']; $pris = $_REQUEST['pris']; $prodid = $_REQUEST['prodid']; endre($prodnavn, $pris, $prodid, $type); echo "<p style='color:red;'>"."Dine endreinger ble lagret."."</p>"; } ?>
PS: Må bare unnskylde om det er noe av det jeg skriver som er svært å forstå, når jeg kommer fra Norge og ikke er så god i dansk enda ;) I må bare si til om det er noe som er uklart.
Siden ligger for øyeblikket på en skole-server, så er desverre ikke noe mulighet for å kikke på den :/
Takk for tipset i forhold til SQL injections, men det kommer ikke til å være noe problem, når dette skal være en "administrasjons" side for en bedrift/virksomhet. Og de skal logge inn for å få tilgang. $tabell = $_REQUEST['tabell']; hentes også fra en drop-down boks, så det er vel heller ikke like stor risiko som med et text felt.
Problemet ligger vel hovedsaklig i at jeg har to <FORM>'s på samme side. I den første formen som består av en drop-down bok, velger man hvilken tabell man vil gjøre endringer på, f.eks tabellen med harddisker. Når man har valgt 'harddisk', skrives tabellen (denne tabellen består en ny <FORM>) med alle de forskjellige harddiskene ut ved hjelp av SQL-spørringen. Forekomstene skrives ut i textfields, så en kan gjøre endringer på teksten til hver harddisk (f.eks på prisen). Når man f.eks har endret prisen trykker man på 'endre', som oppdaterer den aktuelle raden ved hjelp av en SQL-spørring. Det jeg vil at skal skje når han har trykket på endre, er at den tabellen som først var valgt (i dette eks 'harddisk') skal skrives ut på skjermen igjen, etter at man har trykket på endre.
Måske det kan gjøres ved å la "valget" i drop-down boxen "stoppe" på valget som først ble gjort. Som i mitt eks når jeg velger 'harddisk' så står valget på 'harddisk' til et nytt valg blir gjort. Men jeg vet ikke hvordan man skal få det til. Håper noen av dere har et godt forslag/løsning på mitt problem...
Har forsøkt å forklare mitt problem, og håper dere forstår hva jeg mener ;)
For det lige giver lidt mening for mig selv, har jeg svaret under dine spørgsmål:
$tabell = $_REQUEST['tabell']; hentes også fra en drop-down boks, så det er vel heller ikke like stor risiko som med et text felt.
Jakobdo: Det er ikke svært at lave en form, som poster data til din php-fil, og dermed kunne man let sende noget andet end det du har i dine dropdowns.
Problemet ligger vel hovedsaklig i at jeg har to <FORM>'s på samme side. I den første formen som består av en drop-down bok, velger man hvilken tabell man vil gjøre endringer på, f.eks tabellen med harddisker. Når man har valgt 'harddisk', skrives tabellen (denne tabellen består en ny <FORM>) med alle de forskjellige harddiskene ut ved hjelp av SQL-spørringen. Forekomstene skrives ut i textfields, så en kan gjøre endringer på teksten til hver harddisk (f.eks på prisen). Når man f.eks har endret prisen trykker man på 'endre', som oppdaterer den aktuelle raden ved hjelp av en SQL-spørring. Det jeg vil at skal skje når han har trykket på endre, er at den tabellen som først var valgt (i dette eks 'harddisk') skal skrives ut på skjermen igjen, etter at man har trykket på endre.
Jakobdo: I din første form, der kalder du vel et script med et parameter. (du skal kalde samme script med samme parameter efter opdateringen er lavet.
Utifra ditt tips om å kalde scriptet en gang til (i "form" 2) så har jeg fått det til å virke. Jeg forsøkte det tidligere en gang også, før jeg postet innlegget her på Eksperten, men da fikk jeg det ikke til å virke. Men nå virker det fint. Lige et spørsmål iforhold til det jeg har gjort:
Jeg lagrer valget som blir gjort i dropdown boksen i en session, sånn at jeg får muligheten til å kalle funksjonen igjen med riktig parameter.
Er dette en god løsning eller har du et bedre tips/forslag?
Og et annet spørsmål, den funksjonen som henter den valgte tabellen "består" av html og php kode. Er det da muligheter får å lage en ekstern funkjson (egen fil med funksjonen), som jeg lige kan kalde når den skal kjøre. Eller blir det et problem når det er html i koden også?
<div id="varetabell"> <table> <tr> <th>Vare-id</th> <th>Produktnavn</th> <th>Pris</th> <th></th> </tr> <!--funskjon som skriver ut alle varer i den valgte kategori--> <?php
include "../../../secure/inc_db.php"; $tabell = mysql_real_escape_string($_POST['tabell']); $_SESSION['tabell'] = $tabell; $query = "SELECT * FROM $tabell"; $resultat = mysql_query($query) or die ("Feil " . mysql_error());
Du kan godt lave en ekstern funktion, den skal jo "bare" return "<html>blabla...</html>"; til sidst. Du kunne evt gemme tabellen i et hidden felt: <input type="hidden" name="tabell" value="<?=$tabell;?>">
Nå begynner jeg å nærme meg mål. Det virker nå nesten helt perfekt. Men har lige et lite problem, jeg har laget en ekstern funksjon som henter ut den aktuelle tabellen. hent($tabell); Den tar som du ser $tabell (den tabellen som blir valgt fra dropdown boksen) som parameter. Når jeg bruker $tabell = mysql_real_escape_string($_POST['tabell']); for å "gi" den eksterne funkjsonen denne parameteren, får jeg en feilmelding. Men alt går fint når jeg lige bruker $tabell = $_REQUEST['tabell'];. Er det noe måte å løse det på?
Jeg har fått svar på de spørsmålene jeg hadde. Så jeg vil takke så mye for hjelpen og gi deg poengene. Må du da sende et "svar" for at jeg skal kunne gi deg poengene? I så fall gjør det, så får du dine poeng.
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.