Gå til innhold

kakkle

Medlemmer
  • Innlegg

    731
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av kakkle

  1. Vel, her er en mulig løsning.

    Lager linker med sidetall i toppen som kan trykkes på. Ikke link på aktiv side.

    Neste / Forrige side, skal være enkelt å lage, dersom du vil ha det ($side-1 og $side+1, med noen tester om de linkene trengs, f.eks)

     

    <?php
    
    $matrise = file('guestbook.txt');
    $matrise = array_reverse($matrise);
    $antprside = 10;
    $antinnlegg = count($matrise); // Antall linjer i filen
    $antsider = ceil($antinnlegg / $antprside); // Antall sider som skal vises
    $side = isset($_GET["side"])?$_GET["side"]:1;
    $start = ($side-1) * $antprside;
    $stopp = $start + $antprside;
    $i=1;
    //
    // Skriv ut side linker(kun hvis det er mer enn 1 side):
    //
    if($antsider > 1) { // Sjekk om sidetall skal skrive ut
       for ($teller=0;$teller<$antsider;$teller++) { // tell gjennom sidene
           if($teller != ($side-1)) { // Lag link hvis det ikke er den aktive siden
               echo " <a href='?side=".($teller+1)."'>".($teller+1)."</a> ";
           } // if
           else { //skriv ut sidetallet uten link
               echo " ".($teller+1)." ";
           }// else
        } // for
    }// if
    
    // Gå gjennom alle linjene/postene
    for ($j=$start;$j<$stopp;$j++) { // loop fra linje $start til linje $stopp
      // Del opp linja $j i variabler. (avhengig av side man er på)
      list($name, $message, $date, $time) = explode("*-*", $matrise[$j]);
    
      // Skriv ut posten
    
      echo '<!-- START PÅHTML-->';
      echo '<div class="';
      if ($i&1) echo '1';
      else echo '2';
      echo '">'.$name.'<span class="dato">'.$time.'   '.$date.'</span><br>';
      echo $message.'</div>
     <!-- SLUTT PÅ HTML -->';
     $i++;
    }
    ?>
    

     

    Med forbehold om småfeil...

     

    EDIT: Litt rot med æøå, og pluss at det VAR noen småfeil, da ;) (sikkert flere, men håper du skjønner tegningen)

  2. Hei

     

    Har fått et lite problem med mounting av ekstern harddisk med 2 partisjoner og ipod.

     

    Når ipod blir plugget inn, så kommer sda1 og sda2 opp, og sda2 blir mountet opp mot /media/ipod ved start av et musikkprogramm (f.eks gtkpod).

     

    Jeg har lagt følgende inn i /etc/fstab:

    /dev/sda2 /media/ipod vfat uid=0,gid=0,auto,rw,user 0 0
    

    som funker fint.

     

    Men denne ipod står jo ikke i maskinen hele tiden, da.

     

    Har også en ekstern portabel harddisk på 80 GB med 2 partisjoner. Når denne blir plugget i, så blir det jo litt mismatch i fstab, da, siden partisjon nr 2 blir sda2 (Når ipod ikke er tilkoblet).

     

    Filsystem på harddisk er FAT32 (sda1) og ext3 (sda2).

     

    Så da får jeg ikke mountet opp den andre partisjonen på harddisken uten å gå inn i fstab og kommentere ut den linjen. :(

     

    Noen som har noen gode tips ?

  3. Hei

     

    Jeg har hatt litt problemer nå en stund med å skrive ut lokalt. Det har tidligere fungert uten problemer, men for rundt en måneds tid siden, så får jeg ikke skrevet ut lokalt.

    Det går helt fint å skrive ut fra en annen pc i nettverket, via cups på maskinen.

     

    Litt info om systemet:

    Dist: Ubuntu 6.06 LTS

    Printer: Canon i990

    Cups versjon: 1.2.2

     

    Bruker drivere fra canon i japan eller no... Har ihvertfall fungert smertefritt tidligere.

     

    Har også prøvd med drivere via turboprint (Free Edition), uten at det hjalp.

     

    cupsd.conf:

     

     

    # Show troubleshooting information in error_log.
    LogLevel info
    SystemGroup lpadmin
    # Enable printer sharing and shared printers.
    Browsing On
    BrowseOrder allow,deny
    BrowseAllow @LOCAL
    BrowseAddress @LOCAL
    DefaultAuthType Basic
    <Location />
     # Allow shared printing and remote administration...
     Order allow,deny
     Allow @LOCAL
    </Location>
    <Location /admin>
     # Allow remote administration...
     Order allow,deny
     Allow @LOCAL
    </Location>
    <Location /admin/conf>
     AuthType Basic
     Require user @SYSTEM
     # Allow remote access to the configuration files...
     Order allow,deny
     Allow @LOCAL
    </Location>
    <Policy default>
     <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>
       Require user @OWNER @SYSTEM
       Order deny,allow
     </Limit>
     <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
       AuthType Basic
       Require user @SYSTEM
       Order deny,allow
     </Limit>
     <Limit CUPS-Authenticate-Job>
       Require user @OWNER @SYSTEM
       Order deny,allow
     </Limit>
     <Limit All>
       Order deny,allow
     </Limit>
    </Policy>
    Include /etc/cups/cups.d/browse.conf
    # Allow remote access
    Port 631
    

     

     

    Browse.conf:

    Browsing On
    

     

    /var/log/cups/error_log i info mode ved utskrift lokalt:

     

     

    I [02/Jun/2007:11:04:30 +0200] Full reload complete.
    I [02/Jun/2007:11:04:30 +0200] Listening to :::631 on fd 0...
    I [02/Jun/2007:11:04:30 +0200] Listening to 0.0.0.0:631 on fd 2...
    I [02/Jun/2007:11:04:47 +0200] Started "/usr/lib/cups/cgi-bin/printers.cgi" (pid=21244)
    I [02/Jun/2007:11:04:49 +0200] Adding start banner page "none" to job 156.
    I [02/Jun/2007:11:04:49 +0200] Adding end banner page "none" to job 156.
    I [02/Jun/2007:11:04:49 +0200] Job 156 queued on "Canon_i990_USB_1" by "kakkle".
    I [02/Jun/2007:11:04:49 +0200] Started filter /usr/lib/cups/filter/pstops (PID 21245) for job 156.
    I [02/Jun/2007:11:04:49 +0200] Started filter /usr/lib/cups/filter/pstoturboprint (PID 21246) for job 156.
    I [02/Jun/2007:11:04:49 +0200] Started backend /usr/lib/cups/backend/usb (PID 21250) for job 156.
    I [02/Jun/2007:11:04:51 +0200] Started "/usr/lib/cups/cgi-bin/printers.cgi" (pid=21272)
    

     

     

    print jobben forsvinner fra jobb køen, men ingenting kommer ut på skriveren. :(

     

    /var/log/cups/error_log i debug mode ved utskrift lokalt (testside fra cups)

    (OBS: Veeldig Myyye data):

     

     

    FJERNET

     

     

     

    Men si fra dersom det trengs noe mer informasjon

     

    EDIT: Det viste seg å være driveren som feilet. Etter en oppdatering av ett eller annet så var det vel ett eller annet som ikke var kompatibelt.

    Uansett... LAstet ned driverne og installerte dem på nytt, så gikk det faktisk veldig greit :)

     

    PS: Den turboprint saken var bare plagsom. Skrev ut en stor truboprint logo en tilfeldig plass på arket... :( Dette gjelder da den gratis (demo) versjonen. Regner med at det forsvinner dersom man kjøper programvaren ;)

  4. Hei

     

    Dersom du skal laste opp til en mappe som heter news, så blir dette litt feil. Du laster nå opp til gjeldende mappe som scriptet er i, og filanvnet blir news<gammeltfilnavn>

     

    PRøv å endre denne:

    $target_path = $uploadLocation .basename( $_FILES['upfile']['name']);
    

    til

    $target_path = $uploadLocation . "/" . basename( $_FILES['upfile']['name']);
    

    Da blir $target_path: news/<gammeltfilnavn>

    Hsuk at news må være skrivbar (0777 f.eks)

     

    EDIT: Dersom du gir skrivetilgang til den mappen som scriptet ligger i, så burde dette fungere fint ;)

  5. Spørringen din henter alle unike iper, (som tydligvis er 297)

    Så looper du igjennom resultatet, og skriver ut antall unike iper like mange ganger som det er unike iper...

     

    Og jeg håper ikke du har telt gjennom alle, at det er 297 ganger det blir skrevet ut ? ;)

     

    mysql_num_rows tar jo $r (spørringen) som argument, så du trenger forsvidt ikke å hente ut noen verdier ($row)

     

    EDIT: Med andre ord: fjern While løkken...

  6. Siden du redigerer verdiene, så bør du jo hente ut dataen før databasen og sette dem inn i tekstfeltene, eller så må man jo skrive inn alle feltene på nytt

     

    Eks.:

     

    $id = $_GET["id"];
    $sql = "SELECT * FROM brukere WHERE id=$id";
    $res = mysql_query($sql) or die("FEIL I SPØRRING: $sql");
    $row = mysql_fetch_row($res);
    echo ("
    <form method=\"POST\" action=\"?id=$id\">
    Username: <input type='text' size='25'maxlength='25' name='username' value='".$row["brukernavn"]."'>
    <br />
    Password
    <input type='text' size='30' maxlength='25' name='password' value='".$row["password"]."'/>
    <br />
    Name:
    <input type='text' size='30' maxlength='100' name='name' value='".$row["name"]."' />
    // osv...
    <br />
    Userlevel:
    <select name='userlevel'>
    <option value='1' selected='selected'>Users (1)</option>
    <option value='5'>Moderator (5)</option>
    <option value='6'>Fleet (6)</option>
    <option value='7'>Training (7)</option>
    <option value='8'>Chief of Pilots (8)</option>
    <option value='9'>Admin (9)</option>
    </select>
    <br />
    <input name=\'register\' type=\'submit\' value=\'Register\'>
    </form>
    

     

    Legg merke til at jeg fjernet "Edit" Submit knappen. Vet ikke helt hva du skulle med den ?

     

    EDIT: action i form tagen ;)

  7. <form action="?id=<?php echo $_GET["id"];?>" method="post">
    <input type="submit" name="delete" value="Slett bruker" />
    </form>
    
    
    <?php
    $id = $_GET['id']; // altså må URL'en være noe slikt:
    // side.php?id=1 . Bytt ut 1 med ID nummeret til personen du skal slette.
    if (isset($_POST['delete'])) {
    
    
    if(mysql_query("DELETE FROM tabell WHERE id='$id'"));
      echo 'Bruker slettet';
    else "Bruker ble ikke slettet";
    }
    ?>
    

     

    EDIT: Evt:

    <form action="" method="post">
    <input type="hidden" name="id" value="<?php echo $_GET["id"];?>">
    <input type="submit" name="delete" value="Slett bruker" />
    </form>
    
    
    <?php
    if (isset($_POST['delete'])) {
     $id = $_POST['id'];
     if(mysql_query("DELETE FROM tabell WHERE id='$id'"));
        echo 'Bruker slettet';
     else "Bruker ble ikke slettet";
    }
    ?>
    

  8. Du vil vel ikke la vanlige brukere ha mulighet til å slette ? Kanskje bare endre sin egen info, mens den som har den høyeste ranken (alle rettigheter), kan slette og editere alle brukere, bortsett fra å slette sin egen bruker:

    Sett at du lagrer brukerid til den som er logget inn i en session $_SESSION["user"]:

     

    list_users.php:

    $sql = "SELECT rank FROM brukere WHERE id=".$_SESSION["user"];
    $res = mysql_query($sql) or die("FEIL I SPØRRING: $sql");
    $row = mysql_fetch_array($res);
    $loggedinrank = $row["rank"];
    $sql = "SELECT * FROM brukere";
    $res = mysql_query($sql) or die("FEIL I SPØRRING: $sql");
    echo "Brukere:<br>\n";
    echo "<ol>";
    while($row=mysql_fetch_array($res)) {
      echo "<li>".$row["brukernavn"];
      if($loggedinrank = 1) {
         echo " - <a href='edit.php?id=".$row["id"]."'>edit</a>";
         if($row["id"] != $_SESSION["user"]) {
            echo " - <a href='delete.php?id=".$row["id"]."'>delete</a>";
         }
      }
      elseif ($_SESSION["user"] == $row["id"]) {
         echo " - <a href='edit.php?id=".$row["id"]."'>edit</a>";
      }
      echo "</li>";
    }
    echo "</ol>";
    

    sidene delete.php og edit.php må jo selvfølgelig gjøre en sjekk på om innlogget bruker har rettighet til å slette / editere brukeren.

     

    EDIT: Forutsetter jo at feltene i tabellen heter rank og brukernavn

  9. Har gjort noen få endringer:

    lagre.php:

     

     

    <?php
    $file           = "innlegg.txt";
    $dato        = date("d.m.y g:i");
    $navn        = $_POST['navn'];
    $epost        = $_POST['epost'];
    $innlegg      = $_POST['innlegg'];
    $innlegg  = stripslashes($innlegg);
    $epost  = stripslashes($epost);
    $navn = stripslashes($navn);
    $innlegg = str_replace ("<","<",$innlegg);
    $innlegg = str_replace ("\n","<br>",$innlegg);
    $epost = str_replace ("<","<",$epost);
    $epost = str_replace ("\n","<br>",$epost);
    $navn = str_replace ("<","<",$navn);
    $navn = str_replace ("\n","<br>",$navn);
    
    if(empty($navn) || empty($epost) || empty($innlegg)) {
       echo "Alle felt må fyldes ut!";
    } else {
    $gamle_innlegg = file_exists($file)?file_get_contents($file):"";
    $fp = fopen($file,"w");
    
    fwrite($fp, '
    <table width="390" cellspacing="1">
    <tr><td style="width: 100px">Dato:</td>
    <td style="width: 290px">'.$dato.'</td></tr>
    <tr><td>Navn:</td>
    <td><a href="mailto:'.$epost.'">'.$navn.'</a></td></tr>
    <tr><td valign="top">Kommentar:</td>
    <td>'.$innlegg.'</td></tr>
    </table><br />
    '.$gamle_innlegg);
    
    fclose($fp);
    
    echo 'Takk '.$navn.', for at du signerte gjesteboken min.</p>';
    }
    ?>
    
    <?php
    echo "<p><a href='index.php'>Tilbake til gjesteboken</a></p>";
    ?>
    

     

     

    index.php:

     

     

    <html>
    <head>
    <title>joheim.no</title>
    </head>
    <body>
    
    <h2>Gjestebok</h2>
    
    <u>Skrive i gjesteboken:</u><br />
    
    <br />
    <form method="post" action="lagre.php">
    <table width="390" cellspacing="1">
    <tr><td style="width: 100px">Navn:</td>
    <td><input type="text" name="navn" /></td></tr>
    <tr><td>Epost:</td>
    <td><input type="text" name="epost" /></td></tr>
    <tr><td valign="top">Kommentar:</td>
    <td><textarea name="innlegg" rows="4" cols="40" style="width: 278px;"></textarea></td></tr>
    <tr><td></td>
    <td><input type="submit" value="Send hilsen" /></td></tr>
    </table>
    </form>
    
    <u>Innlegg:</u><br /><br />
    
    <?php
    $file = "innlegg.txt";
    
    if (file_exists($file)) {
    $fil = "innlegg.txt";
    $fo = fopen ($fil, "r");
    $con = fread ($fo,filesize ($fil));
    fclose ($fo);
    echo "$con";
    } else {
    echo "Beklager, ingen innlegg";
    }
    ?>
    
    </body>
    </html>
    

     

     

     

    EDIT: For at alle innelggene skal komme i omvendt rekkefølge, så avhenger det av at filen (innlegg.txt) ikke innholder noen innlegg som er i riktig rekkefølge, hvis du mener hva jeg forstår ;)

  10. Men husk at dersom du kjører dette gjennom apache, så er det crontaben til apache brukeren som gjelder. Og for å kjøre crontab for en annen bruker, så må du har rettigheter til det... :(

     

    En mulighet er å lage en ekstrafil hver gang du editerer crontaben. Med hvilket som helst innhold, så lager du en cronjob på forhånd for din bruker, som sjekker om den filen finnes, finnes den, så kjøres crontab $cronfile, også slettes den filen som sjekkes etterpå...

     

    Hvis du skjønte det, da...

     

    EDIT: For å vise hvordan du kan gjøre det med et bash script som sjekker om det er noen endringer til crontab fra web:

    php script:

    <?php
    $cronfile="/path/to/cronjobfile";
    $minutes = "*";
    $hours = "1";
    $dayofweek = "*";
    $month ="*";
    $dow = "*";
    $command = "/home/kakkle/test";
    $newjob = "$minutes $hours $dayofweek $month $dow $command\n";
    $writefile = fopen ($cronfile, "a");
    fputs ($writefile, "$newjob");
    fclose($writefile);
    touch("modcron.tmp"); // Denne er for å si at det er lagt inn ny cronjob
    ?>
    

     

    bash script: checkcron:

    #!/bin/bash
    if [ -e /var/www/tmp/hw/modcron.tmp ]
    then
           crontab /path/to/cronjobfile
           echo "Cron tab was changed:"
           crontab -l
           rm -f /var/www/tmp/hw/modcron.tmp
    else
           echo "No cron edits found"
    fi
    

    legg dette inn i crontab:

    * * * * * /path/to/checkcron >> /path/to/checkcron.log
    

    Så er du igang :)

  11. <?php
    $cronfile="/path/to/a/cronjobfile";
    if(file_exists($cronfile)) {
       $readfile=file_get_contents($cronfile);
    }
    $minutes = "*";
    $hours = "1";
    $dayofmonth = "*";
    $month ="*";
    $dayofweek = "*";
    $command = "/path/to/a/cronjobfile";
    $newjob = $readfile."$minutes $hours $dayofmonth $month $dayofweek $command\n";
    $writefile = fopen ($cronfile, "w");
    fputs ($writefile, "$newjob");
    fclose($writefile);
    exec ("crontab $cronfile");
    echo nl2br($readfile);
    ?>
    

    Bruker som kjører apache må ha tilgang til /path/to/a/cronjobfile

     

    EDIT: Flyttet visning av cronfilen til etter at jobben er lagt til :)

×
×
  • Opprett ny...