Avatar billede 7th Praktikant
13. februar 2003 - 15:48 Der er 11 kommentarer og
1 løsning

Redigere output fra database

Jeg mangler noget hjælp til hvordan jeg kan redigere i det output som jeg hiver ud fra en mysql database.

Lad os sige at jeg i min database har en tabel med tre felter - id, navn og adresse. Jeg ønsker nu at kunne redigere i det enkelte navn, hvorfor jeg hiver noget data ud fra databasen.

mysql_connect ("$mysql_host" , "$mysql_user" , "$mysql_pass");
mysql_select_db ("$mysql_database");
$tabelnavne = mysql_query ("SELECT navn FROM $mysql_table ORDER BY id DESC") or die (mysql_error ());

while ($tabelnavn = mysql_fetch_row ($tabelnavne))
{
<input name=\"navn\" type=\"text\" value=\"$tabelnavn[0]\">
}

Så godt så langt. Nu har jeg fået udskrevet alle navne fra tabellen i nogle inputfelter.

Nu kommer vi så til mit store problem. Når jeg har redigeret i et vilkårligt navn i en af inputfelterne, skal jeg jo gerne have opdateret navnet i database tabellen, men jeg mangler en reference til både navn samt id for at tabellen kan vide hvorhenne og i hvilket navn den skal redigere. Hvordan gør jeg det ?

Jeg har fundet ud af at redigeringsfunktionen skal se således ud.

$tabelnavne = mysql_query ("UPDATE $mysql_table SET navn=\"$navn\" WHERE id=\"$id\"");

Selvfølgelig mangler jeg noget ved inputfelterne så jeg kan submitte redigeringen, og jeg har da også fumlet rundt med noget ala dette.

<a href=\"test.php?id=$datanavn[id]&edit=name\" onclick=\"document.formnavn.submit();\">

Så har jeg id referencen til hvert navn når jeg putter ovenstående kode ind i while-sætningen, men jeg kan ikke lige tricke den med at få fat på referencen til hver enkelt navn.

Håber på noget hjælp :)
Avatar billede 7th Praktikant
13. februar 2003 - 16:18 #1
Dette et mit seneste eksempel jeg sidder og fumler med, og jeg kan som nævnt ikke finde ud af at få sat en reference på det enkelte navn, så jeg ved $navn = kan referere til det korrekte inputfelt.

mysql_connect ("$mysql_host" , "$mysql_user" , "$mysql_pass");
mysql_select_db ("$mysql_database");
$tabelnavne = mysql_query ("SELECT id , navn FROM $mysql_table ORDER BY id DESC") or die (mysql_error ());

if (isset ($_GET['edit']) && $_GET['edit'] == "name")
{
$id = $_GET['id'];
$navn = "Test"; // blot en test for at se om det virker...
$contents = mysql_query ("UPDATE $mysql_table SET navn=\"$navn\" WHERE id=\"$id\"") or die (mysql_error ());
}

echo "<form action=\"redigering.php\" method=\"post\" name=\"names\">\n";
echo "<table align=\"center\">\n";

while ($tabelnavn = mysql_fetch_row ($tabelnavne))
{
echo "<tr>\n";
echo "<td><input name=\"navn\" type=\"text\" value=\"$tabelnavn[1]\"></td>\n";
echo "<td><a href=\"redigering.php?id=$tabelnavn[0]&edit=name\" onclick=\"document.names.submit();\">Edit</a></td>\n";
echo "</tr>\n";
}

echo "</table>\n";
echo "</form>\n";
Avatar billede Slettet bruger
13. februar 2003 - 16:19 #2
Til at generer formularen:
mysql_connect ("$mysql_host" , "$mysql_user" , "$mysql_pass");
mysql_select_db ("$mysql_database");
$tabelnavne = mysql_query ("SELECT navn, id FROM $mysql_table ORDER BY id DESC") or die (mysql_error ());
$ids = array();
while ($tabelnavn = mysql_fetch_row ($tabelnavne))
{
    echo "<input name=\"navn".$tabelnavn[1]."\" type=\"text\" value=\"$tabelnavn[0]\">";
    $ids[] = $tabelnavn[1];
}
echo "<input type=\"hidden\" value=\"".implode("|", $ids)."\" name=\"ids\">";

Til at gemme informationerne:
$ids = explode("|",$ids);
foreach($ids as $value)
{
    $sql = "UPDATE $mysql_table set navn='".addslashes($_POST["navn$value"])."' where id='$value'";
    mysql_query($sql);
}
Avatar billede 7th Praktikant
13. februar 2003 - 16:52 #3
Jeg kan ikke helt få det til at virke. Der sker ingenting når jeg prøver at redigere et navn. Det erstattes blot af selvsamme navn igen.

mysql_connect ("$mysql_host" , "$mysql_user" , "$mysql_pass");
mysql_select_db ("$mysql_database");
$tabelnavne = mysql_query ("SELECT id , navn FROM $mysql_table ORDER BY id DESC") or die (mysql_error ());

if (isset ($_GET['edit']) && $_GET['edit'] == "name")
{
$idnum = explode ("|" , $idnum);
foreach ($idnum as $value)
{
$tabelnavne = mysql_query ("UPDATE $mysql_table SET navn='".addslashes($_POST["navn$value"])."' WHERE id='$value'") or die (mysql_error ());
}
}

echo "<form action=\"redigering.php\" method=\"post\" name=\"names\">\n";
echo "<table align=\"center\">\n";

