webForumDet fria alternativet

Sista detaljen, sen är det eländiga projektet klart!

PHP

12 svar · 614 visningar · startad av PollyJuice

Medlem sedan mars 2006124 inlägg
Frågan#1

Jag tjurar på med mitt projekt...
Från början hade jag en xml-fil som jag hämtade data ur. Sen ändrade jag mig och fixade en databas istället. Har lyckats fixa alla ändringar som behövdes, med hjälp av snälla människor här på forumet och med hjälp av en himla massa tutorials. Nu återstår EN säger EN liten detalj:

I index.html använde jag mig av ett script som tog reda på vilket projekt användaren hade valt, för att sen lägga namnet på detta projekt i variabeln info. Denna variabel användes sedan av andra script för att kunna plocka ut det projekt (i en xml-fil) vars namn var det som låg i info-variabeln. Sen kunde man hitta på lite av varje.

Nu ska jag istället för en xml-fil använda mig av en databas, och jag är lite fundersam till hur jag ska kunna föra över info-variabeln till php-filen. Jag har försökt att lägga info-variabeln i php-länken som syns i koden nedan, men det funkar inte. Hur kan jag rätta till det?

[U]Själva scriptet:[/U]

var info;
var xmlhttp;

function getSelected (selectTag)
  	{
            var selIndex = "";

            for (var i = 0; i < selectTag.options.length; i++) 
			{
                var optionTag = selectTag.options[i];
                if (optionTag.selected) 
				{
                    selIndex += optionTag.text;   
          		}

			info = selIndex;
			
			}

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("rightcontainer").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","hamtaInfo.php?info");
xmlhttp.send();
}

[U]och i bodyn:[/U]

		<div class="rubrik" id="valjprojekt">
			<form name="form1" method="get" action="">
    	   	<label for="vp">V&auml;lj projekt:<br>
    	   	</label>
    	   	<select onChange="getSelected(this)">
    	   	  <option>*** V&auml;lj projekt ***</option>
    	   	  <option>knatte</option>
    	   	  <option>fnatte</option>
    	   	  <option>tjatte</option>
    	   	 </select>
    	 	<p></p>
			</form>
		</div>

och såhär ser php-filen ut:

<?php

$namnet = $_POST['info'];

$con = mysql_connect("host","användarnamn","lösenord");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("databasnamn", $con);

$result = mysql_query("SELECT * FROM projekt WHERE namn = '" . $namnet . "'");

echo "<table><tr><td colspan='2' class='rubrik'>Alla projekt</td></tr>";

while($row = mysql_fetch_array($result))
  {
	  $sammanlagt = $row['antaltimmar'] * $row['timkostnad'];
  echo "<tr><td>Projektnamn: </td><td>" . $row['namn'] . "</td></tr>";
  echo "<tr><td>Beskrivning: </td><td>" . $row['beskrivning'] . "</td></tr>";
  echo "<tr><td>Antal timmar: </td><td>" . $row['antaltimmar'] . "</td></tr>";
  echo "<tr><td>Timkostnad: </td><td>" . $row['timkostnad'] . "</td></tr>";
  echo "<tr><td>Total kostnad för detta projekt: </td><td>" . $sammanlagt . "</td></tr>";
  echo "<tr><td>Startdatum: </td><td>" . $row['startdatum'] . "</td></tr>";
  echo "<tr><td>Slutdatum: </td><td>" . $row['slutdatum'] . "</td></tr>";
  
  }
echo "</table>";

mysql_close($con);
?>
Medlem sedan jan. 2003296 inlägg
#2

Du missar bara att skicka med ditt värde i anropet:

xmlhttp.open("GET", "hamtaInfo.php?info=" + encodeURIComponent(info));
Medlem sedan mars 2006124 inlägg
#3

Det enda php skriver ut är rubriken i tabellen; "Alla projekt"...

Medlem sedan jan. 2003296 inlägg
#4

Aha, du använder $_POST['info']; i PHP-koden såg jag nu. Du får ändra till $_GET['info']; om värdet ska hämtas från querystringen istället.

Medlem sedan mars 2006124 inlägg
#5

OK, nu funkar hämtningen av info, MEN istället så har två knappar lagt av eftersom jag lyckades trolla bort den gamla koden jag använde för att skapa forms så att användaren kan mata in nya siffror att uppdatera databasen med. Har skapat nya forms, en för tid och en för kostnad, men då var det där med variabler till php igen... Datat förs inte över till databasen.

function redigeraTimmar()
{
malElement = "<h2 class='rubrik'>Skapa nytt projekt:</h2>";
malElement += "<form name='form3' method='post' action='skapaNytt.php'><table class='brodtext'>";
malElement += "<tr><td>Projektets namn</td><td><input id='namn' name='namn' type='text' value='" + info  + "' size='30'/></td></tr>";
malElement += "<tr><td>Ange timmar:</td><td><input id='timmar' name='timmar' type='text' value='' size='30'/></td></tr>";
malElement += "<tr><td></td><td><input type='button' onclick='sparaTimmar()' value='L&auml;gg till timmar' /><br /><input type='button' onclick='allaTimmar()' value='Alla timmar' /></td></tr></table></form>";
document.getElementById('rightcontainer').innerHTML=malElement;	
}

function sparaTimmar()
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
document.getElementById("rightcontainer").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","soaraTimmar.php?info=" + encodeURIComponent(info));
xmlhttp.send();
}

och

<?php
$namnet= $_GET['namn'];
$timmarna= $_GET['timmar'];

$con = mysql_connect("","","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("", $con);

mysql_query("UPDATE projekt SET antaltimmar = " . $timmarna . " WHERE namn = '" . $namnet . "'");  

mysql_close($con);

?>
Medlem sedan jan. 2003296 inlägg
#6

När du ska spara värden så är det egentligen mer rätt att använda POST istället för GET, men det kanske inte spelar så stor roll just nu.

Hur som helst måste du se till att skicka med rätt parametrar till sidan som ska spara informationen.

xmlhttp.open("GET","soaraTimmar.php?info=" + encodeURIComponent(info));

är inte rätt i detta fall. Du måste skicka med två parametrar denna gång: "namn" och "timmar". Du måste hämta dessa värden från ditt formulär i sparaTimmar()-funktionen i javascriptet och sedan skicka med dem på motsvarande sätt som "info" tidigare.

var namn = "test", timmar = "10"; // hämta dessa värden från formuläret
xmlhttp.open("GET","soaraTimmar.php?namn=" + encodeURIComponent(namn) + "&timmar=" + encodeURIComponent(timmar));

(Och är soaraTimmar.php kanske ska vara sparaTimmar.php?)

Medlem sedan mars 2006124 inlägg
#7

var namn = document.getElementById('namn').value;
var timmar = document.getElementById('timmar').value;
xmlhttp.open("GET","sparaTimmar.php?namn=" + encodeURIComponent(namn) + "&timmar=" + encodeURIComponent(timmar));
xmlhttp.send();

Den VILL bara inte fatta! namn blir knatte eller fnatte eller tjatte beroende på vilket projekt jag väljer, och timmar får det värde jag matar in, det kollade jag med en alert. Så varför förs inte dessa värden över till php:n?

Medlem sedan jan. 2003296 inlägg
#8

Jag ser inget uppenbart fel i ditt sista kodexempel. Vad gör sparaTimmar.php efter att UPDATE-frågan körts? I ditt javascript säger du att PHP-sidans svar ska skrivas ut i "rightcontainer", men gör sparaTimmar.php något annat än att bara spara värdena?
Har du kollat i databasen så att inget uppdatarats ändå?

Medlem sedan mars 2006124 inlägg
#9

Jag har egentligen tänkt att sparatimmar.php bara ska visa en länk tillbaka till index, men det är "smink". Det viktigaste är att jag kollar i databasen efter varje gång jag kör scriptet, och ingenting har uppdaterats. Trots att jag har stavat rätt till "spara" den här gången. :)

Medlem sedan mars 2006124 inlägg
#10

Ligger månne svaret på gåtan i php-koden?

<?php
$namnet= $_GET['namn'];
$timmarna= $_GET['timmar'];

$con = mysql_connect("","","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("", $con);

mysql_query("UPDATE projekt SET antaltimmar = " . $timmarna . " WHERE namn = '" . $namnet . "'");  
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<title>ProJect Tidsrapportering</title>
<link href='project.css' rel='stylesheet' type='text/css' />
</head>

<body>
	<div id='topp'>
	  <p><center>
	    <p>&nbsp;</p>
	    <p><img src='images/titel.png' alt='logo' width='569' height='56' /></p>
</center></p>
	</div>

<div id='left'></div>

<div id='mitten' class='brodtext'>";

echo "Databasen har uppdaterats. <a href='index.html'>Klicka här</a> för att gå tillbaka till projektsidan";

echo "</div> <!--slut på #mitten-->
<div id='right'></div>
<div id='bottom'></div>
</body>
</html>
";

mysql_close($con);

?>
Medlem sedan jan. 2003296 inlägg
#11

Jag ser inget fel där heller egentligen. Vad händer om du kör sidan direkt i webbläsaren? Typ: http://...adress.../sparaTimmar.php?timmar=10&namn=knatte
(eller lämpliga "riktiga" parametrar).

Skrivs sidan ut som den ska? Uppdateras något i databasen?

Medlem sedan mars 2006124 inlägg
#12

Va f..? Då funkar det! Mysko...

Jag lämnade in uppgiften i detta skick nu, för deadlinen var för 5 minuter sen. Jag hoppas att jag åtminstone kan få FX på den, så att jag kan rätta till den i efterskott och få godkänt på kursen när den väl "uppför" sig.

Tack snälla, för din hjälp och ditt tålamod, du är verkligen jättebussig! :birp

Medlem sedan jan. 2003296 inlägg
#13

Inga problem. Får hoppas att det löser sig :)

270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)