Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2008-12-10, 20:32
  #1
Medlem
Hasztexs avatar
Tjena.

Jag håller på med en hemsida som ska vara ungefär som blocket. Jag har kommit rätt långt.
Jag har fixat så att man fyller i en form, sedan sparas i databasen.
Sedan så visas titeln och pris etc i ett index, via en "while-loop". Det funkar skitbra förutom en sak.

Jag vill att man ska kunna klicka på titeln och sedan komma till en ny sida, som i detta fallet heter "view.php". Titeln måste ju länka via det ID som annonsen har. Sedan skall resten av informationen visas på den andra sidan "view.php"

Men jag får det inte att fungera.
Om det är någon som kan hjälpa mig med lite kod exempel skulle jag vara väldigt tacksam!

Såhär borde det se ut i adressfältet, om det hjälper till.
T.ex: (http://www.xxxxxxxxx.com/view.php?id=1)

Hälsningar
Hasztex
Citera
2008-12-10, 20:46
  #2
Medlem
Du får länka till /view.php?id=1 och sen använda dig av $_GET['id'] och ta fram rätt annons ur databasen.

T.ex:
Kod:
$var $_GET['id'];
$query mysql_query("SELECT * FROM tabell WHERE id = '$var'"
Citera
2008-12-10, 20:53
  #3
Medlem
Nattskenets avatar
Och för att göra koden något säkrare:

Kod:
<?php

$var 
$_GET['id'];

if (
ctype_digit($var)) {
$query mysql_query("SELECT * FROM tabell WHERE id = '$var'");
} else {
// Error-kod

}
?>
Citera
2008-12-10, 20:55
  #4
Medlem
Citat:
Ursprungligen postat av Nattskenet
Och för att göra koden något säkrare:

Kod:
<?php

$var 
$_GET['id'];

if (
ctype_digit($var)) {
$query mysql_query("SELECT * FROM tabell WHERE id = '$var'");
} else {
// Error-kod

}
?>

Självklart, men något måste väl folk göra själv?
Citera
2008-12-10, 21:42
  #5
Medlem
Hasztexs avatar
Jag är rädd att jag inte riktigt förstår hur ni menar.

Ta fram rätt annons ur databasen? Det ska ju skötas automatiskt.
Men jag försökte iaf, har ändrat och hållt på nu ett tag men får det inte att fungera.
Alla länkar går ju bara till "?id=1"

Här är koden

Kod:
<?
$result 
mysql_query("SELECT * FROM ads ORDER BY pris");

while(
$row mysql_fetch_array($result))
  {
?>
<?php

$var 
$_GET['id'];

if (
ctype_digit($var)) {
$query mysql_query("SELECT * FROM ads WHERE id = '$var'");
} else {
mysql_error(); 
}
?> 
<div align="left">
  <table width="100%" border="0" cellpadding="0" cellspacing="0" class="annonser">
    <tr>
      <td width="180" height="39" bgcolor="#FFFFFF" class="ads_inside">&nbsp;</td>
      <td width="309" class="ads_inside"><? echo "<a href='view.php?id=1'>"?><?php echo $row['titel']; ?><? echo "</a>"?>
      <b><br />
        Pris:</b> <? echo " " $row['pris']; ?> kr</td>
      <td width="183" bgcolor="#FFFFFF" class="ads_inside"><? echo " " $row['stad']; ?><? echo " " $row['landskap']; ?></td>
      <td width="175" valign="top">&nbsp;</td>
    </tr>
  </table>
<?
}
?>
Citera
2008-12-10, 21:58
  #6
Medlem
Det beror ju på att din kod ser ut såhär:

Kod:
<a href='view.php?id=1'>"; ?><?php echo $row['titel']; ?> </a>

När den borde se ut såhär:
Kod:
echo '<a href="hej.php?id='$row['id'] .'">'$row['titel'] .'</a>'
Citera
2008-12-10, 23:06
  #7
Medlem
Hasztexs avatar
Tack så mycket! Det fungerar utmärkt på indexsidan.

Nu, hur gör man för att "view.php" ska visa informationen enligt korrekt id?
Förstår mig inte på det häller.
Detta är den sista frågan

Min kod
Kod:
<?php

  $var 
$_GET['id'];

  if (
ctype_digit($var)) {
  
$query mysql_query("SELECT * FROM ads WHERE id = '$var'");
  } else {
  
mysql_error(); 
  }
?> 
  <tr>
    <td height="699" valign="top" class="ads"><h2><?php echo '. $row['id'] . $_POST["titel"]'?></h2>
    </td>
Citera
2008-12-10, 23:18
  #8
Medlem
Något sånt här:

Kod:
$var $_GET['id'];

if (
ctype_digit($var)) {
$query mysql_query("SELECT * FROM ads WHERE id = 'var'")
  } else { 
  
mysql_error();  
  } 

while (
$row mysql_fetch_array($query)) {

echo 
""$row['titel'] ."";
echo 
""$row['text'] ."";
echo 
""$row['mersakerduharidb'] ."";



Är lite småtrött och kan ha missat någonting, men du förstår kanske principen?
Citera
2008-12-11, 03:42
  #9
Medlem
Nattskenets avatar
Citat:
Ursprungligen postat av Hasztex
Tack så mycket! Det fungerar utmärkt på indexsidan.

Nu, hur gör man för att "view.php" ska visa informationen enligt korrekt id?
Förstår mig inte på det häller.
Detta är den sista frågan

Min kod
Kod:
<?php

  $var 
$_GET['id'];

  if (
ctype_digit($var)) {
  
$query mysql_query("SELECT * FROM ads WHERE id = '$var'");
  } else {
  
mysql_error(); 
  }
?> 
  <tr>
    <td height="699" valign="top" class="ads"><h2><?php echo '. $row['id'] . $_POST["titel"]'?></h2>
    </td>

Förlåt om jag verkar otrevlig men jag tror inte det kommer att vara sista frågan för dig, för du verkar tyvärr inte riktigt påläst inom PHP för att fixa det här. Jag ska förklara några saker för dig som står i ovanstående kod.

Kod:
if (ctype_digit($var)) 
betyder att om det enbart finns numeriska värden (siffror) i variabeln $var ska kommande kod inom { } exekveras.

Annars:
Kod:
} else { mysql_error(); } 

ska det enligt din kod bli ett MySQL-error.. ?? Hur tänkte du då? Ska du generera ett databasfel om det inte finns siffror i variablen? Anledningen att det ska kollas om det bara är siffror i variabeln är för att göra koden säkrare, mot exempelvis SQL-injections.

Vidare:

Kod:
$row['id'
Du har ingenstans deklarerat variablen $row

Kod:
$_POST["titel"
..och varifrån har fått $_POST-variablen som borde komma från ett formulär.
Citera
2008-12-11, 14:54
  #10
Medlem
CamoDrakes avatar
view.php;


Kod:
<?php

$annons_id 
$_GET['id'];

if (
ctype_digit($annons_id)){ //om $annons_id är ett nummer.
  
$query "SELECT * FROM ads WHERE id = '$annons_id'";
} else {
  die (
"Ett fel uppstod!");
}

//Eftersom varje annons har ett unikt id (hoppas jag) så behövs inte while-satsen.

$resultat mysql_fetch_assoc($query); //Hämtar datan från databasen och stoppar in den i $resultat

$eka "<html> \n";
$eka.= "<body> \n";
$eka.= "<div> \n";
$eka.= "<b> \n";
$eka.= $resultat['titel'];
$eka.= "</b> \n";
$eka.= "<br /> \n";
$eka.= $resultat['beskrivning'];
$eka.= "<br /> \n";
$eka.= "<a href='view.php?id=" $resultat['id'] . "'>Direktlänk</a> \n";
$eka.= "</div> \n";
$eka.= "</body> \n";
$eka.= "</html> \n";

echo 
$eka;

?>
/CamoDrake
Citera
2008-12-11, 16:37
  #11
Medlem
Hasztexs avatar
Citat:
Ursprungligen postat av CamoDrake
view.php;


Kod:
<?php

$annons_id 
$_GET['id'];

if (
ctype_digit($annons_id)){ //om $annons_id är ett nummer.
  
$query "SELECT * FROM ads WHERE id = '$annons_id'";
} else {
  die (
"Ett fel uppstod!");
}

//Eftersom varje annons har ett unikt id (hoppas jag) så behövs inte while-satsen.

$resultat mysql_fetch_assoc($query); //Hämtar datan från databasen och stoppar in den i $resultat

$eka "<html> \n";
$eka.= "<body> \n";
$eka.= "<div> \n";
$eka.= "<b> \n";
$eka.= $resultat['titel'];
$eka.= "</b> \n";
$eka.= "<br /> \n";
$eka.= $resultat['beskrivning'];
$eka.= "<br /> \n";
$eka.= "<a href='view.php?id=" $resultat['id'] . "'>Direktlänk</a> \n";
$eka.= "</div> \n";
$eka.= "</body> \n";
$eka.= "</html> \n";

echo 
$eka;

?>
/CamoDrake

Tack så mycket camodrake och alla andra.
Men jag får fortfarande inte till det. Och ja, jag är rätt ny på php.

När jag skriver in din kod får jag inte lika mycket felmeddelande som innan i alla fall.

Felmeddelande:
Citat:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/annons/view.php on line 38

Det som finns på line 38 är då
Kod:
$resultat mysql_fetch_assoc($query); 

Jag har kollat i resten av koden efter stavfel eller liknande, men hittar inget.

Hela koden är:
Kod:
<?php

$annonsid 
$_GET['id'];

if (
ctype_digit($annonsid)){ 
  
$query "SELECT * FROM ads WHERE id = '$annonsid'";
} else {
  die (
"Ett fel uppstod!");
}

$resultat mysql_fetch_assoc($query);
?>
  <tr>
    <td height="699" valign="top" class="ads"><? $eka.= $resultat['titel'];  ?>    
<? 
    
echo $eka
?>
  </td>

Jag har inte skrivit dit beskrivning etc ännu för att jag ville som om det fungerade först.

Tack på förhand
Hasztex
Citera
2008-12-11, 16:47
  #12
Medlem
Kuzmins avatar
Kod:
<?php

$annonsid 
$_GET['id'];

if (
ctype_digit($annonsid)){ 
  
$query "SELECT * FROM ads WHERE id = '$annonsid'";
  
$lolzor mysql_query($query);
} else {
  die (
"Ett fel uppstod!");
}

$resultat mysql_fetch_assoc($lolzor);
?>
  <tr>
    <td height="699" valign="top" class="ads">
      <? echo $resultat['titel']; ?>
    </td>
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback