Om jag tar bort följande kod $row = mysql_fetch_assoc ($sql_result) or die ("SQL Error."); så kommer kommer jag rätt och rätt saker kommer upp och när jag skriver in min ändring och klickar på klar så får jag upp ett meddelande att texten är ändrad men texten är fortfarande den samma så inget händer i databasen.
Hämta bild från mysql
34 svar · 2 723 visningar · startad av emton · sida 2 av 2
Frågan, av emton
Jag har gjort ett formulär där det ska visas en bild och lite text till den. Allt ligger i en databas. Texten är inte några problem men jag begriper inte hur kag får bilden att synas. I databasen har jag skrivit sökvägen till bilden och den kan jag få att skrivas ut 'picture' men nu är det ju inte det jag vill. echo "<table border=\"1\" cellpadding=\"10\">"; echo "<tr><th>id</th><th>Beskr
Läs frågan i sin helhet →testa att lägga till
if (!$sql_result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}
mellan
$sql_result = mysql_query ($sql) or die ("Query error.");
$row = mysql_fetch_assoc ($sql_result) or die ("SQL Error.");
så att det blir
$sql_result = mysql_query ($sql) or die mysql_error();
echo "<br/>SQL: $sql<br/>\n";
if (!$sql_result)
{
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}
$row = mysql_fetch_assoc ($sql_result) or die mysql_error();
så kanske vi kan se om det blir något fel.
Som jag skrev tidigare, post gärna html-koden så att vi kan se hur den genererade koden ser ut, kanske finns något fel där?
Posta gärna om din nuvarande php-kod så vi också vet hur den ser ut nu. det är lätt hänt att man glömmer någon lite bit.
Nu äntligen händer det något!! Resultatet blev nu SQL: SELECT * FROM bilder WHERE id="0";
Nu använder vi inte längre POST för att skicka värdena till skriptet så du får ändra
$attEditera = intval ($_POST['bild']);
till antingen
$attEditera = intval ($_GET['bild']);
eller
$attEditera = intval ($_REQUEST['bild']);
Får samma svar.
Kan du visa din PHP-kod? Du kanske har missat att ändra på något ställe.
Visa även html-koden för sidan där alla bilder visas, kanske blir något fel i länken för att redigera bilden.
Kan du visa din PHP-kod? Du kanske har missat att ändra på något ställe.
Visa även html-koden för sidan där alla bilder visas, kanske blir något fel i länken för att redigera bilden.
Kommer här, jag har bara denna kod, den ska funka för att både visa och ändra.
Är enormt tacksam för all tid du lägger ner :)
<?php
function visaBilder () {
echo "<p>Klicka på bilden för att ändra bildtexten.</p>";
require_once ("databas.inc");
$sql = "SELECT * FROM bilder;";
$sql_result = mysql_query ($sql) or die ("Query error.");
echo "<form action =\"andra.php\" method=\"post\">";
echo "<table border=\"1\" cellpadding=\"10\">";
echo "<tr><th>id</th><th>Beskrivning</th><th>Information</th><th>Bild</th></tr>";
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['description'] . "</td>";
echo "<td>" . $row['information'] . "</td>";
echo "<td><a href='andra.php?vill_editera=1&?bild=" . $row['id'] . "'><img src='" . $row['picture'] . "'/></a></td>";
echo "</tr>";
}
echo "</table>";
echo "<input type=\"hidden\" name=\"vill_editera\" value=\"1\" />";
echo "</form>";
}
function editeraBild ($attEditera) {
require_once ("databas.inc");
$sql = "SELECT * FROM bilder WHERE id=\"" . $attEditera . "\";";
$sql_result = mysql_query ($sql) or die (mysql_error());
echo "<br/>SQL: $sql<br/>\n";
if (!$sql_result)
{
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}
$row = mysql_fetch_assoc ($sql_result) or die (mysql_error());
echo "<form action=\"andra.php\" method=\"post\">";
echo "<table border=\"0\" cellpadding=\"3\">";
echo "<tr><td>Beskrivning</td> <td><input type=\"text\" name=\"description\" value=\"" . $row['description'] . "\" /></td></tr>";
echo "</table>";
echo "<input type=\"hidden\" name=\"bild\" value=\"" . $attEditera . "\" />";
echo "<input type=\"hidden\" name=\"har_editerat\" value=\"1\" />";
echo "<input type=\"submit\" value=\"KLAR\" />";
echo "</form>";
}
function gorEditering ($attEditera) {
require_once ("databas.inc");
$description = htmlentities ($_POST['description']);
$sql = "UPDATE bilder SET " .
"description=\"" . $description . "\" WHERE id=\"" . $attEditera . "\";";
$sql_result = mysql_query ($sql) or die ("Query Error.");
echo "<p>Bildtexten har ändrats</p>";
}
require_once ("header.inc");
if ($_REQUEST['vill_editera'] == "1") {
$_REQUEST['vill_editera'] = 0;
$attEditera = intval ($_GET['bild']);
editeraBild ($attEditera);
}
else if ($_REQUEST['har_editerat'] == "1") {
$_REQUEST['har_editerat'] = 0;
$attEditera = intval ($_GET['bild']);
gorEditering ($attEditera);
}
else
visaBilder ();
?>
Jag menade att jag ville se den genererade html-koden.
när du tittar på sidan i webbläsaren så kan du välja att visa källa.
Ändra
if ($_REQUEST['vill_editera'] == "1") {
$_REQUEST['vill_editera'] = 0;
$attEditera = intval ($_GET['bild']);
editeraBild ($attEditera);
}
till
if ($_REQUEST['vill_editera'] == "1") {
$_REQUEST['vill_editera'] = 0;
echo "<br/>_GET['bild'] = '" . $_GET['bild'] . "'<br/>";
$attEditera = intval ($_GET['bild']);
echo "<br/>attEditera = '" . $attEditera . "'<br/>";
editeraBild ($attEditera);
}
så kan vi se om vi har bildid där.
Jag menade att jag ville se den genererade html-koden.
när du tittar på sidan i webbläsaren så kan du välja att visa källa.
Ändraif ($_REQUEST['vill_editera'] == "1") { $_REQUEST['vill_editera'] = 0; $attEditera = intval ($_GET['bild']); editeraBild ($attEditera); }till
if ($_REQUEST['vill_editera'] == "1") { $_REQUEST['vill_editera'] = 0; echo "<br/>_GET['bild'] = '" . $_GET['bild'] . "'<br/>"; $attEditera = intval ($_GET['bild']); echo "<br/>attEditera = '" . $attEditera . "'<br/>"; editeraBild ($attEditera); }så kan vi se om vi har bildid där.
Här är htmlkoden för bildsidan
<!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" />
<link rel="stylesheet" href="style.css" type="text/css">
<title>Untitled Document</title>
<style type="text/css">
<!--
.style1 {
color: #009900;
font-weight: bold;
font-size: 36px;
}
-->
</style>
</head>
<body>
<div id="layout">
<div id="top">
</div><!--top-->
<div id="meny">
<ul>
<li><a href="index.php">Start</a></li>
<li><a href="loggain.php">Logga in</a></li>
<li><a href="register.php">Ny användare</a></li>
<li><a href="visa.php">Visa användare</a></li>
<li><a href="visa_pictures.php">Visa bilder</a></li>
<li><a href="andra.php">Ändra bildtext</a></li>
</ul>
</div><!--meny-->
<div id="main">
</div><!--main-->
</div><!--layout-->
</body>
</html>
<p>Klicka p bilden fr att ndra bildtexten.</p><form action ="andra.php" method="post"><table border="1" cellpadding="10"><tr><th>id</th><th>Beskrivning</th><th>Information</th><th>Bild</th></tr><tr><td>1</td><td>Funny och Caramell vintern 2003</td><td>25kb, 20031126</td><td><a href='andra.php?vill_editera=1&?bild=1'><img src='http://tor.ei.hv.se/~webbVT10051/Inlamning_1/Bilder/FunnyCaramell.jpg'/></a></td></tr><tr><td>2</td><td>Charlie som liten</td><td>blabal</td><td><a href='andra.php?vill_editera=1&?bild=2'><img src='http://tor.ei.hv.se/~webbVT10051/Inlamning_1/Bilder/charlie.JPG'/></a></td></tr><tr><td>3</td><td>Lovisa och Lovis, mor och dotter. Den vnstra bilden r tagen av Thomas Olsson.</td><td>den 24 augusti 2005, 09:17:40</td><td><a href='andra.php?vill_editera=1&?bild=3'><img src='http://tor.ei.hv.se/~webbVT10051/Inlamning_1/Bilder/Lovis_Lovisa.jpg'/></a></td></tr><tr><td>4</td><td>Lovis och Lovisa igen. Hr r Lovis ca 1mnad</td><td>maj 2005</td><td><a href='andra.php?vill_editera=1&?bild=4'><img src='http://tor.ei.hv.se/~webbVT10051/Inlamning_1/Bilder/lovisa_lovis.jpg'/></a></td></tr></table><input type="hidden" name="vill_editera" value="1" /></form>
Och här koden för ändrasidan efter att jag ändrat ditt ovanstående förslag.
<!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" />
<link rel="stylesheet" href="style.css" type="text/css">
<title>Untitled Document</title>
<style type="text/css">
<!--
.style1 {
color: #009900;
font-weight: bold;
font-size: 36px;
}
-->
</style>
</head>
<body>
<div id="layout">
<div id="top">
</div><!--top-->
<div id="meny">
<ul>
<li><a href="index.php">Start</a></li>
<li><a href="loggain.php">Logga in</a></li>
<li><a href="register.php">Ny användare</a></li>
<li><a href="visa.php">Visa användare</a></li>
<li><a href="visa_pictures.php">Visa bilder</a></li>
<li><a href="andra.php">Ändra bildtext</a></li>
</ul>
</div><!--meny-->
<div id="main">
</div><!--main-->
</div><!--layout-->
</body>
</html>
<br/>_GET['bild'] = ''<br/><br/>attEditera = '0'<br/><br/>SQL: SELECT * FROM bilder WHERE id="0";<br/>
det hade smugit in ett frågetecken mellan & och bildid
Här är koden utan det felaktiga frågetecknet
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['description'] . "</td>";
echo "<td>" . $row['information'] . "</td>";
echo "<td><a href='andra.php?vill_editera=1&bild=" . $row['id'] . "'><img src='" . $row['picture'] . "'/></a></td>";
echo "</tr>";
}
Nu äntligen går det framåt igen. Jag kommer till rätt sida och rutan med bildtext kommer upp även med rätt bildtext i. Rätt id och allt. MEN när jag ändrat texten och trycker på klar så står det att texten är ändrad men den är inte det.
Det beror på att du även ändrade
else if ($_REQUEST['har_editerat'] == "1") {
$_REQUEST['har_editerat'] = 0;
$attEditera = intval ($_GET['bild']);
gorEditering ($attEditera);
}
från $_POST till $_GET
när du postar ditt formulär så görs det via POST.
så på detta stället ska du ha kvar
else if ($_REQUEST['har_editerat'] == "1") {
$_REQUEST['har_editerat'] = 0;
$attEditera = intval ($_POST['bild']);
gorEditering ($attEditera);
}
Vill du göra det enklare för dig själv så ändra alla $_POST resp $_GET till $_REQUEST
Jag vet inte om det är bra eller dåligt ut säkerhetsperspektiv men det borde lösa lite problem.
Det funkar!!!!!!
Tack snälla för all tid du har lagt ner!! Jag är jättetacksam. Hoppas att det inte ska behöva bli mer saker nu. Kommer kanske få problem med krypteringen, får se hur det går.
Tack än en gång!
Varsågod, eftersom det här problemet har löst sig så får du gärna markera tråden som löst.