Just nu i M3-nätverket
Gå till innehåll

Hämta bild till text


Micro90

Rekommendera Poster

Har en kod för att hämta texten:

$sql = "SELECT * FROM links";

$result = mysql_query($sql);

 

while ($rad = mysql_fetch_array($result)) {

echo " Titel: " .$rad['titel'] ."<br>";

echo wordwrap($rad['beskrivning'], 70, "<br />", 1) ."<br>";

echo " Kategori: " . $rad['kategori'] ."<br><br>";

}

?>

 

 

Men vill hämta en bild till denna text.

 

Kan hämta bilden här:

 

<?php

$sql = "SELECT * FROM bilder";

$result = mysql_query($sql);

 

while ($rad = mysql_fetch_array($result)) {

 

echo "<img src=\"bilder/{$rad['filnamn']}\">\n";

 

}

?>

 

 

Men vill ha dess på samma sida så att rätt text hamnar vid rätt bild.

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman
vill ha dess på samma sida så att rätt text hamnar vid rätt bild.
Då gör man en SQL-fråga som hämtar både texten och bilden. Frågan är dock hur du i tabellerna vet vilken bild som hör ihop med vilken text? Vilka fält är det som styr det?

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Ja.. detr är ju det..

 

Så här ser tabellen bilder ut:

# Struktur för tabell `bilder`

#

 

CREATE TABLE bilder (

id int(11) NOT NULL auto_increment,

filnamn varchar(100) NOT NULL default '',

datum datetime NOT NULL default '0000-00-00 00:00:00',

anvandare varchar(50) NOT NULL default '',

PRIMARY KEY (id)

) TYPE=MyISAM;

 

 

Ochså här ser tabellen links ut:

CREATE TABLE links (

id int(11) NOT NULL auto_increment,

titel varchar(255) default NULL,

beskrivning varchar(255) default NULL,

kategori varchar(50) default NULL,

anvandare varchar(50) default NULL,

PRIMARY KEY (id)

) TYPE=MyISAM;

 

 

JAg trodde att man på nåt sätt använder id, men fattar inte hur.

 

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman

Jag förstår inte riktigt vad bilderna har för funktion. Är det bilder på användarna där alltså en användare har en enda bild, eller är bilderna olika för varje länk?

 

Om det är en bild / användare så kan SQL-frågan bli så här:

SELECT b.filnamn, l.titel, l.beskrivning, l.kategori, l.anvandare  FROM bilder as b, links as l WHERE l.anvandare = b.anvandare

 

Om det istället är så att det är olika bilder för varje länk, och en anvandare kan ha flera länkar / bilder så är det i så fall fel på din databasdesign. Under dessa förutsättningar kan man inte urskilja vilken bild som hör ihop med vilken länk.

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

ska försöka förklara vad det rör sig om..

 

Det är egentligen en boklista det handlar om.

Titel, beskrivning, kategori handlar om en bok.

Till denna beskrivning av boken skall det fogas en bild av boken.

Och varje användare skall kunna lägga in flera bokbeskrivningar men det ska inte vara några bilder på användaren.

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman
Titel, beskrivning, kategori handlar om en bok.

Till denna beskrivning av boken skall det fogas en bild av boken.

Ok, då är det fel på din databasdesign.

 

Du måste nämligen på något sätt knyta ihop bok-beskrivningen med dess bild. Enligt nuvarande databasdesignen så gör du inte det.

 

Det kan man göra på olika sätt, men innan jag gör det så måste jag ha svar på ett par enkla frågor till, för att undvika att det blir ännu en felaktig design.

 

1. Kan en bok (i tabellen links) ha flera olika bilder, eller är det max en bild per bok?

 

2. Måste en bok ha en bild?

 

3. Kan det finns flera olika beskrivningar (gjorda av samma elle olika användare) för samma bok, eller är det max en beskrivning / bok?

 

 

_________

TicoRoman - Anfall är bästa försvar

 

