kroekkete Skrevet 15. mai 2004 Del Skrevet 15. mai 2004 Hei kloke hoder, jeg prøver, men får ikke til, følgende: Fra kolonnen brukerindeks i en tabell har jeg hentet ut f.eks tore11117 Det jeg ønsker er at neste registrering i tabellen skal bli tore11118 Det jeg ender opp med er tore1... Her er fremgangsmåten: $sql_resultat = mysql_query($sql); while ($arr=mysql_fetch_array($sql_resultat)){ $bindeks= $arr['brukerindeks']; $teksttall = strstr("1", $bindeks); $tall = (int)$teksttall; $nytall =$tall+=1; $nyteksttall = (string)$nytall; $brukerindeks =$brukernavn; $brukerindeks.=$nyteksttall; INSERT INTO osv... Er det noen som ser hva jeg gjør galt? Mvh Primaxx Lenke til kommentar
???????? Skrevet 15. mai 2004 Del Skrevet 15. mai 2004 (endret) Er det en fast lengde på tallene og bokstavene? Hvis ikke kan du bare lage en funksjon som dette: $var = "????1234"; for($i=1; $ok != true; $i++){ if(is_numeric(substr($var,$i))){ $ok = true; } } $i--; $ny_var = substr($var,0,$i); $ny_var .= substr($var,$i)+1; echo $ny_var; EDIT: Den er IKKE testet, så det kan hende at du må gjøre noen endringer. Lykke til Endret 15. mai 2004 av ???????? Lenke til kommentar
RipZ- Skrevet 15. mai 2004 Del Skrevet 15. mai 2004 (endret) Jeg har to eksempler til deg. Det ene inspirert av ????????, det andre laget med REGEXP. 1) <? $var = "????123LLÆÆkk"; for($i = 0; $i <= strlen($var); $i++) { if(is_numeric(substr($var,$i,1))) { $tall = intval(substr($var,$i)); break; } } echo $tall; ?> Denne finner det første sammenhengede tallet i stringen. I dette tilfellet vil den finne 123. Den vil kun printe ut 123 selv om det står bokstaver bak tallet. 2) <? $var = "????12343434"; preg_match("/.*?([0-9]+)$/", $var, $array); $tall = $array[1]; echo $tall; ?> Vil kunne printe ut tallet som er bakerst i stringen. Tror ikke ??????? sitt eksempel fungerer skikkelig. Edit: La på litt formatering. Endret 15. mai 2004 av RipZ- Lenke til kommentar
???????? Skrevet 15. mai 2004 Del Skrevet 15. mai 2004 Okay, nå måtte jeg teste scriptet... hva var det som ikke fungerte med det? Lenke til kommentar
RipZ- Skrevet 15. mai 2004 Del Skrevet 15. mai 2004 Den fungerer greit om man fjerner "$ny_var = substr($var,0,$i);". Den gjør jo slik at du legger til starten av stringen. Og det blir vel litt feil i dette tilfellet, enig? Uansett, måten du har gjort det på er ikke en veldig smart måte å skrive en loop på. Du bruker "$ok != true" som statement, noe som fører til en uendelig loop om stringen ikke avsluttes med et tall. Selvfølgelig, det vil ikke by på problemer om alle navnene har et tall på slutten. Men jeg har iallfall alltid lært at dette ikke er en smart måte å gjøre det på. Bruk heller "$i <= strlen($var)" slik at den automatisk blir stoppet når loopen har gått gjennom hele variabelen, og bruk break for å stoppe loopen på ønsket tidspunkt. Eller er du uenig? Lenke til kommentar
???????? Skrevet 15. mai 2004 Del Skrevet 15. mai 2004 Det første er jeg uenig i siden han vil ha det er nettopp det han vil ha, han vil IKKE sitte igjen med bare tallet: Det jeg ønsker er at neste registrering i tabellen skal bli tore11118 Den andre er jeg enig i! Det var bare noe jeg satt sammen i farten Lenke til kommentar
kroekkete Skrevet 15. mai 2004 Forfatter Del Skrevet 15. mai 2004 Er det en fast lengde på tallene og bokstavene? Det er (skulle vært) fast lengde på tallene, og de er alltid sist i strengen, men navnet foran hentes fra en variabel, så det kan være hva som helst... Det jeg ønsker å få til er at det til slutt ser slik ut i kolonnen brukerindeks: (eksempel) tore11117 tore11118 sissel11113 sissel11114 tore11119 vera11112 tore11120 sissel11115 osv... Grunnen til at jeg ønsker dette er forøvrig at innholdet i tabellen vises forskjellig avhengig av hvem som er logget inn, og jeg vil at (f.eks) Tore, når han ser på oppføringen tore11119 skal kunne klikke neste og da få opp oppføringen tore11120. Det finnes kanskje en velkjent måte å løse dette på som ikke jeg vet om? Det jeg har av identifikatorer i tabellen nå (før jeg la til feltet brukerindeks) er indeks (autoindeksert) og brukernavn, som registreres i henhold til brukernavnet i sesjonen. Lenke til kommentar
RipZ- Skrevet 15. mai 2004 Del Skrevet 15. mai 2004 Det første er jeg uenig i siden han vil ha det er nettopp det han vil ha, han vil IKKE sitte igjen med bare tallet:Det jeg ønsker er at neste registrering i tabellen skal bli tore11118 Ai! Min feil. Trodde han bare ville hente ut tallet, jeg Jeg er ikke helt sikker hvor du vil, primaxx. Men en slik bla-funksjon er nok bedre å kontrollere ved å hente neste bruker ved hjelp av index-raden du har satt opp. Eller der det slik at du vil hente neste brukernavn som er tilnærmet likt det forrige? Hva konkret er det du prøver på, og hvorfor er det så jævlig mange som heter Tore!? Prøver du å lage noe slik som Hotmail f.eks har, at om brukernavnet allerede er registrert, så får man et eksempel på et nytt brukernavn beståendes av det foreslåtte brukernavnet pluss et tall? Og er det slik at du vil at alle brukernavnene skal være unike? Uansett, så lenge du bruker MySQL, finnes det alltid noen smarte løsninger. Om du prøver å forklare litt mer om hvilket formål du har med scriptet, skal vi vel alltids klare å skrape sammen noe smart til deg. Lenke til kommentar
kroekkete Skrevet 15. mai 2004 Forfatter Del Skrevet 15. mai 2004 Jeg er så dårlig til å forklare... Dette er det jeg forsøker på: La oss si at jeg heter Tore (sic!). Jeg er innlogget på siden, og sitter og ser på mine personlige ting (f.eks en oversikt over platene i platesamlingen min), som da er lagret i en tabell. Min venninne Laila har også logget seg inn og sitter og ser på platene sine. Hennes plater og mine plater er i den samme tabellen. Ønskesituasjon: Jeg sitter og ser på det jeg har lagt inn om platen "Hepp", med gruppen "Happ". Nederst på nettsiden ser jeg det står neste (eller forrige). Jeg vil at det som skjer er at jeg (Tore) skal kunne klikke på neste, og så få vist min neste oppføring i tabellen, og ikke bli logget ut slik det skjer i dag, da den neste oppføringen i tabellen faktisk er registrert av Laila, og ikke meg, så brukernavnet mitt stemmer ikke overens med det som ligger i tabellen, og jeg blir kastet ut. Tabellen ser f.eks slik ut: indeks brukernavn brukerindeks album artist 01 tore tore11112 frt øilck 02 tore tore11113 kvtcv uyroibgtouyr 03 laila laila11112 liyto utrciuyruziuyh 04 tore tore11114 hccc iouytfuv 05 tore tore11115 kut 5ilutuiyfi 06 laila laila11113 tuiriot uyfkurkuriu (Prøvde, men klarte ikke, å få det over til å se ut som det faktisk sto u en tabell) Forstår du nå hva jeg vil? Hvis jeg får feltet brukerindeks opp å gå kan jeg bruke det til neste/forrige omtrent som dette: echo "<a href=\"" . $PHP_SELF . "?brukerindeks=" . ($brukerindeks ++1) .>Neste</a> Sender jeg alle rett ut i tåka nå? Lenke til kommentar
kroekkete Skrevet 16. mai 2004 Forfatter Del Skrevet 16. mai 2004 Er det en fast lengde på tallene og bokstavene? Hvis ikke kan du bare lage en funksjon som dette: $var = "????1234"; for($i=1; $ok != true; $i++){ if(is_numeric(substr($var,$i))){ $ok = true; } } $i--; $ny_var = substr($var,0,$i); $ny_var .= substr($var,$i)+1; echo $ny_var; EDIT: Den er IKKE testet, så det kan hende at du må gjøre noen endringer. Lykke til Fantastisk! Det virker! Måtte bare endre fra $i-- til $i++, da den telte nedover og ikke oppover... Det eneste som er dumt er at jeg ikke skjønner hva det gjør... Hvis du, ????????, en eller annen gang har lite å gjøre ville jeg blitt veldig takknemlig hvis du hadde giddet å forklare (m teskje) linje for linje... Lenke til kommentar
???????? Skrevet 16. mai 2004 Del Skrevet 16. mai 2004 Det første du burde gjøre er å endre litt på scriptet: for($i=1; $i <= strlen($var); $i++){ if(is_numeric(substr($var,$i))){ $ok = true; } } $i--; $ny_var = substr($var,0,$i); $ny_var .= substr($var,$i)+1; echo $ny_var; Det scriptet gjør er at den tar teng for teng å sjekker når den kommer til et tall. Der tallet er deler den opp stringen i to og legger til 1 på tall delen. Så setter den sammen stringen igjen. Siden det er en string bruker man is_numeric - da den sjekker om stringen er numerisk og ikke int. Substr deler opp stringen på det gitte antall tegn $i. for() kjører en loop der $i øker for hver gang. Lenke til kommentar
kroekkete Skrevet 17. mai 2004 Forfatter Del Skrevet 17. mai 2004 Det første du burde gjøre er å endre litt på scriptet: for($i=1; $i <= strlen($var); $i++){ if(is_numeric(substr($var,$i))){ $ok = true; } } $i--; $ny_var = substr($var,0,$i); $ny_var .= substr($var,$i)+1; echo $ny_var; Det scriptet gjør er at den tar teng for teng å sjekker når den kommer til et tall. Der tallet er deler den opp stringen i to og legger til 1 på tall delen. Så setter den sammen stringen igjen. Siden det er en string bruker man is_numeric - da den sjekker om stringen er numerisk og ikke int. Substr deler opp stringen på det gitte antall tegn $i. for() kjører en loop der $i øker for hver gang. Hmm... Det nye scriptet genererte (med utgangspunkt i tore11126) tore111261 i stedet for tore11127 ... Hva er grunnen til at jeg ikke burde gå for den første varianten du skisserte? Mvh Primaxx (Som er her i stedet for i barnetoget...) Lenke til kommentar
RipZ- Skrevet 17. mai 2004 Del Skrevet 17. mai 2004 Man burde ikke bruke den for den kan resultere i en infinitive loop. Dvs at hvis navnet ikke inneholder noen tall, vil loopen fortsette i det uendelige og resultere i at scriptet enten fortsetter i evighet, eller automatisk stopper etter et gitt antall sekunder avhengig av hva som står i konfigurasjonen. <? $var = "torebernard123456"; for($i = 0; $i <= strlen($var); $i++) { # Begynnelsen på loopen. Vil fortsette helt til hele strengen er gått gjennom, bokstav for bokstav if(is_numeric(substr($var,$i))) { # Sjekker om resten av strengen er et tall fra en gitt posisjon. $tall = substr($var,$i); # Henter ut tallet ut i fra posisjonen styrt av loopen $tall++; # Øker tallverdien med èn $string = substr($var,0,$i) . $tall; # Legger sammen den delen av stringen som ikke er tall, og tallet som er økt med èn break; # Bryter loopen } } echo $string; ?> Denne tror jeg funker til formålet. Har lagt til kommentarer også. Lenke til kommentar
kroekkete Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 (endret) Takk takk takk takk... Men, jeg sliter fortsatt med en annen (elementær) ting...: Oppf. til tidl. problemstilling (tilbake/neste) Endret 27. mai 2004 av primaxx Lenke til kommentar
Nervetattoo Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Ville det ikke vært greiere om du hadde delt oppførings id'en i to i databasen. Nå virker det som om det føres opp med en slags unik id konstruert av brukernavn+tall. Vil tro det hadde vært mye greiere om du hadde lagt de to i hver sin post, så brukernavn og tall kunne hentes ut separat. Da vil du enkelt kunne hente ut oppføringer av en bestemt bruker ved å bruke WHERE brukernavn = $brukernavn. Og så ordne oppføringene numerisk etter id'en for å lage "neste" "forrige" knapper. Lenke til kommentar
kroekkete Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 (endret) Ville det ikke vært greiere om du hadde delt oppførings id'en i to i databasen.Nå virker det som om det føres opp med en slags unik id konstruert av brukernavn+tall. Vil tro det hadde vært mye greiere om du hadde lagt de to i hver sin post, så brukernavn og tall kunne hentes ut separat. Da vil du enkelt kunne hente ut oppføringer av en bestemt bruker ved å bruke WHERE brukernavn = $brukernavn. Og så ordne oppføringene numerisk etter id'en for å lage "neste" "forrige" knapper. Da vil ikke den numeriske biten telle én opp for hver ny registrering, noe jeg ønsker. Det jeg prøver å unngå er dette: Navn ID Ola 1 Ine 2 Ola 3 Ola 4 Ine 5 Det jeg har fått er dette: Brukerindeks Ola1 Ine1 Ola2 Ola3 Ine2 Det gjør det mye enklere for meg å lage neste/forrige-knapper, da jeg nå kun trenger å øke/minske den numeriske verdien på brukerindeks med 1, uten å bekymre meg over at det er andre brukere som har registrert oppføringer i tabellen i mellomtiden... Men, som sagt, akkurat dette funker. Mitt store problem i denne sammenheng nå er dette: Oppf. til tidl. problemstilling (tilbake/neste) Endret 27. mai 2004 av primaxx Lenke til kommentar
Nervetattoo Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Og fremdeles vil mitt forslag fikse det veldig enkelt og greit. Den ID'en du snakker om nå er typisk standard auto increment id. Jeg snakker om en id i tabellen som bare økes når den gjeldende bruker legger til noe. Det vil være snakk om en marginal justering i database og litt forandringer på hente ut skript, skrive til skript og kanskje noen andre. Jeg bare prøver å hjelpe deg til en bedre måte. Akkurat nå har du satt to infoer i samme tekst streng, det er klart det blir vanskelig da. Men det er jo selvsagt opp til deg, om siden allerede har en del brukere og mye info ligger i databasen kan det være litt jobb å forandre det. Lenke til kommentar
kroekkete Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 Og fremdeles vil mitt forslag fikse det veldig enkelt og greit.Den ID'en du snakker om nå er typisk standard auto increment id. Jeg snakker om en id i tabellen som bare økes når den gjeldende bruker legger til noe. Det vil være snakk om en marginal justering i database og litt forandringer på hente ut skript, skrive til skript og kanskje noen andre. Jeg bare prøver å hjelpe deg til en bedre måte. Akkurat nå har du satt to infoer i samme tekst streng, det er klart det blir vanskelig da. Men det er jo selvsagt opp til deg, om siden allerede har en del brukere og mye info ligger i databasen kan det være litt jobb å forandre det. Hmm, du sier noe. Vi tenker jo egentlig det samme, bare at jeg muligens har forvansket det hele litt... Noe alá dette? Hent tabell Sjekk om Ola har registrert noe i tabellen tidligere Hvis nei { Sett brukerindeks til 1 Legg $data, $brukernavn og brukerindeks inn i tabellen} Hvis ja { Velg (fra tabellen) brukerindeks med høyest verdi, og som er knyttet til Ola Øk verdien av brukerindeks med 1 Legg $data, $brukernavn og brukerindeks inn i tabellen} Send Ola tilbake til forsiden Lenke til kommentar
Nervetattoo Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Noe sånt ja Veldig enkelt og sørge for at man ikke blander brukere med en knøtt liten WHERE i spørringene. Lenke til kommentar
kroekkete Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 Strengt tatt kan jeg vel bare si at default verdi på feltet brukerindeks i tabellen er 1? -Så slipper jeg kanskje unna med ennå mindre koding? -Prøver nå! 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å