Du missar bara att skicka med ditt värde i anropet:
xmlhttp.open("GET", "hamtaInfo.php?info=" + encodeURIComponent(info));
12 svar · 614 visningar · startad av PollyJuice
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älj projekt:<br>
</label>
<select onChange="getSelected(this)">
<option>*** Vä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);
?>
Du missar bara att skicka med ditt värde i anropet:
xmlhttp.open("GET", "hamtaInfo.php?info=" + encodeURIComponent(info));
Det enda php skriver ut är rubriken i tabellen; "Alla projekt"...
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.
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ä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);
?>
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?)
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?
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å?
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. :)
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> </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);
?>
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?
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
Inga problem. Får hoppas att det löser sig :)