Gå til innhold

Insert into MySQL & ta med id i URL


Anbefalte innlegg

Ber om litt hjelp

 

Tabell1: Actor (primærnøkkel=id)

Tabell2: Reviews (primær=revid, review, id (linker til actor.id)

 

All informasjon om en "Actor" vises i url f.eks view.php?id=26. På denne siden vil jeg ha et skjema som folk kan fylle inn og sende inn "review".

 

Er det på noen måte mulig å lagre noe (insert into?) i reviews-tabellen og sette feltet id til å matche id'en i url så tabellen med reviews vil se slik ut:

 

revid_____review_______id

1__________he is good_____26

2__________blabla________26

 

Jeg har prøvd litt av hvert, og jeg får lagt inn review i databasen, men id-feltet blir alltid 0 så da blir de jo ikke plassert på websiden. Noen forlag til hvordan jeg kan løse dette mottas med takk!

Endret av Ma
Lenke til kommentar
Videoannonse
Annonse

Jeg har nå klart å adde til databasen for den personen det gjelder. Problemet er at det ikke blir lagt inn noe tekst i "review"-kolonnen. Jeg klarer bare ikke å se hva som er feil....

 

Her er koden jeg bruker for å adde til databasen, addreview.php:

<?php 
includes........

$id = $_GET['id'];
$review = $_GET['review'];

$result = mysql_query("SELECT * FROM performer WHERE id=$id"); 
$myrow = mysql_fetch_array($result); 
echo "Add review of ".$myrow["firstname"]." ".$myrow["lastname"]; 

$sql = "INSERT INTO reviews (review, id) VALUES ('$review','$id')";
$result = mysql_query($sql); 

echo "<form action=viewdb.php method='post'>\n";

echo "<input type='hidden' name='id' value='$id'>\n";

echo "Reviews <input type='text' name='review'>\n";

echo "<input type='submit' name='submit' value='Submit'>\n";

echo "</form>\n";
?> 

Lenke til kommentar

Hint:

Hva er forskjellen på $_GETog $_POST ?

 

Og dessuten så bør du også sjekke at spørringen mot mysql går greit. F.eks her:

$sql = "INSERT INTO reviews (review, id) VALUES ('$review','$id')";
$result = mysql_query($sql) or die(Feil i spørring: $sql <br>".mysql_error());

Dette bør gjøres i alle spørringer.

Lenke til kommentar

Ok, takk, skal føre på koden for å sjekke feil i spørringene.

 

Jeg har prøvd $review = $_POST['review']; siden infoen skal komme fra en form, men med samme resultat: det blir lagt til noe i databasen, men 'review'-feltet er blankt.

 

$id = $_POST['id']; gikk ikke. da fikk jeg bare feilmelding.

 

Så hintet ditt hjelper meg ikke... Har du flere hint? ;)

Lenke til kommentar

Takker for hjelpen!

Jeg tror kanskje jeg hadde feil side i "form action" siden jeg hadde viewdb.php der. Prøvde å gjøre om litt så formen lå direkte på siden og insert koden lå på en annen side, og da funker det fint.

 

 

Et problem nå er at jeg gjerne skulle ha gått automatisk tilbake til siden der man la inn review'en og at det kanskje stod "review added" over formen eller lignende. Sånn jeg har det nå står det på den nye siden bare "Review added" og link tilbake til hovedlisten, noe som er veldig tungvint. Hvordan kan jeg gjøre dette?

 

............
echo "Review added";

?> 
<p><br><a href=viewdb.php>Return to database</a>
</HTML>

Lenke til kommentar

Sånn f.eks:

i-insert-kode filen:

<?
//Ikke skriv ut noenting til skjerm i denne filen
// Ha dette på toppen:
session_start();
.....
// Dersom adding av review gikk greit setter du denne:
$_SESSION["Form_message"] = "Review Added";
// Dersom du vil ha en feil melding, så kan du sette det slik (Eller skriv hva du vil):
$_SESSION["Form_message"] = "Det skjedde en feil";
// Sett dette nederst i sciptet:
header("Location:http://www.url.to/viewdb.php");
?>

Og i scriptet som du legger inn reviewn (Viewdb ?):

<?
// Dette må stå øverst i scriptet
session_start()
if (isset($_SESSION["form_message"])) {
  echo $_SESSION["form_message"];
}
// OGså skriver du ut resten av formen.
?>
...

Hvis det var slik du mente, da...

Endret av kakkle
Lenke til kommentar

Jeg prøvde å gjøre som du foreslo, men jeg får feil... Hjelp i startgropa er jeg veldig takknemlig for!

 

// Ha dette på toppen:

session_start();

.....

Har det noen betydning om det står før eller etter include (connection)? Jeg har også en del kode før formen kommer, skal det likevel stå øverst?

 

Jeg får feilmelding ang denne linjen:

if (isset($_SESSION["form_message"])) {
Parse error: syntax error, unexpected T_IF in c:\wamp\www\lmside\view.php on line 8

Lenke til kommentar

takk, ; rettet feilen. :)

 

Men hva skal skje med denne koden, for det skjer ingenting... Hva skal jeg sette i if-koden?

// Dersom adding av review gikk greit setter du denne:
$_SESSION["Form_message"] = "Review Added";
// Dersom du vil ha en feil melding, så kan du sette det slik (Eller skriv hva du vil):
$_SESSION["Form_message"] = "Det skjedde en feil";
// Sett dette nederst i sciptet:
header("Location:viewdb.php");
?>

 

Hva er "form_message" - må jeg spesifisere et annet sted hvor den meldingen skal bli plassert?

Jeg vil helst, hvis det er mulig, gå automatisk tilbake til den siden der review'en ble sendt fra, ex. view.php?id=23 og gi beskjed der: "review added". Er det mulig, eller må både formen og insert-kode stå på samme side da?

Endret av Ma
Lenke til kommentar

Det første probemet var løst ja, men det er mer jeg lurer på (tar det i denne samme tråden)

 

 

Hva skal skje med denne koden, for det skjer ingenting... Hva skal jeg sette i if-koden?

 

// Dersom adding av review gikk greit setter du denne:
$_SESSION["Form_message"] = "Review Added";
// Dersom du vil ha en feil melding, så kan du sette det slik (Eller skriv hva du vil):
$_SESSION["Form_message"] = "Det skjedde en feil";
// Sett dette nederst i sciptet:
header("Location:viewdb.php");
?>

 

 

Hva er "form_message" - må jeg spesifisere et annet sted hvor den meldingen skal bli plassert?

Jeg vil helst, hvis det er mulig, gå automatisk tilbake til den siden der review'en ble sendt fra, ex. view.php?id=23 og gi beskjed der: "review added". Er det mulig, eller må både form og insert-kode stå på samme side da?

Lenke til kommentar

"form_message" er sesjons vaiabelen. Du kan kalle den hva du vil. For å få tak i verdien som du setter på sesjonen (I dette tilfellet "Review Added", dersom det gikk greit), så skriver du ut $_SESSION["form_message"].

 

F.Eks:

newreview.php

<?
session_start();
if(isset($_SESSION["form_message"])) {
   echo "<p>".$_SESSION["form_message"]."</p>";
}
?>
<form method="post" action="addreview.php">
Review:<input type="text" name="review"><br>
<input type="submit" value="add review">
</form>

addreview.php:

<?
session_start();
$review = $_POST["review"];
mysql_connect($host, $user, $pwd); // Legg inn dine variabler her
mysql_select_db($db); // Din database
$sql = "INSERT INTO..."; // Her legger du inn din spørring som skal kjøres i mysql.
$res = mysql_query($sql);
if($res) {
   $_SESSION["form_message"]="Review Added"; // Her setter du beskjeden som skal komme, dersom alt gikk greit
}
else {
   $_SESSION["form_message"]="Det skjedde en feil:<br>$sql<br>".mysql_error(); // Her settes feilmelding
}
header("location:http://www.domene.com/newreview.php");
?>

Dette er et veldig genrelt eksempel. Du må selv tilpasse det din kode, men dette skal vise hvordan du sjekker at det er lagt til, og setter en melding av resultatet som skrives ut på form siden.

 

Denne koden er slett ikke testet. Men håper du skjønner gangen i det.

 

EDIT: IKKE ta copy paste av koden. Det er sikkert en del småfeil. Les igjennom koden og prøv å forstå hva som skjer.

 

/Kakkle

Endret av kakkle
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...