[inlägget ändrat 2003-05-04 22:56:39 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

1. max en bild per bok

 

2. en bok måste inte ha en bild

 

3. en beskrivning per bok bara.

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman
1. max en bild per bok

 

2. en bok måste inte ha en bild

 

3. en beskrivning per bok bara.

Då kan du göra det så enkelt att du i tabellen bilder ändrar fältet anvandare till bokid och byter typ på den så att det blir INT.

 

Sedan så knyter du ihop tabellerna genom links.id -> bilder.bokid. Alltså om du i tabellen links har en bok med id 152 och den boken har en bild i tabellen bilder, så ska bokid också bli 152, alltså vet man nu vilken bild som hör ihop med vilken bok.

 

SQL-frågan blir då:

SELECT b.filnamn, l.titel, l.beskrivning, l.kategori, l.anvandare FROM bilder as b, links as l WHERE l.id = b.bokid

 

MEN, ovanstående kommer bara plocka fram böcker som har en bild. Böcker som inte har en bild kommer inte visas. För att plocka fram alla böcker måste man göra en LEFT JOIN, tror jag. Jag är lite mindre bra på det och har lite ont om tid jus nu för att kolla upp, men ska försöka återkomma med en fullt fungerande sql-fråga senare under natten eller imorgon.

 

 

_________

TicoRoman - Anfall är bästa försvar

 

[skrev fel]

[inlägget ändrat 2003-05-05 00:00:34 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

Tack för hjälpen så långt TicoRoman! Måste själv gå och sova nu, men ska kolla och försöka följa dina instruktioner imorgon.. Man kan kanske lösa problemet genom att ha en deafult-bild som visas om en bok saknar bild.

Återkommer imorgon.

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman

Såja, nu har jag kollat upp det. SQL-frågan ska se ut så här:

SELECT links.titel, links.beskrivning, links.kategori, links.anvandare, bilder.filnamn FROM links [color="#ff0000"]LEFT JOIN[/color] bilder [color="#ff0000"]ON[/color] links.id = bilder.bokid

 

Om en bok _inte_ har en bild så kommer "filnamn" bli NULL i resultatet. Det får du kontrollera i applikationen och lägga dit en default-bild (om du vill) om bild inte finns.

 

T ex:

...

echo "<img src=\"";
if ($resultatrad['filnamn'] == NULL) {
echo "defaultbild.gif\">";
} else {
echo $resultatrad['filnamn']."\">"; }

...

 

_________

TicoRoman - Anfall är bästa försvar

 

[inlägget ändrat 2003-05-05 00:48:42 av TicoRoman]

[inlägget ändrat 2003-05-05 00:53:32 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

Nu hängde ju jag inte med riktigt här..

Vad menas här:

"Sedan så knyter du ihop tabellerna genom links.id -> bilder.bokid."

 

Vad ska jag göra?

 

Länk till kommentar
Dela på andra webbplatser

Nu har jag gjort så att koden ser ut så här:

 

$sql = "SELECT links.titel, links.beskrivning, links.kategori, links.anvandare, bilder.filnamn FROM links LEFT JOIN bilder ON links.id = bilder.bokid";

$result = mysql_query($sql);

 

while ($rad = mysql_fetch_array($result)) {

echo "<img src=\"";

if ($resultatrad['filnamn'] == NULL) {

echo "defaultbild.jpg\">";

} else {

echo $resultatrad['filnamn']."\">"; }

echo " Titel: " .$rad['titel'] ."<br>";

echo wordwrap($rad['beskrivning'], 70, "<br />", 1) ."<br>";

echo " Kategori: " . $rad['kategori'] ."<br><br>";

}

?>

 

Och tabellen ser ut så här:

 

CREATE TABLE bilder (

id int(11) NOT NULL auto_increment,

filnamn varchar(100) default NULL,

datum datetime NOT NULL default '0000-00-00 00:00:00',

bokid int(11) NOT NULL default '0',

PRIMARY KEY (id)

) TYPE=MyISAM;

 

 

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman
Vad menas här:

"Sedan så knyter du ihop tabellerna genom links.id -> bilder.bokid."

 

Vad ska jag göra?

Nej, du ska inte "knyta" ihop något manuellt. Det görs i sql-frågan links.id = bilder.bokid.

 

Nu har jag gjort så att koden ser ut så här:
Fungerar det då?

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Nä funkar inte... informationen kommer fram, men bilden markeras som bruten... alltså med et stort X i...

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman
informationen kommer fram, men bilden markeras som bruten... alltså med et stort X i...
Men stämmer genvägen till bilden då? Befinner den sig i samma mapp som din php-fil?

 

Kolla på html-koden som skrivs ut för bilden, den kanske är felaktig.

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Nej just det...

nu ligger filen i en mapp där det finns en annan mapp som heter 'bilder'. Men hur skriver jag sökvägen dit?

har prövat olika...

 

Koden:

$sql = "SELECT links.titel, links.beskrivning, links.kategori, links.anvandare, bilder.filnamn FROM links LEFT JOIN bilder ON links.id = bilder.bokid";

$result = mysql_query($sql);

 

while ($rad = mysql_fetch_array($result)) {

echo "<img src=\"";

if ($resultatrad['filnamn'] == NULL) {

echo "defaultbild.jpg\">";

} else {

echo $resultatrad['filnamn']."\">"; }

echo " Titel: " .$rad['titel'] ."<br>";

echo wordwrap($rad['beskrivning'], 70, "<br />", 1) ."<br>";

echo " Kategori: " . $rad['kategori'] ."<br><br>";

}

?>

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman

echo "<img src=\"[color="#ff0000"]bilder/[/color]";
if ($resultatrad['filnamn'] == NULL) {
echo "defaultbild.jpg\">";
} else {
echo $resultatrad['filnamn']."\">"; }

Nu då?

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Näe..

men kom på att felet kanske finns här, i filen som laddar upp bilden. Bilden hamnar i databasen, men jag kan inte se att den finns i nån mapp sedan..

 

<? //laddaupp.php

if(isset($_POST['skicka']) && is_uploaded_file($_FILES['fil']['tmp_name'])) {

 

copy($_FILES['fil']['tmp_name'],"bilder/".$_FILES['fil']['name']);

echo "filen {$_FILES['fil']['name']} är uppladdad";

 

$sql = "INSERT INTO bilder(filnamn, datum, anvandare)

VALUES('{$_FILES['fil']['name']}', now(), '{$_SESSION['sess_user']}')";

 

mysql_query($sql);

 

}

?>

 

[inlägget ändrat 2003-05-06 19:55:04 av Micro90]

Länk till kommentar
Dela på andra webbplatser

TicoRoman

Testa med det här istället (för copy):

if (move_uploaded_file($_FILES['fil']['tmp_name'],"bilder/".$_FILES['fil']['name']))
{ 
echo "filen {$_FILES['fil']['name']} är uppladdad"; 

$sql = "INSERT INTO bilder(filnamn, datum, anvandare) 
VALUES('{$_FILES['fil']['name']}', now(), '{$_SESSION['sess_user']}')"; 

mysql_query($sql); 
}

 

 

_________

TicoRoman - Anfall är bästa försvar

 

[inlägget ändrat 2003-05-06 20:02:11 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

Men nu kom jag på en sak:

Jag har ju bytt ut 'anvandare' till 'bokid' i tabellen. Måste inte det fixas i laddaupp-koden också på nåt sätt?

 

tabellen:

#

# Struktur för tabell `bilder`

#

 

CREATE TABLE bilder (

id int(11) NOT NULL auto_increment,

filnamn varchar(100) default NULL,

datum datetime NOT NULL default '0000-00-00 00:00:00',

bokid int(11) NOT NULL default '0',

PRIMARY KEY (id)

) TYPE=MyISAM;

 

 

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman

Ja, just det. Självklart måste det fixas.

 

$sql = "INSERT INTO bilder(filnamn, datum, bokid) 
VALUES('{$_FILES['fil']['name']}', now(), '{[color="#ff0000"]$bokid[/color]}')"; 

Frågan är hur du håller reda på till vilken bok bilden ska laddas upp till, dvs variabeln $bokid.

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Nä... det undrar jag med...

 

Och nu funmkar inte detta heller.. det funkade förut:

 

$sql = "SELECT * FROM bilder";

$result = mysql_query($sql);

 

while ($rad = mysql_fetch_array($result)) {

 

echo "<img src=\"bilder/{$rad['filnamn']}\">\n";

 

}

?>

 

Länk till kommentar
Dela på andra webbplatser

Nu funkar detta igen:

 

$sql = "SELECT * FROM bilder";

$result = mysql_query($sql);

 

while ($rad = mysql_fetch_array($result)) {

 

echo "<img src=\"bilder/{$rad['filnamn']}\">\n";

 

}

?>

 

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman
Och nu funmkar inte detta heller.. det funkade förut:
Nu är jag förvirrad. Om uppladdningsscriptet inte laddar upp bilden till rätt ställe (som du skrev tidigare) så kan ju bilden inte visas heller.

 

Har du ändrat uppladningskoden enligt det sätt jag skrev? Hamnar bilden i en mapp då?

 

Nä... det undrar jag med...
Med det antar jag att du syftar på hur du får dit rätt bokid? Men hur ska uppladningen fungera? Du måste ju välja någonstans för vilken bok du laddar upp bilden för. Detta genom att tex i en rullista visa alla böcker som finns (men som saknar bild), välja bok, välja bild, och ladda upp.

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

TicoRoman
Nu funkar detta igen:
Ok perfekt. :)

 

Vad har vi kvar som inte fungerar?

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...