kjetil_b Skrevet 22. januar 2006 Del Skrevet 22. januar 2006 Driver å lager et Perl script som bruker mysql. Det er et utlåne system for diverse utstyr, og alt har gått fint til nå. Har uheldigvis støtt på et lite problem som ikke skal være vanskelig å løse, men min erfaring med mysql og database bruk generelt er heller dårlig, siden jeg har drevet med flat-file bruk. $sth = $dbh->prepare("replace items where nummer=$nummer (nummer, navn, dato, levere, xbox, kontrollere, gigabit, switch, nettverkskabler, spill, tilbakelevert) values(nummer,navn,dato,levere,xbox,kontrollere,gigabit,switch,nettverkskabler,spill,?) ") or &feilmelding; Får error på denne, og vet rett og slett ikke hvordan jeg skal løse problemet. Har søkt og letet overalt, men finner ikke det som kan gjøre akkurat det jeg vil. Som sagt, har jeg veldig liten erfaring med mysql, så løsninga er ikke så enkel. Har ei bok som jeg bruker hvor det står en del eksempler, og det står hvordan jeg kan erstatte innhold, men ikke hvis jeg har flere linjer med innhold i databasen. Altså mer enn et innlegg. Jeg skal bare erstatte tilbakeleverings variabelen her, så burde da være enkelt. Setter pris på hvis noen kan dytte meg i riktig retning. Takk. Lenke til kommentar
neivoll Skrevet 22. januar 2006 Del Skrevet 22. januar 2006 (endret) Edit: Bare tullprat... Endret 22. januar 2006 av anners Lenke til kommentar
kjetil_b Skrevet 22. januar 2006 Forfatter Del Skrevet 22. januar 2006 Hm. Takk for svar! Noe andre? Lenke til kommentar
Mr. Floppy Skrevet 22. januar 2006 Del Skrevet 22. januar 2006 SQL-koden din skal være replace items values ($nummer, $navn, $dato, $levere, $xbox, $kontrollere, $gigabit, $switch, $nettverkskabler, $spill, $tilbakelevert) hvor $xxx er perl-variablene som inneholder de nye verdiene. Merk at navnet på variablene har ingen betydning så de må oppgis i den rekkefølgen de er oppgitt i MySQL-tabellen. replace vil da erstatte databaserader som allerede har den primære/unike nøkkelen som de nye verdiene har. Lenke til kommentar
kjetil_b Skrevet 22. januar 2006 Forfatter Del Skrevet 22. januar 2006 Takk for flott svar! Betyr det at hvis jeg bare endrer $tilbakelevert, og ikke endrer på de andre, så blir det stående slik de er? Lenke til kommentar
kjetil_b Skrevet 22. januar 2006 Forfatter Del Skrevet 22. januar 2006 Glemte å si en ting. Jeg må jo presisere hvilken som skal endres. Tenk hvis jeg har 3 forskjellige inputs med de variablene som nevnt over, så vil jeg bare redigere den som har f.eks. nummer 2. Hvordan skal jeg få gjort dette? Lenke til kommentar
Mr. Floppy Skrevet 23. januar 2006 Del Skrevet 23. januar 2006 Siden det er slik det forholder seg, så skal du heller bruke update: update items set tilbakelevert=true where nummer=$nummer Dette forutsetter at du har en tabell som heter items med to felt, nummer og tilbakelevert. Feltet nummer antar jeg er en primærnøkkel. $nummer er variabelen som perl-skriptet ditt skal sette inn. Koden vil da søke frem til alle rader som har det oppgitte nummer og oppdatere tilbakelevert-verdien til true. Siden jeg antar nummer er primærnøkkel, så betyr det at det aldri vil bli mer enn en linje som endres. Du kan lese mer om update i MySQL-dokumentasjonen. Håper dette hjelper deg videre. Hvis du har flere spørsmål kan det være praktisk om du også oppgir tabellstrukturen din slik at antall antagelser kan reduseres. Lenke til kommentar
kjetil_b Skrevet 23. januar 2006 Forfatter Del Skrevet 23. januar 2006 Tusen takk, Floppy! Nummer er primærnøkkelen, som er unik hvor den øker for hver linje. Tabellstrukturen min er vel den jeg postet tidligere: $nummer, $navn, $dato, $levere, $xbox, $kontrollere, $gigabit, $switch, $nettverkskabler, $spill, $tilbakelevert Altså Nummer - Navn - Dato osv. Tror det skal funke det du sier. Skal prøve ihvertfall! Databaser er ganske genialt, du må bare bli kjent med systemet først. Er en helt annen verden enn flat-file livet jeg har levd til nå. Hadde ikke mulighet til å bruke mysql før jeg fikk egen server, og det er først nå, et år etter at jeg fikk den at jeg faktisk har skjønt at jeg har ubegrenset med database plass! :!: Skal si ifra hvis det er noe som ikke virker. Takk igjen. Lenke til kommentar
kjetil_b Skrevet 23. januar 2006 Forfatter Del Skrevet 23. januar 2006 Burde kanskje postet dette i perl forumet, siden jeg hopper bittelitt off-topic på denne, men har du peiling hvorfor dette ikke funker? $sth = $dbh->prepare("update items set tilbakelevert=true where nummer=$nummer) or &feilmelding; $sth->execute($nydato) or &feilmelding; Var litt usikker på den tilbakelevert=true. Skal jeg erstatte true med noe, eller skal den stå? Lenke til kommentar
Mr. Floppy Skrevet 23. januar 2006 Del Skrevet 23. januar 2006 Du sier ikke hva slags feilmelding du får, men jeg får prøve... Perl er ikke min sterke side, men mangler du ikke avsluttende anførselstegn rundt sql-uttrykket? En annen ting er at konstanten true ikke ble innført i MySQL før versjon 4.1. Hvis du bruker en eldre versjon av MySQL kan du erstatte true med den konstante tallverdien 1 (forutsatt at feltet er av passende type). Og med tabellstrukturen din, så tenkte jeg på de vesentlige delene av tabelldefinisjonen (altså felter, typer og nøkler). Hva slags type er feltet tilbakelevert? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå