Gå til innhold

Få nyhet?id=** på nyhets skript


Anbefalte innlegg

God dag.

 

Jeg har nå drevet med php 2-3 uker, og jobber med og få nyhetene til og bli printet med nyhet?id=*et nummer* koden jeg nå bruker er:

 

<?php
//Her  har jeg en inkludert fil(toppen av designet)
$con = mysql_connect("localhost","bruker","passord");
if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }
mysql_select_db("news", $con);
$id = $_GET['id'];  // nyheter.php?id=12 (eller et annet tall)
$result = mysql_query("SELECT * FROM nyheter WHERE id='$id'");
while($row = mysql_fetch_array($result))
 {
 echo '<b>';
 echo $row['Titel'];
 echo '</b>';
 echo "<br />";
 echo $row['Nyhet'];   //Det jeg vil skal bli skrevet på siden
 echo '<br />';
 echo $row['nyhets'];
 echo '<br />';
 echo '<div id="fortid">Skrevet av: ';
 echo $row['Forfater'];
 echo ' den ';
 echo $row['Dato'];
 echo '</div>';
 }

mysql_close($con);
//Her og har jeg en inkludert fil(bunden av designet)
?>

Faktisk vett jeg ikke om jeg er inne på noe men uansett får jeg denne feilen:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\php\nyhet.php on line 11

 

Er jeg inne på noe? Vist ja, hva er galt?

Lenke til kommentar
Videoannonse
Annonse

Endre denne:

 

$result = mysql_query("SELECT * FROM nyheter WHERE id='$id'");

 

Til denne:

 

$result = mysql_query("SELECT * FROM nyheter WHERE id='$id'") or die (mysql_error());

 

Så får du sett hva som er feil med sql koden din

Lenke til kommentar

Den erroren der betyr vel at denne setningen:

$result = mysql_query("SELECT * FROM nyheter WHERE id='$id'");

er feil så enten

Heter ikke tabelln nyheter som ståle sa eller så er den problemer å connecte til databasen(ute lukk den for som regel vil det kommet en anne error da)

Jeg tror at du ikke har skrevet nyhet.php?id=5 eller noe sånt for vis du skriver nyhet?id=5 og tabellen er tom(tabellen har ikke en row med id 5)

Da får du en error for databasen kan ikke outputte noe den ikke har

 

Prøv å legge in noe i databasen først? eller har du det?

Vis du har det så har du ikke brukt riktig id=?? bak nyhet.php eller så har du gått direkte inn på nyhet.php

Lenke til kommentar

<?php
mysql_connect("localhost", "bruker", "pass");
mysql_select_db("database");

$id = $_GET['id'];

if (!mysql_num_rows(mysql_query("SELECT * FROM nyheter WHERE id = '$id'"))) {
echo 'Nyheten finnes ikke';
die('');
}

$r = mysql_query("SELECT * FROM nyheter WHERE id = '$id'");

while($row = mysql_fetch_array($r)) {

echo '<b>';
echo $row['Titel'];
echo '</b>';
echo "<br />";
echo $row['Nyhet'];   //Det jeg vil skal bli skrevet på siden
echo '<br />';
echo $row['nyhets'];
echo '<br />';
echo '<div id="fortid">Skrevet av: ';
echo $row['Forfater'];
echo ' den ';
echo $row['Dato'];
echo '</div>';

}

mysql_close();

?>

 

Den die() som er oppå der, skal stoppe feilmeldinga fra å komme opp...men har lagt merke til at den slår feil noen ganger hos meg, men...

 

Selve koden er ikke forandret (nesten), utenom at da får du bort den feilmeldinga hvis ID'en ikke finnes eller noe sånt.

 

 

Edit:

Fiksa hele koden, pga errors ;)

Endret av Anders-Moen
Lenke til kommentar
echo '<b>';

echo $row['Titel'];

echo '</b>';

echo "<br />";

echo $row['Nyhet'];  //Det jeg vil skal bli skrevet på siden

echo '<br />';

echo $row['nyhets'];

echo '<br />';

echo '<div id="fortid">Skrevet av: ';

echo $row['Forfater'];

echo ' den ';

echo $row['Dato'];

echo '</div>';

 

? Ditt rotehue. :D

Du kan med fordel (både med tanke på semantikk og fart) gjøre det om til følgende;

PHP

<?php

echo '<p><strong>'.$row['Titel'].'</strong><p><p>'.$row['Nyhet'].'</p><p>'.$row['nyhets'].'</p><div id="fortid">Skrevet av: '.$row['Forfater'].' den '.$row['Dato'].'</div>';

?>

 

loathsome+

Lenke til kommentar

Egentlig burde to strippe slashes og gjøre om < og > til < og >

og det kan være at du skal skrive over flere linjer óg, så da kan du bruke nl2br.

For å få linker og sånn da, kan du bruke bbKoder (hjelper deg på MSN hvis du vil ha det)

 

echo '<b>';
echo nl2br(htmlentities(stripslashes($row['Titel'])));
echo '</b>';
echo "<br />";
echo nl2br(htmlentities(stripslashes($row['Nyhet'])));  //Det jeg vil skal bli skrevet på siden
echo '<br />';
echo nl2br(htmlentities(stripslashes($row['nyhets'])));
echo '<br />';
echo '<div id="fortid">Skrevet av: ';
echo nl2br(htmlentities(stripslashes($row['Forfater'])));
echo ' den ';
echo htmlentities(stripslashes($row['Dato'])); // Man vet aldri om Christian tar en tur i db og forandrer datoen til en eller annen kode vett :P
echo '</div>';

Endret av Anders-Moen
Lenke til kommentar

Når man først er inne på optimalisering bør man drope SELECT * FROM foo også.

Spesifiser det du skal hente fra DB, ikke ta alt.

 

Sikkerhet er også meget viktig når det kommer til userinput. Hvem som helst kan kjøre en SQL-injection slik du har det nå.

Lenke til kommentar
Egentlig burde to strippe slashes og gjøre om < og > til < og >

og det kan være at du skal skrive over flere linjer óg, så da kan du bruke nl2br.

For å få linker og sånn da, kan du bruke bbKoder (hjelper deg på MSN hvis du vil ha det)

 

Man skal ikke bruke stripslashes på noe som leses ut av en database med mindre det som ligger i den har blitt addslashed 2 ganger. F.eks. hvis magic quotes er på og du addlasher i tilleg.

 

Edit: Og ved å gjøre $id = intval($_GET['id']); blir det litt mere sikkert :p

Endret av shaker
Lenke til kommentar

Ikke det? Når jeg dropper og bruke stripslashes (når jeg bruker det sånn som jeg satt opp til Christian her), og jeg f. eks har en kode i databasen som settes inn via inputs, f. eks

<?php
echo "Hallo, verden!";
?>

så blir outputen sånn her på meg:

<?php
echo \"Hallo, verden!\";
?>

 

Altså i db så står det sånn som i outputen siden jeg ikke bruker stripslashes på output.

Endret av Anders-Moen
Lenke til kommentar

Hva får du hvis du kjører det her?

 

<?php echo get_magic_quotes_gpc(); ?>

 

Fra php.net:

 

Description

string addslashes ( string $str )

 

Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).

 

An example use of addslashes() is when you're entering data into a database. For example, to insert the name O'reilly into a database, you will need to escape it. Most databases do this with a \ which would mean O\'reilly. This would only be to get the data into the database, the extra \ will not be inserted. Having the PHP directive magic_quotes_sybase set to on will mean ' is instead escaped with another '.

 

The PHP directive magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data. Do not use addslashes() on strings that have already been escaped with magic_quotes_gpc as you'll then do double escaping. The function get_magic_quotes_gpc() may come in handy for checking this.

Lenke til kommentar
Egentlig burde to strippe slashes og gjøre om < og > til < og >

og det kan være at du skal skrive over flere linjer óg, så da kan du bruke nl2br.

For å få linker og sånn da, kan du bruke bbKoder (hjelper deg på MSN hvis du vil ha det)

 

echo '<b>';
echo nl2br(htmlentities(stripslashes($row['Titel'])));
echo '</b>';
echo "<br />";
echo nl2br(htmlentities(stripslashes($row['Nyhet'])));  //Det jeg vil skal bli skrevet på siden
echo '<br />';
echo nl2br(htmlentities(stripslashes($row['nyhets'])));
echo '<br />';
echo '<div id="fortid">Skrevet av: ';
echo nl2br(htmlentities(stripslashes($row['Forfater'])));
echo ' den ';
echo htmlentities(stripslashes($row['Dato'])); // Man vet aldri om Christian tar en tur i db og forandrer datoen til en eller annen kode vett :P
echo '</div>';

8320012[/snapback]

 

 

Herregud, er det med dere å gjøre ting så tungvint som mulig, da?

 

PHP

<?php

$row stripslashes(htmlentities(nl2br($row)));

echo '<p><strong>'.$row['Titel'].'</strong><p><p>'.$row['Nyhet'].'</p><p>'.$row['nyhets'].'</p><div id="fortid">Skrevet av: '.$row['Forfater'].' den '.$row['Dato'].'</div>';

?>

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...