Gå til innhold

Legge inn variabler i MySQL?


Anbefalte innlegg

Driver å lager et enkelt CMS til et skoleproj, ville gjerne også ha muligheten til å laste opp bilder. Fant fort ut at det ikke var smart å prøve å legge selve bildene inn i mySQL DB'n (lol) men heller legge inn linken til det opplastede bildet.

 

Så..

 

Jeg har nå klart å laste opp/lagre bildet på serveren.

 

$image_name=time().'.'.$extension;
$newname="images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);

 

men, jeg vet ikke hvordan jeg så skal få lagt $newname/link til bildet inn i databasen slik at jeg senere kan

 

echo '<img src ="'.$newname.'">';

 

eller noe lignende. Hjelp? :]

Om dette er noe helt åpenbart beklager jeg, jeg er definitivt en rookie.

Lenke til kommentar
Videoannonse
Annonse

Hei

 

Du bruker funksjonen mysql_query() for å kjøre en spørring mot databasen. Opprett en tabell i databasen din med unikt ID-nummer og kolonne for path og evt. annen informasjon du måtte behøve, f.eks:

CREATE TABLE bilde (
bilde_id NUMBER(10) AUTO_INCREMENT PRIMARY KEY,
bilde_sti VARCHAR(80) NOT NULL,
bilde_beskrivelse VARCHAR(255));

 

Så kan du kjøre spørringer mot databasen for å legge data inn;

$query = "INSERT INTO bilde (bilde_sti, bilde_beskrivelse) VALUES ('".$newname."', '".$beskrivelse."')"; // Dette er en spørring
mysql_query($query); // Utfører spørringen

 

Du skal få noen flere tips for å gjøre dette litt raskere for deg, for å finne ut mer søker du på funksjonsnavnene.

 

Deretter _kan_ du bl.a bruke mysql_fetch_array() for å hente resultatet.

 

Eksempelvis:

$query = "SELECT bilde_sti as sti FROM bilde";
$resultSet = mysql_query($query); 

while($k = mysql_fetch_array($resultSet))
{
?>

  <img src="<?php echo $k["sti"] ?>"/>

<?php
}

 

While definerer en løkke som kjøres så lenge det som står i parameteren er true. mysql_fetch_array returnerer en array av hver rad i resultatsettet ($resultSet).

 

 

 

Happy programming!

Endret av Vial
Lenke til kommentar

Takk for svar.

 

Mesteparten av dette visste jeg fra før, mulig jeg var litt kryptisk :p

 

Jeg vet hvordan en mySQL spørring foregår, men har hatt litt problemer da min tablen min (som forøvrig inneholder ID(primary_key, not null, auto_increment etc), title(varchar(20)) og text(text)), da jeg prøvde å

 

ALTER TABLE x ADD bilde_sti varchar(80)

 

men når jeg benyttet meg av en spørring som du selv setter opp her

$query = "INSERT INTO bilde (bilde_sti, bilde_beskrivelse) VALUES ('".$newname."', '".$beskrivelse."')"; // Dette er en spørring
mysql_query($query); // Utfører spørringen

 

fikk jeg ikke noe resultat i PhpMyAdmin og synes dette var relativt snodig..

 

for å klarere litt da, så lurer jeg på om når du anbefaler og lage nye tables? Hva bør et table inneholde/ikke inneholde. Da mener jeg f.eks burde man i et CMS holde bilder og text i en artikkel avskilt?

 

 

Ellers tusen takk for en fin post, eksemplene her kommer er veldig nyttige for meg spesielt mtp mysql_fetch_array()

Lenke til kommentar

Bare hyggelig, ofte vanskelig å være på samme nivå kunnskapsmessig men jeg tenker som så at dess mer informasjon man deler dess bedre.

 

Fikk du problemer når du kjørte ALTER TABLE? Forsøk med ALTER TABLE x ADD COLUMN bilde_sti osv.

 

Du fikk ikke noe resultat på Insert? Sjekk mysql_rows_affected() (merk, her skal ikke resultatsettet med som parameter). Returnerer funksjonen en verdi > 0? Evt. kjør spørringen i PhpMyAdmin med dummy-data og se om du får en feilmelding, skjer til tider at det lurer seg inn et tegn på feil plass.

 

Man bør i aller høyeste grad skille tekst fra bilder. Et godt CMS har et bildegalleri tilgjengelig så du kan benytte samme bilde flere ganger. En tabell bør inneholde kun de feltene du trenger for å gjøre den jobben du skal gjøre akkurat nå, den kan som du nevner i posten din ekspanderes i etterkant om du ser at du trenger flere felter.

Anbefaler deg å bygge relasjoner så mye som mulig (altså koble sammen ID-numre, f.eks Artikkel-id og bilde-id). Det gir bedre mulighet for gjenbruk.

 

Vet ikke helt nivået ditt men hvis du bestemmer deg for å gå dypere i dette er denne wikipedia-artikkelen en fin start

Lenke til kommentar

Nivået mitt er definitivt ikke så høyt, men jeg kjenner til basics og leser/forstår stort sett all kode veldig fint. Problemet er å huske/bruke syntax korrekt. "Learning by doing".

 

Uansett, alter table fungerte fint ja, og jeg hadde nå drinks(id,title,text,bilde_sti), men det jeg prøvde på var:

 

 

form.php (input for title+text)

INSERT INTO drinks (title,drinktext) VALUES (".
"'".$HTTP_POST_VARS['title']."',
"."'".$HTTP_POST_VARS['text']."'".");

 

 

uploadimage.php (input+upload av bilde)

INSERT INTO drinks (bilde_sti) VALUES ('".$imagesrc."'); 

 

 

Deretter prøvde jeg å putte alt inn i samme tabell. form.php fungerte utmerket mens uploadimage.php ikke ga noe resultat i phpmyadmin.. Uansett velger jeg nå å lage to forskjellige tabeller som du anbefalte og satser på at det skal funke ;)

 

 

Det med normalisering av databaser vet jeg ikke mye om men takk for å peke litt i riktig rettning, skal definitivt leses på! Igjen tusen takk for hjelp. Jo mer utfyldende du skriver jo enklere er det for meg å forstå + utforske på egenhånd så takk takk for det :]

 

*edit*:

 

Jeg kom over dette på den engelske siden for normalisering:

There are circumstances in which certain facts cannot be recorded at all. For example, each record in a "Faculty and Their Courses" table might contain a Faculty ID, Faculty Name, Faculty Hire Date, and Course Code—thus we can record the details of any faculty member who teaches at least one course, but we cannot record the details of a newly-hired faculty member who has not yet been assigned to teach any courses. This phenomenon is known as an insertion anomaly.

 

Betyr dette at grunnen til at det ikke ble lagt inn noe på bilde_sti er at når jeg skal legge inn noe i tabellen (drinks) så må jeg definere _alle_ radene samtidig? dvs om uploadimage.php hadde vært i "form.php", og det istedet hadde blitt:

INSERT INTO drinks (title,drinktext,bilde_sti) VALUES (".
"'".$HTTP_POST_VARS['title']."',
"."'".$HTTP_POST_VARS['text']."'".","."'".$imagesrc."'".");

 

ville det funket? Isåfall har jeg jo virkelig misset noe viktig når jeg leste igjennom SQL >_>

Endret av TekniskFeil
Lenke til kommentar

Hei

 

Bare hyggelig å være til hjelp, verden trenger flere programmerere og det virker som du er både motivert og seriøs ifht. å lære dette.

 

Insertion anomalies er akkurat det du opplever her ved å bruke én tabell. Eksempelet du siterer er et glimrende eksempel på hva som skjer når man ikke ønsker å ha relasjoner i en database.

 

SQL er ikke annet enn et prosedyre-språk så den gjør akkurat det du forteller den. Svaret er forøvrig delvis ja. For å legge inn data i en kolonne må du først definere den. Hvis du imidlertid lager strukturen din slik som du har illustrert i INSERT-setningen i bunnen så vil du oppleve det som teksten du siterer forteller om.

 

Forøvrig bør du se litt på syntaksen din når du skriver queries i php, du har unødvendig mange punktum i tekststrengen, i tillegg mener jeg at det er $_POST og $_GET som er det "riktige" å bruke i PHP nå for tiden (er ikke helt 100% oppdatert så korrigér meg gjerne). En mer "korrekt" og iallfall enklere lesbar versjon av insert-setningen din i bunnen kan være:

 

INSERT INTO drinks (title,drinktext,bilde_sti) VALUES (
"'".$_POST["title"]."' ,".
"'".$_POST["text"] ."' ,".
"'".$imagesrc      ."'"); 

Lenke til kommentar

