Gå til innhold

php/database -- legger IKKE inn dataene fra form


Anbefalte innlegg

Har fikset det nå. Feilen var litt sammensatt. Men om noen skulle få tilsvarende problemer senere, anbefaler jeg like godt å gå gjennom http://www.awtrey.com/tutorials/dbeweb/ og se der. Der forklares ting greit.

 

--

[Oppdatert: har endret litt på siden, den er nå ikke lenger realisert som jeg skrev under her med kun én php-fil, men spørsmålet om hvorfor jeg ikke får lagt inn data gjelder forstsatt. Koden er fra den gamle siden, men de form-relaterte delene er fortsatt som de var.]

 

Tester ut php/sql, har fått hjelp av en kamerat til å komme i gang. Har erfaring fra flere andre språk, så starten har vært relativt uproblematisk.

 

Men har problemer med et kommentar-skjema som skal kunne fylles ut.

 

http://www.stud.ntnu.no/~martis/php/kommentarer.php

 

Måten jeg gjør det på funket greit på en annen test ( http://www.stud.ntnu.no/~martis/test/index.php ) jeg gjorde, men nå legges ikke ting inn i databasen lenger, av ukjent årsak. Lesing fra den funker imidlertid som det skal.

 

Jeg har realisert hele nettsiden som én fil index.php som tar inn en variabel i url'en og etter hvert kjører ned i en if-setning som tar seg av hver av del-sidene separat.

 

Det er altså undersiden "kommentarer" som byr på problemer -- når man har skrevet inn noe i form'en og sendt den, legges som sagt ikke dataene til i databasen.

 

 

Dessuten er det et problem at etter at man har trykket på knappen for å sende en kommentar, så returneres man til default-siden, og ikke kommentar-siden (hvor jeg hadde regnet med at databasen over innlegg ville lastes), dette til tross for at side-valg-variabelen $p settes til den som gjelder for kommentar-siden.

 

Har lagt inn kommentarer med @@@ for lesbarhet på forumet. Disse linjene er ikke i fila mi.

 

Koden jeg ser etter feil i er altså funksjonen function write_form() i toppen av fila, samt koden i første elseif-setning nedi der.

 

<?php
include(<SENSURERT>);

function connect_func(){
 if (!($connection = mysql_connect($hostName, $userName, $password)))
 	showerror();
 if (!mysql_select_db("martis_hp", $connection))
 	showerror();
}
@@@funksjon_start
function write_form(){
 echo '
   <tr>
   	<td>Navn:</td>
   	<td><form name="form" action="index.php" method="post"><input type="text" name="input_navn"></td>
   </tr>
   <tr>
   	<td>Kommentar:</td>
   	<td><textarea rows="5" cols="40" name="input_kommentar"></textarea></td>
   </tr>
   <tr>
   	<td></td>
   	<td><input type="submit" name="submit" value="Legg inn kommentar"></form></td>
   </tr>
 ';
}
@@@funksjon_slutt
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>martin(2)</title>
<style type="text/css">

body {
 background-color: #ffffff;
 font-family: "Arial";
 font-size: 8pt;
}

.intro{
 color: #000000;
 font-weight: bold;
}

.kommentarer, .nyheter{
 color: #888888;
}

#meny{
 color: #888888;

}

a:link {
 color: #77A1CA;
}
a:visited {
 color: #77A1CA;
}
a:hover {
 color: #77A1CA;
}
a:active {
 color: #77A1CA;
}

</style>
</head>
<body>

<div align="center">
<table width="600" border="0" cellspacing="0" cellpadding="0">
 <tr>
 	<td width="36"><div align="right"><img src="images/fr_ul.gif" width="36" height="36"></div></td>
 	<td><img src="images/fr_uc.gif" width="100%" height="36"></td>
 	<td width="36"><img src="images/fr_ur.gif" width="36" height="36"></td>
 </tr>
 <tr>
 	<td width="36"><img src="images/fr_ml.gif" width="36" height="100%"></td>
<!-- Midtre tabellcelle start (hovedinnhold) -->
 	<td>
   <div id="meny" align="right"> <a href="index.php?p=hjem">hjem</a> | <a href="index.php?p=linker">linker</a> | <a href="index.php?p=kommentarer">kommentarer</a> | <a href="index.php?p=admin">admin</a> </div>
   <table width="600" border="0" cellspacing="5" cellpadding="0">
   	<tr>
     <td width="72"><img src="images/mbs01.jpg" width="96" height="101"></td>
     <td class="intro">
     	Martin bs<br>
     	Teknisk kybernetikk, 3. år<br>
     	<a href="mailto:martis..stud.ntnu.no">Elektronisk post</a><br>
     	Tlf 41 61 07 25
     </td>
   	</tr>
   </table>

   <?php

   	if (!($connection = mysql_connect($hostName, $userName, $password)))
     showerror();
   	if (!mysql_select_db("martis_hp", $connection))
     showerror();

   	$query  = "SELECT dato,nyhet FROM forside_nyheter ORDER BY id DESC";
   	$result  = MySQL_query($query);

   ?>

   <table width="600" border="0" cellspacing="5" cellpadding="0">

   <?php
   	if( $p=="hjem" || $p==NULL ){
     //$rows = MYSQL_fetch_array($result);
     while ($rows=MYSQL_fetch_array($result)){
     	$dato=$rows['dato'];
     	$nyhet=$rows['nyhet'];
     	echo '<tr><td colspan="2"><img src="images/line_hz1.gif" width="100%" height="1"></td></tr>';
     	echo '<tr class="nyheter"><td colspan="2">'.$dato.'</td></tr>';
     	echo '<tr class="nyheter"><td> </td><td>'.$nyhet.'</td></tr>';
     }
   	}
