Bag den kryptiske overskrift gemmer sig følgende: Jeg har en side med filminfo, der fra MySQL henter data ud fra tabel 1. Brugerne skal gerne kunne kommentere på filmen, så nederst på siden har jeg indsat en formular som ser således ud:
Indtastede data herfra skal så sendes til en tabel 2 i MySQL, men hvordan bærer jeg mig ad med det? Tabel 2's MySQL-struktur ser ud som følger:
CREATE TABLE `v2_kommentarer` ( `ID` INT NOT NULL AUTO_INCREMENT , `KatID` TINYINT NOT NULL , `ItemID` TINYINT NOT NULL , `Navn` TEXT, `Email` TEXT, `Kommentar` TEXT, `Tid` TIMESTAMP NOT NULL , PRIMARY KEY ( `ID` ) );
Samtidig skal "send"-koden til formularen gerne ligge i samme php-dokumentet (noget med "self", så vidt jeg har fået fortalt), så brugeren - efter endt indtastning - blot ender på samme opdaterede side som det hele startede på. How to do that?
Udover det skal jeg jo også hive data fra tabel 2 ud på samme side, som også får data fra tabel 1 (så brugernes kommentarer kan ses under den aktuelle filminfo). Er det ikke noget med "union", når man sådan skal hente data fra 2 tabeller? Nå, pyt med det... det kan vi altid tage senere.
Når du skal have brugeren til at se en opdateret side, efter at han har indtastet en kommentar, så kan du gøre følgende:
Øverst i dit dokument, har du al koden til at indsætte kommentaren i din database. Det kan du gøre med noget:
if(isset($_POST['submit'])) { mysql_query("INSERT INTO din_kommentar_tabel (navn,email,tekst) VALUES ('".$_POST[ 'navn'].','".$_POST['email'].','".$_POST['text']."'",db); //den her indsætter dine data i din MySQL database. i det første parentes står alle felterne i din database. I den næste står alle de data, som du vil have sat ind. }
Når brugeren så trykker på "SEND", bliver alle informationerne fra dine inputs sendt til den pågældende side. Og så kører den så koden som jeg skrev øverst, da der jo nu er trykket på knappen "submit".
For at få vist alle dine kommentare, kan du bruge en while.:
$query = mysql_query("SELECT * FROM din_kommentar_tabel WHERE dit_id='IDet'",$db); //henter alle kommentarerne ud fra din tabel. Du skal så selv sætte íd til det rigtige!
while($kommentar = mysql_fetch_assoc($query)) //udskriver alle resultaterne af ovenstående query { echo "$kommentar['navn']"; //"navn" skal så være det, som feltet i din MySQL database hedder. }
Når man så har trykket på "SEND", bliver ens indlæg også vist på siden, når man kommer tilbage til den! mega smart ;)
Var det ikke det hele? Skriv endelig hvis jeg ikke har forklaret mig ordentligt (:
Carlsbergnyder >> Hmm, jeg får ingen fejlmeddelelser, men til gengæld kommer jeg heller ikke tilbage til en opdateret side efter indtastning... og der kommer intet indhold i min MySQL tabel
anderseiler >> På siden har jeg allerede et udtræk fra MySQL, blot fra en anden tabel. Det ser således ud:
Du laver bare et andet udtræk. Der er ingen grund til at koble dem sammen. For mit at se, så gør det bare det hele lidt mere kompliceret (:
Du kan bare lave en:
$kommentar_query = mysql_query("SELECT * FROM v2_kommemtarer WHERE DetIDDuBruger='id'",$db);
Er det ikke det letteste? Så kan du efterfølgende få udskrevet alle de kommentarere som hører til den pågældende film med en while. Du skal bare ændre det WHERE jeg har lavet, så det passer med dig.
Og så udskriver den alle de felter fra databasen, som er hentet via kommentar_query, hvilket kun et dem som hører til den pågældende film, da ID'et naturligvis er sat (:
Okay, nu ser min kode således ud i dokumentets head:
<? mysql_connect("min host","minuser","mitpass"); mysql_select_db("mindb"); if(isset($_POST['submit'])) { mysql_query("INSERT INTO din_kommentar_tabel (navn,email,tekst) VALUES ('".$_POST[ 'navn'].','".$_POST['email'].','".$_POST['text']."'",db); //den her indsætter dine data i din MySQL database. i det første parentes står alle felterne i din database. I den næste står alle de data, som du vil have sat ind. } $query = mysql_query("SELECT * FROM v2_filminfo WHERE FilmID = '$FilmID'"); while($r = mysql_fetch_array($query)) { $DkTitel = $r["DkTitel"]; $DkTitel = $r["BookTitel"]; $OrgTitel = $r["OrgTitel"]; $Land = $r["Land"]; $Year = $r["Year"]; $Instruktion = $r["Instruktion"]; $Manuskript = $r["Manuskript"]; $Musik = $r["Musik"]; $Medvirkende = $r["Medvirkende"]; $Genre = $r["Genre"]; $Spilletid = $r["Spilletid"]; $Plot = $r["Plot"]; $Trivia = $r["Trivia"]; $HvorNu = $r["HvorNu"]; $Links = $r["Links"]; $Plakat = $r["Plakat"]; $Author = $r["Author"]; $Keywords = $r["Keywords"]; ?>
den fejl på line 406 er fordi der er en fejl i din query ($kommentar_query). Har du sat id rigtigt?
mht formen, så check at feltnavnene i formen stemmer overens med dem i mysql_query. Der er en uoverensstemmelse de to imellem, hvis den ikke indsætter data.
Okay, nu ser der ud til at være lidt mere styr på - ingen fejlmeddelelser når siden loades nu. MEN... når man prøver at skrive et indlæg, kommer der ingen data i tabllen og brugeren sendes til en anden side:
så skulle den gerne virke.. Det er tilsyneladende fordi din form bliver skrevet i ren HTML, og ikke php. Så derfor virker det andet ikke. Prøv at indsætte den <form> oven over (:
Min fejl, at jeg ikke skrev den sådan første gang. Jeg er tilbage på min skole nu, så kan desværre ikke være særlig meget på nettet. Men svarer når jeg er på. Bare så du ved jeg ikke har glemt dig, hvis jeg ikke lige svarer.
Derudover er der to øvrige problemer, som vi dog kan tage bagefter:
1) Det eksisterende indhold af v2_kommentar bliver ikke printet på siden, og... 2) Efter at have trykket på submit i formen, returneres man korrekt til samme side. Siden er dog blank, da det tilknyttede filmid ikke hives med. Er det helt sort snak jeg fyrer af nu? :o)
if(isset($_POST['submit'])) { echo "Der er trykket submit"; }
Hvis der så bliver skrevet "Der er trykket submit" i toppen af siden når du trykker submit, så ved vi i det mindste, at den forstår, at den skal gøre noget, når der er trykket submit (:
2: skriv lige hvad du bruger til at skrive de eksisterende indlæg i v2_kommentar
3: Det er ikke sort snak, det er faktisk meget logisk (: Prøv følgende i din <form> så:
På den måde har du stadig dit FilmID med, og du kan hente det ned fra adresselinen med en $_GET['FilmID'] (: Håber du kan bruge det til noget. Jeg ved ikke hvordan dit system er bygget op, så det er svært lige at komme med noget som vil passe ind i dit system (:
Yep, der kan indtastes data i formen, og efter at have trykket submit, sendes brugeren return til den KORREKTE side. Dette problem er altså løst.
MEN...
Der kommer stadig ingen data i tabellen ved indtastning. How come? Der kommer heller ingen "prints" af eksisterende kommentarer. Jeg har indtastet en kommentar direkte i php Myadmin til testformål, men der sker intet. Det skulle ellers skrives med:
Den henter ikke noget fra v2_kommentarer med ovenstående kode. Prøv at indsætte følende streng lige neden under din nuværende $query streng:
$kommentar_query = mysql_query("SELECT * FROM v2_kommemtarer WHERE DetIDDuBruger='id'");
Strengen $kommentar_query bruger du så til at hente alle nuværende indlæg i din v2_kommentar database. Husk at ændre ID'et så det passer ind i dit system!
Husk også, at i den while hvor du udskriver nuværende kommentarer, skal du hente den rigtige streng/query. I dette tilfælde er det altså $kommentar_query.
Næste: (:
Du burde kunne indsætte data med :
if(isset($_POST['submit'])) { mysql_query("INSERT INTO v2_kommentarer (Navn, Email, Kommentar) VALUES ('".$_POST[ 'Navn']."','".$_POST['Email']."','".$_POST['Kommentar']."'") or die(mysql_error()); }
Jeg har lavet en lille udvidelse ( or die(mysql_error()); ), således, at den nu skriver på skærmen, hvis der er en fejl under indskrivningen af data i din database (: Så kan vi nok se hvad fejlen er derefter hvis det ikke virker.
Hmmmm, der kommer stadig ingen data i v2_kommentarer tabellen. Der kan uden problemer indtastes kommentarer i formen, og der meldes ikke om nogen fejl når der trykkes på submit.
Hmm, er jeg ved at skulle erklære denne tråd for død, eller der nogen der har et godt bud... måske en helt alternativ løsning?
Synes godt om
Ny brugerNybegynder
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.