Ja, det virker mer logisk. Grunnen til min overuse av "." kommer fra http://www.intranetjournal.com/php-cms/(her) som jeg har forsøkt å følge. Den tutorialen er fra 2004(så jeg først nå) >_______>

 

Jeg må selv si at jeg stusset litt over bruken av "." over alt men gikk utifra at det var vanlig iom at jeg selv ikke har så intrikate kunnskaper om PHP.

 

 

offtopic:

Jo takk, jeg er veldig keen og seriøs på å lære så mye jeg kan. Sitter å ser på lectures av Richard Buckland (sjukt bra lærer fra UNSW i Australia) i et kurs om "higher computing", C osv, atm. Veldig lærerikt. Videoene er dog ekstremt lange så tar litt tid :D

 

Endret av TekniskFeil
Lenke til kommentar

Har kodet litt videre og dermed støtt på et problem ang normalisering og bruk av forskjellige DBr osv. Håper du kanskje kan hjelpe ;)

 

Har nå to tabeller

 

1. Drink

ID

drink_title

drink_text

 

2. Bilder

bilde_sti

bilde_beskrivelse

 

 

Hvordan kan jeg nå få de til å "jobbe sammen" for å kunne bruke de i samme viewArticle.php

      <?php
require_once('includes/DbConnector.php'); //

$connector = new DbConnector();
$result = $connector->query('SELECT title,drinktext FROM drinks WHERE ID = '.$_GET['id']);
$row = $connector->fetchArray($result);

?>
<?php echo $row['title'];?>
<br><br>
<?php echo $row['drinktext'];?>

<?php $query = "SELECT bilde_sti as sti FROM bilde";
$resultSet = mysql_query($query); 

while($k = mysql_fetch_array($resultSet))
{
?>

  <img src="<?php echo $k["sti"] ?>"/>
<?php
} 
?>

 

Som du/dere lett kan se er koden litt hulter til bulter og sikkert jævlig dårlig (dette har å gjøre med at jeg (som en nybegynner) ikke vet hva som er gamle standarder, nye standarder, bra kode/dårlig kode o.l. Det er noe jeg jobber med!! xD)

 

Om noen kan hjelpe meg litt å rydde opp i koden og/eller matche bilde + text hadde det vært supert.

 

Om jeg tenker riktig må jeg gjøre om et av tablene sånn at de inneholder en "bilde_id"(drinks) eller "drink_id"(bilder)

 

slik at det altså blir

 

Bilder

ID

drink_id

bilde_sti

bilde_beskrivelse

 

??

 

tenker også som så at den kanskje funker akkurat som den er atm om jeg bare legger til ID under bilder tabellen og bruker:

 

SELECT bilde_sti as sti, bilde_beskrivelse as beskrivelse FROM bilder WHERE ID = '.$_GET['id']

 

men dette forutsetter at jeg bare laster opp 1 bilde per drink og at drinkposten og bildet har samme ID.. Ser at det kan skape problemer lenger nede.

 

HjAElp? :-]

Lenke til kommentar

Hey

 

Nå begynner det å se bra ut, riktig terminologi og koden din ser ikke ille ut! Før i tiden kunne du skrive <?="tekst"?> for umiddelbart å få echo ut av teksten men dette er på vei ut fra PHP så bruk <?php ... ?> som du har gjort så langt.

 

Såvidt jeg kan forstå av det du skriver så er du nå på vei til å koble sammen to tabeller og det ser ut som du har forstått godt hva som må gjøres. Det er helt korrekt at du må bruke id-numre og matche disse for å skape relasjoner mellom tabellene.

 

Nå begynner arbeidet med arkitekturen til applikasjonen din, skal hver drink ha kun 1 bilde, skal du skille på ingressbilde eller hovedbilde, skal hvert bilde bare kunne brukes på 1 drink osv.

 

Slik du har lagt det opp nå har du muligheten til å assosiere flere bilder med en artikkel. Siden du også sikkert ønsker å bruke samme bilde på flere artikler foreslår jeg at du går for 3. normalform og oppretter en ny tabell;

 

CREATE TABLE drink_bilde
(
db_id INTEGER(10),
db_artikkel INTEGER(10),
db_bilde INTEGER(10)
)

 

Du kan da bruke denne tabellen til å linke opp en eller flere drinker mot en eller flere bilder ved å skrive:

 

$query = 
"SELECT bilde_sti as sti from bilde where id in ( select db_bilde from drink_bilde where db_artikkel = ".$id-til-artikkel . " ) ";

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å
×
×
  • Opprett ny...