while ($tabelnavn = mysql_fetch_row ($tabelnavne))
{
echo "<tr>\n";
echo "<td><input name=\"navn".$tabelnavn[0]."\" type=\"text\" value=\"$tabelnavn[1]\"></td>\n";
echo "<td><a href=\"redigering.php?edit=name\" onclick=\"document.names.submit();\">Edit</a></td>\n";
echo "</tr>\n\n";
$idnum[] = $tabelnavn[0];
}

echo "<tr>\n";
echo "<td><input name=\"idnum\" type=\"hidden\" value=\"".implode("|", $idnum)."\"></td>\n";
echo "<td>&nbsp;</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</form>\n";
Avatar billede Slettet bruger
13. februar 2003 - 17:54 #4
Prøv det her i stedet for... Udskriv eventuelt dine sql kald for at tjekke hvor problemet ligger!?

mysql_connect ("$mysql_host" , "$mysql_user" , "$mysql_pass");
mysql_select_db ("$mysql_database");

if (isset ($_GET['edit']) && $_GET['edit'] == "name")
{
$idnum = explode ("|" , $idnum);
foreach ($idnum as $value)
{
$tabelnavne = mysql_query ("UPDATE $mysql_table SET navn='".addslashes($_POST["navn$value"])."' WHERE id='$value'") or die (mysql_error ());
}
}

$tabelnavne = mysql_query ("SELECT id , navn FROM $mysql_table ORDER BY id DESC") or die (mysql_error ());

echo "<form action=\"redigering.php\" method=\"post\" name=\"names\">\n";
echo "<table align=\"center\">\n";

while ($tabelnavn = mysql_fetch_row ($tabelnavne))
{
echo "<tr>\n";
echo "<td><input name=\"navn".$tabelnavn[0]."\" type=\"text\" value=\"$tabelnavn[1]\"></td>\n";
echo "<td><a href=\"redigering.php?edit=name\" onclick=\"document.names.submit();\">Edit</a></td>\n";
echo "</tr>\n\n";
$idnum[] = $tabelnavn[0];
}

echo "<tr>\n";
echo "<td><input name=\"idnum\" type=\"hidden\" value=\"".implode("|", $idnum)."\"></td>\n";
echo "<td>&nbsp;</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</form>\n";
Avatar billede 7th Praktikant
13. februar 2003 - 18:47 #5
Når jeg trykker på Edit opstår der nogle problemer, som lader til at ligge i linierne...

$idnum = explode ("|" , $idnum);
hvor jeg får fejlmeddelelsen, Undefined variable: idnum.

$tabelnavne = mysql_query ("UPDATE $mysql_table SET navn='".($_POST["navn$value"])."' WHERE id='$value'") or die (mysql_error ());
hvor jeg får fejlmeddelelsen, Undefined index: navn.
Avatar billede Slettet bruger
13. februar 2003 - 23:21 #6
Hvad med det her?
if (isset ($_GET['edit']) && $_GET['edit'] == "name")
{
$idnumbers = explode ("|" , $_POST["idnum"]);
foreach ($idnumbers as $value)
{
    $tabelnavne = mysql_query ("UPDATE $mysql_table SET navn='".addslashes($_POST["navn$value"])."' WHERE id='$value'") or die (mysql_error ());
}
}
Avatar billede 7th Praktikant
13. februar 2003 - 23:28 #7
Desværre, stadigvæk samme fejl. Problemet er at $idnumbers er tomt, den får ingen værdi hæftet på sig, og dermed bliver $value jo også tomt. Jeg skal ikke kunne sige hvorfor da jeg ikke er en haj til php, men jeg har faktisk løst mit problem, omendt måske på en mere indviklet måde end dig, men det virker ihvertdfald :)

I stedet for at udskrive alle id numre i et hidden inputfelt, tænkte jeg om man ikke lige så godt kunne tælle antal id numre fra tabellen i databasen, og så køre en while-sætning på dette nummer. Det prøvede jeg så, og kom frem til dette.

if (isset ($_POST['edit_output']))
{
$antal = mysql_query ("SELECT id FROM $mysql_table") or die (mysql_error ());
$optal = mysql_num_rows ($antal);
$val = 1;
while ($val <= $optal)
{
$add_edits = mysql_query ("UPDATE $mysql_table SET navn=\"".$_REQUEST['navn'.$val]."\" WHERE id=\"$val\"") or die (mysql_error ());
$val = $val + 1;
}
}

Jeg skal lige have optimeret koden, men ellers tror jeg at jeg vil beholde dette.

Vil du have lidt points for dine anstrengelser ?
Avatar billede 7th Praktikant
13. februar 2003 - 23:34 #8
P.S. hvad betyder de to prikker på hver side af $_REQUEST i navn=\"".$_REQUEST['navn'.$val]."\" ?
Avatar billede Slettet bruger
14. februar 2003 - 00:22 #9
du bruger . til at samle strenge...
$streng = "En Streng"."To Streng;
$streng er nu "En StrengTo Streng"

Problemet med at køre en while som du har tænkt dig er, hvis du sletter en række fra din tabel... så fucker det hele op!
Avatar billede 7th Praktikant
14. februar 2003 - 17:30 #10
OK, men nu skal jeg jo ikke slette noget, blot redigere, anyway er du sikker på du ikke vil have nogle points ?

Lader spørgsmålet stå åben til i aften.
Avatar billede Slettet bruger
14. februar 2003 - 17:57 #11
Hvis du ikke kan bruge mit input til noget... Nej tak!
Avatar billede 7th Praktikant
14. februar 2003 - 20:04 #12
Direkte kan jeg ikke bruge det, da det jo ikke fungerer, men som inspiration kan jeg sagtens :) Anyway tak for din hjælp.

Sidste chance hvis du vil have 12 points...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester