Avatar billede Frederik Nybegynder
15. oktober 2007 - 17:00 Der er 31 kommentarer og
1 løsning

Opdatering af indhold i MySQL via PHP

Hej.
Jeg får et fejlmeddelelse når jeg prøver at opdatere min link database. Det ser fint ud med at vælge det link der skal rettes, men når jeg trykker opdater får fejlmeddelesen
Parse error: syntax error, unexpected T_LOGICAL_OR in C:\webserver\local\edit_ok.php on line 33


#links.php#
<p align="center">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

    <tr>
        <td bgcolor="#7a9294" width="100%" colspan="3"><p align="center"><b>Links</b></p></td>
    </tr>
    <tr>
        <td width="3%"></td>
        <td width="94%">
<br>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td>
<?
include("links/add.php");
?>
</td>
</tr>
</table><br>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  <tr>
    <td bgcolor="#656565" width="100%">
    <p align="center"><font color="#FFFFFF"><b>Link Oversigt</b></font></td>
  </tr>

<?
require("config.php");
$query = mysql_query("SELECT url, beskrivelse, id FROM linkdatabase ORDER BY id, url, beskrivelse") or die(mysql_error());
while($row = mysql_fetch_assoc($query)) {
  echo"
  <tr>
    <td width=\"100%\"><p align=\"left\"><a href=\"http://".$row['url']."\"><b>".$row['url']. "</b></a><br>" .$row['beskrivelse']. "<br><a href=\"admin.php?id=".$row['id']."\">Ret/Slet</a></p></td>
  </tr>
  ";
}
?>
</table>

</td>
        <td width="3%"></td>
    </tr>
</table>
</p>
<br>


#admin.php#
<html><head></head><body>
<?
include('config.php');

if( isset( $_GET['id'] ) )
  $id = $_GET['id'];
else
  $id = null;


if( $id !== null ) {
$query = mysql_query("SELECT url, beskrivelse, id FROM linkdatabase WHERE id = '$id'") or die(mysql_error());
$query = mysql_fetch_array($query);
  if( $query == null )
    die("Fandt ikke linket");
?>
<p align="center">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

    <tr>
        <td bgcolor="#656565" width="100%" colspan="3"><p align="center"><b><font color="#ffffff">Tilføj Link</font></b></p></td>
    </tr>
    <tr>
        <td width="3%"></td>
        <td width="94%">
<br>
<p align="center">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" id="AutoNumber1">
<form action="edit_ok.php" method="post">
<input type="hidden" value="<? echo $query[id] ?>" name="id">
    <tr>
        <td>URL:</td>
        <td><input type="text" VALUE="<? echo"$query[url]";?>" name="url"><font color="red">*</font></td>
    </tr>
    <tr>
        <td>Beskrivelse:</td>
        <td><input type="text" VALUE="<? echo"$query[beskrivelse]"; ?>" name="beskrivelse"><font color="red">*</font></td>
    </tr>
    <tr>
        <td></td>
        <td><br><input type="submit" name="edit_link" value="Opdater"></td>
    </tr>
<?php
}
else {
  echo "Fejl";
  }
?>
</form>
</table>
</p>

</td>
        <td width="3%"></td>
    </tr>
</table>
</p>

<br>

</body></html>


#edit_ok.php#
<p align="center">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

    <tr>
        <td bgcolor="#7a9294" width="100%" colspan="3"><p align="center"><b>BLa bla</b></p></td>
    </tr>
    <tr>
        <td width="3%"></td>
        <td width="94%">
<br>

<?php
require("config.php");
$add = &$HTTP_POST_VARS['edit_link'];
if(empty($edit_link)) {
  ?>
  <br><a href="index.php?pageid=5">Link oversigt</a>
  <?php
  } else {

$id = &$HTTP_POST_VARS['id'];
$url = &$HTTP_POST_VARS['url'];
$beskrivelse = &$HTTP_POST_VARS['beskrivelse'];

if(empty($url) OR empty($beskrivelse)) {
    echo '<font color="red"><b>Fejl!</b></font><br>Felterne markeret med en <font color="red">*</font> <u>skal</u> udfyldes!<br><br>
<a href="index.php?pageid=5"><b>Tilbage</b></a>';}

else {
mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);
mysql_query("UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'");
or die(mysql_error());
print "Hjemmesiden <b>\"$url\"</b> er nu tilføjet til databasen.";
?>
<br>
Gå til <a href="index.php?pageid=5"><b>Link Oversigt</b></a>
<?php
}
}
?>

</td>
        <td width="3%"></td>
    </tr>
</table>
</p>
<br>


- Frederik
Avatar billede nielle Nybegynder
15. oktober 2007 - 17:12 #1
Jeg vil umiddewlbart gætte på at det er denne her:

mysql_query("UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'");
or die(mysql_error());

som skulle have været dette:

mysql_query("UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'") or die(mysql_error());
Avatar billede coderdk Praktikant
15. oktober 2007 - 17:14 #2
mysql_query("UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'");
or die(mysql_error());


skal være:

mysql_query("UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'") or die(mysql_error());
Avatar billede coderdk Praktikant
15. oktober 2007 - 17:14 #3
det blev vist nielles ;) afvis mit svar og nielle, smid :D
Avatar billede Frederik Nybegynder
15. oktober 2007 - 17:16 #4
Nu åbnes der abre en side hvor der står et link til Link Oversigt.. Og der er ikke opdateret noget i databasen??
Avatar billede Frederik Nybegynder
15. oktober 2007 - 17:16 #5
bare**
Avatar billede nielle Nybegynder
15. oktober 2007 - 17:16 #6
Specielt er det vigtigt at du ikke afslutter din mysql_query() linje med et ';' før at din or-linje.
Avatar billede nielle Nybegynder
15. oktober 2007 - 17:19 #7
Hvad forventer du at der skal ske?
Avatar billede Frederik Nybegynder
15. oktober 2007 - 17:21 #8
Jeg har rettet fejlen til

mysql_query("UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'") or die(mysql_error());

Men den opdaterer ikke? den kommer bare med et link til siden links.php...
Avatar billede Frederik Nybegynder
15. oktober 2007 - 17:22 #9
Den skulle gerne have opdateret den gamle data i mysql til den nye tilføjet i admin.php.
Avatar billede coderdk Praktikant
15. oktober 2007 - 17:24 #10
Evt lav:

mysql_query("UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'") or die(mysql_error());

om til:
$sql = "UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'";
die($sql);
mysql_query($sql) or die(mysql_error());

Så kan du se om SQL'en ser korrekt ud
Avatar billede nielle Nybegynder
15. oktober 2007 - 17:25 #11
Hvis den ikke opdatere noget i databasen er det sandsynligvis fordi at din SQL indeholder noget andet end du forventer. Et godt debugging trick er at prøve at udskrive SQL'en før at man udføre den:

#edit_ok.php#

<p align="center">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

    <tr>
        <td bgcolor="#7a9294" width="100%" colspan="3"><p align="center"><b>BLa bla</b></p></td>
    </tr>
    <tr>
        <td width="3%"></td>
        <td width="94%">
<br>

<?php
require("config.php");
$add = &$HTTP_POST_VARS['edit_link'];
if (empty($edit_link)) {
?>
  <br><a href="index.php?pageid=5">Link oversigt</a>
<?php
} else {
    $id = &$HTTP_POST_VARS['id'];
    $url = &$HTTP_POST_VARS['url'];
    $beskrivelse = &$HTTP_POST_VARS['beskrivelse'];

    if (empty($url) OR empty($beskrivelse)) {
        echo '<font color="red"><b>Fejl!</b></font><br>Felterne markeret med en <font color="red">*</font> <u>skal</u> udfyldes!<br><br>
<a href="index.php?pageid=5"><b>Tilbage</b></a>';
    } else {
        mysql_connect($mysql_host, $mysql_user, $mysql_pw);
        mysql_select_db($mysql_db);

        $sql = "UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id='$id'";
        echo "DEBUG; $sql<br>";
        mysql_query($sql) or die(mysql_error());

        print "Hjemmesiden <b>\"$url\"</b> er nu tilføjet til databasen.";
?>
<br>
Gå til <a href="index.php?pageid=5"><b>Link Oversigt</b></a>
<?php
    }
}
?>

</td>
        <td width="3%"></td>
    </tr>
</table>
</p>
<br>
Avatar billede nielle Nybegynder
15. oktober 2007 - 17:26 #12
To måder at gøre det samme på :^)
Avatar billede nielle Nybegynder
15. oktober 2007 - 17:28 #13
Forresten... Når du skriver:

print "Hjemmesiden <b>\"$url\"</b> er nu tilføjet til databasen.";

så bliver jeg lidt i tviuvl om hvad du prøver på. En UPDATE-sætning opretter ikke noget i databasen, den ændre kun noget som allerede eksistere.

For at oprette nye data skal du bruge en INSERT INTO sætning i stedet.
Avatar billede Frederik Nybegynder
15. oktober 2007 - 17:30 #14
Nu har jeg prøvet at indsætte begge koder, men det er stadig den samme side som før der kommer frem.
Avatar billede nielle Nybegynder
15. oktober 2007 - 17:32 #15
Hvordan ser den udskrevne SQL-sætning ud?
Avatar billede Frederik Nybegynder
15. oktober 2007 - 17:45 #16
Der bliver ikke udskrevet noget.. Den kommer bare med siden med et link som før..
Avatar billede nielle Nybegynder
15. oktober 2007 - 18:00 #17
Så er det tid til at undersøge selve logikken med noget mere debugging:

#edit_ok.php#

<p align="center">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

    <tr>
        <td bgcolor="#7a9294" width="100%" colspan="3"><p align="center"><b>BLa bla</b></p></td>
    </tr>
    <tr>
        <td width="3%"></td>
        <td width="94%">
<br>

<?php
require("config.php");
$add = &$HTTP_POST_VARS['edit_link'];
if (empty($edit_link)) {
    echo "DEBUG: Det er ved første if-sætning at det fejler.<br>";
?>
  <br><a href="index.php?pageid=5">Link oversigt</a>
<?php
} else {
    $id = &$HTTP_POST_VARS['id'];
    $url = &$HTTP_POST_VARS['url'];
    $beskrivelse = &$HTTP_POST_VARS['beskrivelse'];

    if (empty($url) OR empty($beskrivelse)) {
        echo "DEBUG: Det er ved anden if-sætning at det fejler.<br>";
        echo '<font color="red"><b>Fejl!</b></font><br>Felterne markeret med en <font color="red">*</font> <u>skal</u> udfyldes!<br><br>
<a href="index.php?pageid=5"><b>Tilbage</b></a>';
    } else {
        mysql_connect($mysql_host, $mysql_user, $mysql_pw);
        mysql_select_db($mysql_db);

        $sql = "UPDATE linkdatabase SET url = '$url', beskrivelse = '$beskrivelse' WHERE id = $id";
        echo "DEBUG: $sql<br>";
        mysql_query($sql) or die(mysql_error());

        print "Hjemmesiden <b>\"$url\"</b> er nu tilføjet til databasen.";
?>
<br>
Gå til <a href="index.php?pageid=5"><b>Link Oversigt</b></a>
<?php
    }
}
?>

</td>
        <td width="3%"></td>
    </tr>
</table>
</p>
<br>
Avatar billede Frederik Nybegynder
15. oktober 2007 - 18:11 #18
DEBUG: Det er ved første if-sætning at det fejler.
Avatar billede nielle Nybegynder
15. oktober 2007 - 18:16 #19
Så er $edit_link nok tom... Hvor skulle den have fået en værdi henne?
Avatar billede Frederik Nybegynder
15. oktober 2007 - 18:35 #20
Det skulle den i admin.php i den post form der er der..
Avatar billede Frederik Nybegynder
15. oktober 2007 - 18:40 #21
Tror at jeg har fundet løsningen nu.. $add = &$HTTP_POST_VARS['edit_link'];
skulle have været $edit_link = &$HTTP_POST_VARS['edit_link'];

Tjekker lige...
Avatar billede nielle Nybegynder
15. oktober 2007 - 18:47 #22
Nogen speciel grund til at du bruger en masse energi på at lave kode, som vil holde op med at fungere når webhotellet opdatere til nyeste version af PHP...
Avatar billede Frederik Nybegynder
15. oktober 2007 - 18:49 #23
ØØhm.. hvad mener du??
Avatar billede nielle Nybegynder
15. oktober 2007 - 18:50 #24
Citat (http://www.php.net/manual/en/language.variables.predefined.php):

"Also, you'll notice how the older predefined variables ($HTTP_*_VARS) still exist. As of PHP 5.0.0, the long PHP predefined variable arrays may be disabled with the register_long_arrays directive."

... betydende:

HTTP_POST_VARS vil højest sandsynligvis ikke være slået til ... og hvis den er så er det på webhotellets nåde.
Avatar billede nielle Nybegynder
15. oktober 2007 - 18:52 #25
Eksperten besluttede sig for at inkludere )-tegnet i URL'en:

http://www.php.net/manual/en/language.variables.predefined.php
Avatar billede Frederik Nybegynder
15. oktober 2007 - 18:57 #26
Vil det så sige, at jeg skal bruge $_post istedet for $HTTP_POST_VARS ?
Avatar billede Frederik Nybegynder
15. oktober 2007 - 19:04 #27
Så det bliver:

$edit_link = $_POST['edit_link'];
if(empty($edit_link)) {
  ?>
  <br><a href="index.php?pageid=5">Link oversigt</a>
  <?php
  } else {

$id = $_POST['id'];
$url = $_POST['url'];
$beskrivelse = $_POST['beskrivelse'];
Avatar billede nielle Nybegynder
15. oktober 2007 - 19:05 #28
Lige præcis sådan :^)

Men skal du ds bruge $edit_link på et senere tidspunkt?

if (isset($_POST['edit_link'])) {
  ?>
  <br><a href="index.php?pageid=5">Link oversigt</a>
  <?php
  } else {

$id = $_POST['id'];
$url = $_POST['url'];
$beskrivelse = $_POST['beskrivelse'];
Avatar billede Frederik Nybegynder
15. oktober 2007 - 19:33 #29
Ikke andet end at skrive et link til en opdaterings siden hvis værdien er tom..
Avatar billede nielle Nybegynder
15. oktober 2007 - 19:39 #30
Den viste modifikation af koden er baseret på at $edit_link ikke skal bruges og at der derfor ikke er nogen grund til at tage den ud i en variabel.

Har du ellers fået det til at fungere nu?
Avatar billede Frederik Nybegynder
15. oktober 2007 - 20:12 #31
Ja, tror det virker.. Har skrevet lidt om på det, så der også er en delete funktion nu der også tjekkes i edit_ok.php, og har skrevet det sammen så det er lidt mere overskueligt. Der er lidt problemer med at få vist noget tekst og link, men kigger lidt videre på det.. Du kan bare smide et svar! Og tak for hjælpen!!
Avatar billede nielle Nybegynder
15. oktober 2007 - 20:13 #32
Svar :^)
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