@@@elseif_start
   	elseif($p=="kommentarer"){

     echo '<tr><td colspan="2"><br></td></tr>';
     write_form();
     $p=kommentarer;
     echo '<tr><td colspan="2"><br></td></tr>';

     if($submit){
     	if(is_null($input_navn) || is_null($input_kommentar)){
       echo '<tr><td colspan="2"><font color="red">Fyll inn både navn og kommentar!</font></td></tr>';
     	}
     	else{
       $query	= "INSERT INTO kommentarer (navn,kommentar) VALUES ('$input_navn','$input_kommentar')";
       $result	= MySQL_query($query);
     	}
     }

     $query  	= "SELECT navn,kommentar FROM kommentarer ORDER BY id DESC";
     $result  = MySQL_query($query);
     while ($rows = MYSQL_fetch_array($result)){
     	$navn=$rows['navn'];
     	$kommentar=$rows['kommentar'];
     	//$dato=$rows['dato'];
     	echo '<tr><td colspan="2"><img src="images/line_hz1.gif" width="100%" height="1"></td></tr>';
     	echo '<tr class="kommentarer"><td colspan="2">'.$dato.' '.$navn.'</td></tr>';
     	echo '<tr class="kommentarer"><td> </td><td>'.$kommentar.'</td></tr>';
     }



   	}
@@@elseif_slutt

   ?>
   </table>
   <p>

 	</td>
<!-- Midtre tabellcelle slutt (hovedinnhold) -->

 <?php
 	mysql_close();
 ?>

 <!--sideavslutning-->
 	<td width="36"><img src="images/fr_mr.gif" width="36" height="100%"></td>
 </tr>
 <tr>
 	<td width="36" height="36"><img src="images/fr_ll.gif" width="36" height="36"></td>
 	<td height="36"><img src="images/fr_lc.gif" width="100%" height="36"></td>
 	<td width="36" height="36"><img src="images/fr_lr.gif" width="36" height="36"></td>
 </tr>
</table>
</div>
</body>
</html>

 

Jeg er klar over at dette sikkert ikke er den beste måten å implementere dette på, synes det blir litt rotete og dårlig strukturert med all kode i én fil, men dette er tross alt mitt første forsøk.:)

 

Hadde vært fint om noen kunne hjelpe.

Endret av mbst
Lenke til kommentar
Videoannonse
Annonse

Jeg kan ikke se at du har noen $_POST til variablene dine fra skjemaet. Slik som dette:

 

$input_navn=$_POST['input_navn'];

$input_kommentar=$_POST['input_kommentar'];

$submit=$_POST['submit'];

 

Hvis global_variables er satt til off i php.ini fila er dette grunnen til at du ikke får fanget opp inputene fra skjemaet ditt.

Lenke til kommentar

Ser du har siden hos ntnu.. husk at det er ekstremt lett for andre studenter å finne passordet til databasen din... Så du bør tenke over hva du har der, pluss bruke et passord du ikke bruker andre steder... Noe som løser noe av problemet kan være å opprette en bruker som kun kan skrive og lese fra databasen, da kan folk i alle fall ikke slette noe...

Du bør heller ikke ha passordet i en *.inc fil.. ;)

Endret av EirikO
Lenke til kommentar
Ser du har siden hos ntnu.. husk at det er ekstremt lett for andre studenter å finne passordet til databasen din... Så du bør tenke over hva du har der, pluss bruke et passord du ikke bruker andre steder... Noe som løser noe av problemet kan være å opprette en bruker som kun kan skrive og lese fra databasen, da kan folk i alle fall ikke slette noe...

Du bør heller ikke ha passordet i en *.inc fil.. ;)

Jepp, har lurt på det med sikkerhet.. er ikke sikker på hvordan man best løser det..

 

Jeg har ihvertfall passet på at brukeren som driver på på www ikke kan slette databaser etc, samt at han har et eget, "uviktig" passord. Men har nok for dårlig kjennskap til databaser, php etc til å vite om noen super løsning. :)

 

Kanskje noen har et par gode tips?

Lenke til kommentar
Jeg kan ikke se at du har noen $_POST til variablene dine fra skjemaet. Slik som dette:

 

$input_navn=$_POST['input_navn'];

$input_kommentar=$_POST['input_kommentar'];

$submit=$_POST['submit'];

 

Hvis global_variables er satt til off i php.ini fila er dette grunnen til at du ikke får fanget opp inputene fra skjemaet ditt.

Har sett på det nå, og ja, det er klart, hvis php er som andre språk jeg kjenner, så skulle jeg tro at man enten måtte returnere variablene fra funksjonen write_form(), eller sette variablene globale.

 

Men som sagt så funker denne koden på en annen test-side.

 

Prøvde allikevel $_POST[]-kommandoene du tipset meg om, var litt usikker på hvor de skulle stå, prøvde meg litt frem, fikk hvertfall ingen feilmeldinger. Men det ser heller ikke ut til å ha hjulpet.

 

 

Men det er altså som sagt et eller annet rart som skjer når man trykker submit-knappen, for av en eller annen grunn så hopper man da tilbake til default-siden, i stedet for å fortsette på koden som hører til kommentar-siden.

 

Vel, jeg får vel kanskje bite i det sure eplet og stykke opp siden i flere separate filer, tror dette skal hjelpe meg, men det blir dog litt dumt siden jeg har en del av innholdet felles på alle sidene. Da virker det jo greiere å stykke opp "renderingen" i flere grener der det trengs.

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...