Avatar billede michaelbn Juniormester
27. december 2005 - 11:43 Der er 7 kommentarer

Redigere i database via PHP hjemmeside

Jeg har lavet en adresseliste i MySQL. Via en hjemmeside lavet i PHP skal man kunne se denne liste og rette oplysningerne i den, hvis det er påkrævet. Det er lavet på den måde, at når ved en adresse trykker på "ret adr.", kommer man til en ny side, hvor man kan se oplysningerne til den pågældende adresse og rette i dem. Men når man trykker på "ret adr.", kommer den rigtige adresse godt nok frem i browseren, men siden er blank. Kan nogen forklare, hvad jeg gør forkert?

Den side, der viser hele adresselisten, har følgende indhold:

<?php
require_once("forbindelse.php");

$order=" ORDER BY medlemsnr";
if (isset($_GET['order'])) {
  $order=" ORDER BY {$_GET['order']}";
}

echo "<CENTER><h1> Oversigt over adresser </h1></CENTER>";
?>
<CENTER><P CLASS="tekst"><B> Ændre en adresse i adresselisten ved at trykke på "ret adr."-link </B></p></CENTER>

<center><form action="<? echo $php_self ?>">
<select name="order">
    <option value="medlemsnr">Sorter efter medlemsnummer</option>
    <option value="navn">Sorter efter navn</option>
    <option value="postnr">Sorter efter postnummer</option></select>
    <input type="submit" class="button" name="Sorter" value="Sorter">
</form></center>

<?
$query = " SELECT * FROM adresser $order";
$resultat = mysql_query($query);
$num_rows = mysql_num_rows($resultat);

if  ( $num_rows == 0 ) {
echo "Der er ingen adresser";
} else {
echo "<TABLE ALIGN='CENTER' BORDER='0' cellspacing='2' cellpadding='2'>";
echo "<TR><TD>Medlemsnr.</TD><TD>Navn</TD><TD>E-mail</TD><TD>Tlf.nr.</TD><TD>Mobilnr.</TD><TD>Postnr.</TD><TD>By</TD><TD>Stednavn</TD><TD></TD></TD>";

while($row = mysql_fetch_array($resultat)) {
$medlemsnr=$row["medlemsnr"];
$navn=$row["navn"];
$mail=$row["mail"];
$telefon=$row["telefon"];
$mobil=$row["mobil"];
$postnr=$row["postnr"];
$by=$row["by"];
$stednavn=$row["stednavn"];
$id=$row["id"];
echo "<TR><TD>$medlemsnr</TD><TD>$navn</TD><TD>$mail</TD><TD>$telefon</TD><TD>$mobil</TD><TD>$postnr</TD><TD>$by</TD><TD>$stednavn</TD><TD><A HREF=\"adr_aendre.den.php?row_id=$id\">ret adr.</A></TD></TR>";
}
}
mysql_close();

echo "</TABLE><br>";
?>

Når man trykker på "ret adr." skulle denne side hentes frem:

<?php
echo "<CENTER><h1> Ændre data i adresselisten </h1></CENTER>";
require_once("forbindelse.php");

$resultat = mysql_query(" SELECT * " . " FROM adresser " . " WHERE id='$row_id' ");
$num_rows = mysql_num_rows($resultat);
if  ( $num_rows == 0 ) {
echo "Der er ingen adresser";
} else {

while($row = mysql_fetch_array($resultat)) {
$medlemsnr=$row["medlemsnr"];
$navn=$row["navn"];
$mail=$row["mail"];
$telefon=$row["telefon"];
$mobil=$row["mobil"];
$postnr=$row["postnr"];
$by=$row["by"];
$stednavn=$row["stednavn"];
$id=$row["id"];

}
echo "<FORM METHOD=GET  ACTION=\"adr_aendre.php\">";

echo "<center><table width=\"560\" border=\"0\" cellspacing=\"4\" cellpadding=\"0\">";
echo " <tr>";
echo " <td CLASS='job'><P CLASS=\"tekst\">Medlemsnr.:</p></td>";
echo " <td><P CLASS=\"tekst\"><B>$medlemsnr</B></p></td>";
echo " </tr>";
echo " <tr> ";
echo " <td width='60' CLASS='job'>Navn:</td>";
echo " <td width='200' CLASS='job'>$navn</td>";
echo " <td width='300'><INPUT TYPE=\"TEXT\" SIZE='32' class=\"input\" NAME=\"navn\" VALUE=\"$navn\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td CLASS='job'>Mail:</td>";
echo " <td CLASS='job'>$mail</td>";
echo " <td><INPUT TYPE=\"TEXT\" SIZE='32' class=\"input\" NAME=\"mail\" VALUE=\"$mail\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td CLASS='job'>Telefon:</td>";
echo " <td CLASS='job'>$telefon</td>";
echo " <td><INPUT TYPE=\"TEXT\" SIZE='32' class=\"input\" NAME=\"telefon\" VALUE=\"$telefon\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td CLASS='job'>Mobil:</td>";
echo " <td CLASS='job'>$mobil</td>";
echo " <td><INPUT TYPE=\"TEXT\" SIZE='6' class=\"input\" NAME=\"mobil\" VALUE=\"$mobil\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td CLASS='job'>Postnr:</td>";
echo " <td CLASS='job'>$postnr</td>";
echo " <td><INPUT TYPE=\"TEXT\" SIZE='32' class=\"input\" NAME=\"postnr\" VALUE=\"$postnr\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td CLASS='job'>By:</td>";
echo " <td CLASS='job'>$by</td>";
echo " <td><INPUT TYPE=\"TEXT\" SIZE='32' class=\"input\" NAME=\"by\" VALUE=\"$by\"></td>";
echo " </tr>";
echo " <td CLASS='job' VALIGN=TOP>Stednavn:</td>";
echo " <td width='200' CLASS='job'>$stednavn</td>";
echo " <td width='300'><INPUT TYPE=\"TEXT\" SIZE='32' class=\"input\" NAME=\"stednavn\" VALUE=\"$stednavn\"></td>";
echo " </tr>";
echo " <tr>";
echo " <td colspan=\"3\">&nbsp;</td>";
echo " </tr>";
echo " </table></center>";

echo "<BR>";

$medlemsnr=(urlencode($medlemsnr));
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"medlemsnr\" value=$medlemsnr>";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"id\" value=$id>";

echo "<center><INPUT TYPE=SUBMIT class=\"button\" VALUE=\"Tilføj ændringen !\"></center>";

} # end else
mysql_close();

