Der Platz für die Übernahme der ID ist korrekt. Wenn du aber schon die Kurzform der Super Globals verwendest, solltest du aus $HTTP_POST_VARS auch $_POST machen.
Nun, der Fehler in der SQL-Anweisung liegt nicht bei der $is, sondern daran, wie du die User-ID einbindest.
Versuche also mal anstelle
Code: Alles auswählen
$visited = "UPDATE mat_restaurant SET wasthere=CONCAT(`wasthere`, '$userdata[username]') WHERE id=$id";
dieses hier:
Code: Alles auswählen
$visited = "UPDATE mat_restaurant SET wasthere = CONCAT(`wasthere`, '" . $userdata['username'] . "') WHERE id=" . (int) $id;
Das (int) vor $id ist ein zusätzliches Sicherheitfeature, da damit der Wert in $id auch wirklich als Zahl dargestellt wird.
Um diese SQL-Anweisung aber maximal abzusichern, sollte sie in diese Form geändert werden:
Code: Alles auswählen
$sql_wasthere = str_replace("\'", "''", 'wasthere' . $userdata['username']);
$visited = "UPDATE mat_restaurant SET wasthere = '" . $sql_wasthere . "') WHERE id = " . (int) $id;
Damit werden einfache Hochkommas in Usernamen nicht zum SQL-Killer und auch SQL-Injections verlieren so ihre Wirkung.
Ebenso ist der Code so viel besser zu lesen und später auch einfacher zu erweitern.
Das gesamte Script würde ich also eher so erstellen:
Code: Alles auswählen
mysql_connect('xyz', 'xyz', 'xyz');
// Här väljer vi vilken databas vi ska använda.
mysql_select_db('xyz');
$id = (isset($_GET['id'])) ? intval($_GET['id']) : intval($_POST['id']); //Get the ID
if($id == '')
{
die 'Välj restaurang!'; //If no id is set, default to errormessage
}
$activation = $_GET['aktivering'];
if($activation == '1')
{
$act = 'UPDATE mat_restaurant SET activated = ' . true . ' WHERE id = ' . (int) $id;
mysql_query($act) or die(mysql_error());
echo 'Aktiverat!';
}
if(isset($_POST['submit']) AND $_POST['submit'] == 'Jag har varit där!')
{
$sql_wasthere = str_replace("\'", "''", 'wasthere' . $userdata['username']);
$visited = "UPDATE mat_restaurant SET wasthere = '" . $sql_wasthere . "' WHERE id = " . (int) $id;
mysql_query($visited) or die(mysql_error());
echo 'Tack!';
}
$result = mysql_query('SELECT * FROM mat_restaurant WHERE id = ' . (int) $id);
$viewsupdate = 'UPDATE mat_restaurant SET views = views + 1 WHERE id=' . (int) $id;
mysql_query($viewsupdate) or die(mysql_error());
$r = mysql_fetch_array($result);
Also alles mit möglichst einfachen Hochkommas (ist schneller als doppelte Hochkommas, auch wenn man das bei diesem sehr überschaubaren Script nicht sofort merkt) und die $id gleich am Anfang aus $_GET, bzw. $_POST übernehmen, damit man die ID aus einer URL gleichwohl aus einem Formular auslesen kann und sich über die Quelle später keine Gedanken mehr machen muss (Merke. $_GET = Daten einer URL, $_POST = Daten eines Formulars - zumindest im Groben...).