2009-05-04 4 views
0

J'essaie d'afficher des informations à partir d'une ligne mysql sur cette page. J'utilise $ _GET, car l'identifiant est inclus dans le lien vers la page: www.example.com/page.php?id=1 mais il renvoie cette erreur:problème de syntaxe mysql

Erreur: Vous avez une erreur dans votre Syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de '=' 1 '' à la ligne 1

Est-ce que quelqu'un sait comment résoudre ce problème?

Code

ci-dessous:

<?php 

    $username="xxx"; 
    $password="xxx"; 
    $database="xxx"; 
    mysql_connect(localhost,$username,$password); 
    @mysql_select_db($database) or die("Unable to select database"); 


include 'library/config.php'; 
include 'library/opendb.php'; 

if(isset($_GET['id'])) 
{ 
    $query = "SELECT id, title, content, contactname, contactemail, contactnumber ". 
      "FROM vacancies". 
      "WHERE id = '{$_GET['id']}'"; 
    $result = mysql_query($query) or die('Error : ' . mysql_error()); 
    list($id, $title, $content, $contactname, $contactemail, $contactnumber) = mysql_fetch_array($result, MYSQL_NUM); 

    $content = htmlspecialchars($content); 
} 

if(isset($_POST['update'])) 
{ 
    $id = $_POST['id']; 
    $title = $_POST['title']; 
    $content = $_POST['content']; 
    $contactname = $_POST['contactname']; 
    $contactemail = $_POST['contactemail']; 
    $contactnumber = $_POST['contactnumber']; 

    if(!get_magic_quotes_gpc()) 
    { 
     $title = addslashes($title); 
     $content = addslashes($content); 
     $contactname = addslashes($contactname); 
     $contactemail = addslashes($contactemail); 
     $contactnumber = addslashes($contactnumber); 
    } 

    // update the article in the database 
    $query = "UPDATE vacancies 
      SET title = '$title', content = '$content', contactname = '$contactname', contactemail = '$contactemail', contactnumber = '$contactnumber'". 
     "WHERE id = '$id'"; 
    mysql_query($query) or die('Error : ' . mysql_error()); 

    // then remove the cached file 
    $cacheDir = dirname(__FILE__) . '/cache/'; 
    $cacheFile = $cacheDir . '_' . $_GET['id'] . '.html'; 

    @unlink($cacheFile); 

    // and remove the index.html too because the file list 
    // is changed 
    @unlink($cacheDir . 'index.html'); 

    echo "<b>Job Entry: '$title' updated</b>"; 

    // now we will display $title & content 
    // so strip out any slashes 
     $title = stripslashes($title); 
     $content = stripslashes($content); 
     $contactname = stripslashes($contactname); 
     $contactemail = stripslashes($contactemail); 
     $contactnumber = stripslashes($contactnumber); 

} 

include 'library/closedb.php'; 
?> 

Répondre

0

Essayez ceci:

$query = "SELECT id, title, content, contactname, contactemail, contactnumber ". 
     "FROM vacancies ". 
     "WHERE id = '".$_GET['id']."'"; 

J'essaie toujours de laisser les variables de mes chaînes, il suffit de les ajouter dans des périodes, je trouve cela élimine beaucoup de confusion.

+0

Merci Kyle, Problème résolu! Je n'ai jamais pensé à mettre le $ _GET là-dedans, et maintenant c'est tout à fait logique! – user96828

+0

.. ça ne fait pas de différence ... – Louis

+0

Mon plaisir. En outre, comme quelques personnes ci-dessous ont dit, vous devriez toujours échapper le contenu soumis par l'utilisateur avec mysql_real_escape_string() pour aider à prévenir l'injection mysql. Changez simplement $ _GET ['id'] en mysql_real_escape_string ($ _ GET ['id']). – Kyle

0

Un problème:

$query = "UPDATE vacancies 
      SET title = '$title', content = '$content', contactname = '$contactname', contactemail = '$contactemail', contactnumber = '$contactnumber'". 
     "WHERE id = '$id'"; 

résultats dans aucun espace entre la dernière colonne et la clause WHERE. Changer à:

$query = "UPDATE vacancies 
      SET title = '$title', content = '$content', contactname = '$contactname', contactemail = '$contactemail', contactnumber = '$contactnumber' ". 
     "WHERE id = '$id'"; 

ou mon format préféré:

$query = <<<END 
UPDATE vacancies 
SET title = '$title', 
    content = '$content', 
    contactname = '$contactname', 
    contactemail = '$contactemail', 
    contactnumber = '$contactnumber' 
WHERE id = '$id' 
END; 

Note: Vous devriez vraiment échapper aux champs à l'aide mysql_real_escape_string().

0

Retirez les guillemets autour

{$_GET['id']} 

et

$id 

dans toutes vos requêtes.

Votre identifiant est de type entier, je suppose, qui ne peut pas prendre une version citée ou il tente de faire correspondre la clé entière à la chaîne « 1 »

- modifier cette ligne

$result = mysql_query($query) or die('Error : ' . mysql_error()); 

à

$result = mysql_query($query) or die('Error : ' . mysql_error() . "\n\n" . $query); 

Ensuite, vous pouvez voir exactement ce que la requête va dans le DB. Ce que vous pouvez ensuite poster ici pour nous de voir.

s'il vous plaît aussi afficher un

describe <tablename>; 
+0

hmmm, je suis assez nouveau à tout cela, je l'ai fait, et aussi ce que le cletus a suggéré, mais pas de joie. Merci pour votre aide d'autres suggestions? – user96828

+0

mis à jour pouvez-vous faire ce que j'ai demandé. Merci – Louis

+0

Merci mec, j'ai essayé ce que Kyle a suggéré et il a semblé fonctionner. Merci tas pour votre aide! – user96828