Gå til innhold

gnab

Medlemmer
  • Innlegg

    55
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av gnab

  1. Rart, det fungerer utmerket når jeg kjører det her..

     

    ajax.htm

     

    <html>
    <head>
    <script>
    function makeRequest(url) {
    
          var http_request = false;
    
          if (window.XMLHttpRequest) {
              http_request = new XMLHttpRequest();
              if (http_request.overrideMimeType) {
                  http_request.overrideMimeType('text/xml');
              }
          } else if (window.ActiveXObject) {
              try {
                  http_request = new ActiveXObject("Msxml2.XMLHTTP");
              } catch (e) {
                  try {
                      http_request = new ActiveXObject("Microsoft.XMLHTTP");
                  } catch (e) {}
              }
          }
    
          if (!http_request) {
              alert('Feilet');
              return false;
          }
          http_request.onreadystatechange = function() { alertContents(http_request); };
          http_request.open('GET', url, true);
          http_request.send(null);
    
      }
    
      function alertContents(http_request) {
    
          if (http_request.readyState == 4) {
              if (http_request.status == 200) {
                   document.getElementById("content").innerHTML = http_request.responseText;
              } else {
                  alert('Et lite problem oppsto.');
              }
          }
    
      }
    </script>
    </head>
    <body>
    <input type="button" value="Last fil" onclick="makeRequest('dummy.htm');" />
    <p>Innhold:</p>
    <div id="content" style="border: 1px solid red">
    (trykk på knappen først først)
    </div>
    </body>
    </html>
    

     

    dummy.htm

     

    <h1>Overskrift</h1>
    <p>Det var en gang...</p>
    

  2. Jeg testet koden din, og den fungerer som bare det herfra. Skrev om koden til å gå veien om mail.broadpark.no, da jeg sitter på en NextGenTel-linje, samt å vise responsen fra tjeneren, slik at du ser hva som evt. går feil.

     

    Koden er da nøyaktig slik (med unntak av e-post-adressene):

     

    #define WIN32_LEAN_AND_MEAN

     

    #include <windows.h>

    #include <winsock2.h>

    #include <stdio.h>

    #include <stdlib.h>

     

    #pragma comment( lib, "wsock32.lib" );

     

    // argc er antall argumenter slengt med programmet når det starter, argv[index] er selvfølgelig argumentet.

    int main( int argc, char *argv[] )

    {

        WSADATA sData;

        SOCKET Client;

     

        if( WSAStartup( 0x0202, &sData ) )

            return false;

     

        if( INVALID_SOCKET != (Client=socket( AF_INET, SOCK_STREAM, IPPROTO_TCP)) )

        {

            LPHOSTENT Host = gethostbyname( "mail.broadpark.no" );

            SOCKADDR_IN ServerInfo;

            ServerInfo.sin_family = AF_INET;

            ServerInfo.sin_port    = htons( 25 );

            ServerInfo.sin_addr    = *((LPIN_ADDR)*Host->h_addr_list );

     

            if( SOCKET_ERROR != connect(Client, (LPSOCKADDR)&ServerInfo, sizeof(ServerInfo)) )

            { 

                char Data[512];

                strcpy( Data, "HELO broadpark.no\r\n"  );

                strcat( Data, "MAIL FROM:<[email protected]>\r\n" );

                strcat( Data, "RCPT TO:<[email protected]>\r\n" );

                strcat( Data, "DATA\r\n" );

                strcat( Data, "Subject:E-postens tittel\r\n\r\n" ); // To ganger (RFC 882)

     

                strcat( Data, "Dette er da epostens innhold...\r\n" );

                strcat( Data, "\r\n.\r\n" );

                strcat( Data, "QUIT \r\n" );

     

                if( -1 == send(Client, Data, sizeof(Data), 0) )

                    printf( "Error sending mail" );

     

      char ret[1024];

      if ( -1 == recv(Client, ret, sizeof(ret), 0))

        printf("Error receiving response" );

      else

        printf("---<RESPONSE>---\n%s\n---</RESPONSE>---", ret);

            }

            else

                printf( "connect error\n" );

        }

        else

            printf( "Socket error\n" );

     

        WSACleanup();

     

        return 0;

    }

  3. Akkurat det å sende verdier fra en nettside og hente de ut igjen i en annen er noe man vanligvis ikke bruker Javascript til, men heller PHP eller andre skriptspråk som kjører på tjenersiden. Det betyr imidlertid ikke at det ikke er mulig, men det er litt mer klumpete bare.

     

    Det som skjer når innholdet i formen/skjemaet ditt sendes er at alle variabler legges på URLen som "pageB.html" kalles opp med. Så dersom du f. eks. har:

     

    <input type = "text" name = "navn" />
    <input type = "text" name = "alder" />

    og du skriver inn "Bob Leif" i navne-feltet og "51" i alder-feltet, så blir URLen:

     

    .../pageB.html?navn=Bob%20Leif&alder=51

    Etter selve filnavnet legges det til et spørsmålstegn, og så kommer alle variablene dine på formen "variabelnavn=variabelverdi", delt av "&"-tegn. I tillegg enkoder nettleseren spesielle tegn, slik at mellomrom i dette tilfellet blir %20.

     

    Når så denne URLen kalles opp, må disse variablene hentes inn. Hvis du vet at det kommer til å være et gitt antall variabler der og rekkefølgen disse kommer til å stå i, kan du skrive en kode som bruker denne informasjonen og derved kan bli nokså kort og grei, men det er likevel en del ting som må gjøres.

     

    For å gjøre det hele litt mer interessant har jeg skrevet en funksjon som henter inn alle variabler som finnes i URLen og returnerer en liste over alle variabelnavn og -verdier. Denne kan brukes generelt, altså uten av man vet noe spesielt om hvor mange variabler som evt. finnes, navnene på disse eller rekkefølgen de står i.

     

    function parseVariables() {
    
     // Lag variabel-liste som skal returneres
     var variables = new Array();
    
     // Hent URLen siden ble kalt opp med
     var url = new String(window.location);
    
     // Sjekk om URLen inneholder ?-tegn
     if (url.indexOf('?') != -1) {
    
       // Hent ut delen av URLen etter ?-tegnet
       url = url.split('?')[1];
     
       // Hent ut alle delene fra URLen delt av &-tegn
       var parts  = url.split('&');
    
       // Gå gjennom alle delene funnet
       for (var i = 0; i < parts.length; i++) {
         // Hent ut gjeldende del
         var part = parts[i];
    
         // Hent ut variabelnavn og -verdi delt av =-tegn
         var data = part.split('=');
    
         // Anta at det ikke finnes noen verdi, og sett denne tom
         var value = "";
    
         // Sjekk om det finnes verdi
         if (data.length == 2) {
           // Hent verdi
           value = data[1];
           // Dekod verdi
           value = unescape(value.replace(/\+/g,  " "));
         }
    
         // Hent navn
         var name = data[0];
         // Dekod navn
         name = unescape(name.replace(/\+/g,  " "));
    
         // Lagre navn og verdi i variabel-listen
         variables[name] = value;
       }
    
     }
    
     // Returner variabel-liste
     return variables;
    }
    
    var variabler = parseVariables();
    
    alert("Navn: " + variabler["navn"] + ", alder: " + variabler["alder"]);

    Det funksjonen gjør er kort sagt følgende:

    1. Finner URLen til siden (som da inneholder filnavnet og alle variablene)
    2. Henter ut biten etter spørsmålstegnet (som er variablene)
    3. Deler opp i enkeltvariabler (ved å splitte opp hver gang et "&"-tegn forekommer)
    4. Deler opp i variabelnavn og -verdi for hver av variablene (ved å splitte opp ved likhetstegnet)
    5. Dekoder variabelnavn og -verdi (endrer %20 tilbake til mellomrom o.l.)

    Og ut får du en liste som kan brukes som vist i de to siste linjene i koden over. Ved å skrive variabler["NAVN_PÅ_VARIABEL_HER"] får du ut dens verdi. Hvis ikke en variabel med navnet du oppgir finnes, vil du få "undefined".

     

    Hvis du limer all koden over inn mellom <script>..</script> i "pageB.html" får du se det hele in action. :)

     

    Registrerte at du skriver at du er helt grønn i Javascript, og i så måte er kanskje ikke dette det første problemet du bør satse livet på å klare. Men du har i alle fall litt kode å tygge på. ;)

  4. Du trenger bare å endre denne linjen:

     

    CD_OBJS[id].innerHTML=d+" day"+(d==1?" ":"s ")+CD_ZP(h)+"h "+CD_ZP(m)+"m "+CD_ZP(s)+"s"

    Den bygger strengen som vises ved å kjede sammen dager, timer, minutter og sekunder. Det du må gjøre er å fjerne de delene du ikke ønsker. For å bare få dager og timer blir linjen som følger:

     

    CD_OBJS[id].innerHTML=d+" day"+(d==1?" ":"s ")+CD_ZP(h)+"h "

    For å bare vise dager blir linjen slik:

     

    CD_OBJS[id].innerHTML=d+" day"+(d==1?" ":"s ")

  5. ??????, har aldri vært borti EXPLAIN før, men den er notert. Den første løsningen min var en løsning på trådstarters problemstilling; han spurte om den kunne sorteres, og det kan den. Men jeg er selvfølgelig enig med deg i at det ikke er optimalt, slik jeg har poengtert flere ganger.

     

    Forøvig fungerer det ikke å konvertere feltet ved bare å bytte til DATETIME i hvert fall.

  6. Mtp. å bytte felttype tror jeg det letteste vil være å opprette en ny kolonne og flytte over fra den gamle til den nye før du til slutt sletter den gamle.

     

    Dersom datoformatet ditt er NØYAKTIG "dd.mm.åååå - hh:m:ss" (slik du oppgav innledningsvis), kolonnen heter "dato" og tabellen "tabell" kan du bruke følgende kommandoer:

     

    alter table tabell add column nyDato DATETIME;
    
    update tabell set nyDato = concat(substr(dato, 7, 4), "-", substr(dato, 4, 2), "-", substr(dato, 1, 2), " ", substr(dato, 14, 2), ":", substr(dato, 17, 2), ":", substr(dato, 20, 2));
    
    alter table tabell drop column dato;
    
    alter table tabell change nyDato dato DATETIME;

     

    Det opprettes da en ny kolonne med korrekt felttype, DATETIME, og deretter kopieres alle verdier over fra "dd.mm.åååå - hh:mm:ss" i den gamle kolonnen til "åååå-mm-dd hh:mm:ss" i den nye kolonnen. Til slutt slettes den gamle kolonnen og den nye gis navnet til den gamle/opprinnelige kolonnen.

     

    Edit: Når jeg tenker meg om vil det kanskje duge å kjøre UPDATE-spørringen på den gamle kolonnen og deretter endre felttype, altså ikke gå veien om en annen kolonne. Det burde gå siden kolonnen før konvertering da er riktig formatert. Men før det evt. prøves er kopi av database allerede nevnt.

  7. Det som skjer er ganske enkelt at du henter ut dag, måned og år fra dato-feltet vha. substr-metoden, substr(A, B, C), som klipper ut C tegn, fra og med tegn B i kolonnen A. Deretter sorteres det etter år, måned og til slutt dag.

     

    mysql> select *, substr(dato, 1, 2) as dag, substr(dato, 4, 2) as maaned, substr(dato, 7, 4) as aar from test order by aar, maaned, dag;
    +------------+------+--------+------+
    | dato       | dag  | maaned | aar  |
    +------------+------+--------+------+
    | 07.02.2006 | 07   | 02     | 2006 |
    | 13.03.2006 | 13   | 03     | 2006 |
    | 12.10.2006 | 12   | 10     | 2006 |
    | 12.11.2006 | 12   | 11     | 2006 |
    | 12.20.2006 | 12   | 20     | 2006 |
    +------------+------+--------+------+

     

    Når du snakker om å anbefale eller ikke så vil jeg ikke anbefale den, men den løser problemet trådstarter kom med. Er som nevnt ikke den beste løsningen, men viser at det er mulig.

  8. Det som skjer er jo at du flytter elementet du finner på posisjon n til n+1 og deretter elementet du finner på posisjon n+1 til n, altså flytter du (som du sikkert har erfart) et og samme element først opp, og så ned igjen.

     

    Når du flytter et element ned (eller opp) vil det etter den første spørringen være to elementer med samme plassering. Når du så i den andre spørringen egentlig vil flytten opp (eller ned) det andre elementet, har du ingen garanti for at du får flyttet nettopp dette elementet og ikke det du akkurat har flyttet ned (eller opp).. Er du med? :p

     

    Jeg foreslår at du først av alt henter ut id-en på elementet du vil flytte i den andre spørringen, slik at du kan identifisere dette utfra id-en fremfor plasseringen når det skal flyttes, da denne er tvetydig og ikke til å stole på.

     

    Altså, når du skal flytte et element opp:

    - Hent id for element som skal flyttes opp (SELECT id ... WHERE place = $place)

    - Flytt ned element som nå er "oppe" (query1: som før)

    - Flytt opp element som nå er "nede" (query2: UPDATE ... WHERE id = $id)

     

    og tilsvarende når du skal flytte et element ned. (Har utelatt noe av spørringene for å få det mer oversiktlig.) Nå kan du skille mellom de to elementene som har samme plassering, og dermed flytte rett element opp (eller ned).. :)

  9. Du kan bruke regulære uttrykk;

    <?php
    
       $tekst = "abc<!--CreatedWith><name Name=\"Per\"/><creator Name=\"Nora\"/>-->def";
    
       echo "Før: $tekst\n<br />\n";
    
       $tekst = preg_replace("@<!--CreatedWith><name Name=\\\"[^\\\"]+\\\"/><creator Name=\\\"[^\\\"]+\\\"/>-->@", "", $tekst);
    
       echo "Etter: $tekst";
    ?>
    

    Koden over leter ette linjen du vil ha fjernet, med hva som helst for "x" og "y", og erstatter denne med "". Hvis du kjører skriptet og viser kildekoden fra nettleseren din vil du ser resultatet.

  10. + betyr én eller flere forekomster, slik at det altså, som du sier, MÅ forekomme begge deler. Bruker du derimot *, som betyr ingen eller flere forekomster, f. eks. [0-9]*, kreves det ingen forekomster av tall, men tall KAN gjerne forekomme.

     

    Når det gjelder uttrykket du bruker nå, blir det egentli "bokstaver+tall" i den rekkefølgen. Dersom du vil tillate "bokstaver+tall+bokstaver" eller en hvilken som helst kombinasjon, må du slå sammen de to blokkene slik; [a-z0-9]+. Da kreves det minst én bokstav eller et tall, men rekkefølgen bokstaver og tall kommer i ikke har noe å si.

     

    Endelig uttrykk: "#^([a-z0-9]+)$#i"

  11. Korriger meg hvis jeg tar feil, men det foregående eksempelet tar vel ikke hensyn til at det finnes flere IP-adresser i tabellen, i tillegg til litt annet småplukk.

     

    Jeg ville ha plassert følgende kode i toppen av din "gjestebok.php":

     

    /* Antar at databasetilkobling allerede er etablert */
    
    $ip = $_SERVER["REMOTE_ADDR"];
    
    $res = mysql_query ("SELECT ip FROM bannet WHERE ip = \"$ip\"");
    
    if (mysql_num_rows($res) > 0) {
       /* Går til banned.php */
       header("Location: banned.php");
       exit;
    }
    
    /* Dersom IP-adressen ikke var bannet fortsetter alt som vanlig herfra og ned.. */
    

  12. Studér følgende særdeles nøye.. (som om du kommer til å gjøre det.. :p)

    <?php
    
       /* Priser */
    
       $tuborg = 11.50;
       $borg = 10;
       $heiniken = 26.50;
    
       /* Henter inn antall kroner */
    
       if (isset($_POST["kroner"]))
           $kroner = floatval(str_replace(",", ".", $_POST["kroner"]));
       else
           $kroner = 0;
    
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> 
    <html>
       <head>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
           <style>
               body {font: 8pt "Trebuchet MS", Arial; }
           </style>
           <title>Pilskalkulator</title>
       </head>
       <body>
           <h1>Pilskalkulator</h1>
           Hvor mange kroner har du?<br /><br />
           <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
               <input name="kroner" type="text" value="<?php if ($kroner > 0) echo $kroner; ?>" /><br /><br />
               <input type="submit" value="Regn ut!">
           </form>
           <br />
           <?php
    
               /* Beregner hva du har råd til */
    
               if ($kroner > 0) {
                   echo "Med $kroner krone(r) til disposisjon har du råd til følgende:\n";
                   echo "<ul>\n";
                   echo "	<li>".intval($kroner / $tuborg)." stk Tuborg</li>\n";
                   echo "	<li>".intval($kroner / $borg)." stk Borg</li>\n";
                   echo "	<li>".intval($kroner / $heiniken)." stk Heiniken</li>\n";
                   echo "</ul>\n";
               }
           ?>
       </body>
    </html>
    

    Lagre koden som f. eks. pilskalkulator.php å legg den ut på webområdet ditt for å teste den.

×
×
  • Opprett ny...