echo "</FORM>";
?>
Avatar billede webstuff Nybegynder
27. december 2005 - 13:51 #1
Sæt det her ind i toppen af adr-aendre.php:
$row_id = $_GET[row_id];
Avatar billede michaelbn Juniormester
27. december 2005 - 22:56 #2
Det er sådan, at når man har valgt en adresse, der skal ændre, er det først filen "adr_aendre.den.php", der loades. I toppen af den har jeg indsat ovenstående, så nu kommer de rigtige data frem på skærmen. Så langt så godt....

Når man så har rettet den pågældende person og klikker på "Tilføj ændringen", hentes filen "adr_aendre.php". Det er den fil, der skal udføre rettelsen i database eller fortælle brugeren, at der er sket en fejl. Desværre virker det ikke, for når man klikker "Tilføj ændringen", kommer der altid besked om, at man ikke har udfyldt feltet "Navn", så man skal prøve igen.

Her er indholdet af "adr_aendre.php". Kan nogen se, hvad der er galt?

<?php
$titel="Adresseliste er opdateret";
require_once("forbindelse.php");

$medlemsnr=(urldecode($medlemsnr));

$error=false;
if ( $navn == "" ) {
echo "<P CLASS=\"tekst\">Navn skal udfyldes</p><BR>";
$error=true;
}

if ($error) {
echo "<P CLASS=\"tekst\">Navn skal udfyldes, vælg personen igen</p>";
echo "<BR><A HREF=\"adr.vis.php\"> Tilbage</A>";
exit;
}
mysql_query("UPDATE adresser (navn, mail, telefon, mobil, postnr, by, stednavn) VALUES ('$navn', '$mail', '$telefon', '$mobil', '$postnr', '$by', '$stednavn') WHERE id='$id'");

if (!mysql_query($sql,$connection)) {
echo "<P CLASS=\"tekst\">Fejl, kan ikke ændre adresselisten</p><BR>";
echo "<BR><A HREF=\"adr.vis.php\"> Tilbage</A>";
  exit;
  } else {
# amend OK inform user
echo "<P CLASS=\"tekst\">Adresselisten opdateret [".mysql_affected_rows()."] person er ændret</p><BR>";
    echo "<P CLASS=\"tekst\">Personen <B>$navn</B> er blevet ændret</p><br>";
    echo "<BR><A HREF=\"adr.vis.php\"> Tilbage til adresselisten</A>";
}

mysql_close();
?>
Avatar billede webstuff Nybegynder
28. december 2005 - 00:51 #3
Når du bruger UPDATE i din query, så gør sådan her:

mysql_query("UPDATE tabel SET navn = '$navn', tlf = '$tlf' osv osv...
og så brug emptu(); i stedet for $navn == ""

Men der har lige været julefroksto så kan ikke garantere for hjvad jeg lige har skrevet..
Avatar billede michaelbn Juniormester
28. december 2005 - 17:32 #4
Det hjælper ikke. Der kommer stadig besked om, at navn ikke er udfyldt, lige meget hvad man gør.
Avatar billede michaelbn Juniormester
29. december 2005 - 21:48 #5
Er der virkelig ingen, der kan fortælle mig, hvorfor jeg ikke kan få det til at virke? Der må da være nogen, som har lavet noget lignende selv og har forslag til, hvad der er galt med min kode!?
Avatar billede webstuff Nybegynder
05. januar 2006 - 03:00 #6
$navn = $_POST[navn];
indsæt den i toppen..

Når du tjekker en variabel der ikke findes, er det jo klart at den siger at den er tom ;-)
Avatar billede michaelbn Juniormester
05. januar 2006 - 18:32 #7
Det hjælper ikke. Kunne det være en idé at kombinere de to filer, så man er sikker på, den kender de forskellige variabler m.v.?
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

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