2012-04-27 8 views
1

Lorsque vous essayez d'insérer ou de mettre à jour, rien ne va dans la base de données. Ceci est la mise en page de tableInsérer/mettre à jour la requête

(
`id` int(11) NOT NULL AUTO_INCREMENT, 
`user_id` int(11) NOT NULL, 
`thesis_Name` varchar(200) NOT NULL, 
`abstract` varchar(200) NOT NULL, 
`complete` int(2) NOT NULL DEFAULT '1', 
PRIMARY KEY (`id`), 
KEY `user_id` (`user_id`) 
) 

Comme vous pouvez voir l'ID est la clé unique. L'id_utilisateur est ce que la session regarde. Je veux qu'il soit possible pour l'user_id d'avoir deux lignes donc seul l'id devrait être unique et par conséquent cela devrait être la clé que l'on cherche à insérer ou à mettre à jour. C'est ce que j'utilise:

if (empty($err)) { 
     $id= mysql_real_escape_string($_POST['id']); 
     $thesis_Name = mysql_real_escape_string($_POST['thesis_Name']); 
     $abstract = mysql_real_escape_string($_POST['abstract']); 

$user_id = intval($_SESSION['user_id']); 
$query = sprintf(" 
    INSERT INTO 
    `thesis`(`id`,`user_id`, `thesis_Name`, `abstract`) 
    VALUES 
    ('%s','%s', '%s', '%s') 
    ON DUPLICATE KEY UPDATE 
    `thesis_Name` = VALUES(`thesis_Name`), 
    `abstract` = VALUES(`abstract`) 
     ", $id, $user_id, $thesis_Name, $abstract); 

S'il y a noway autour d'elle alors le user_id peut être unique aussi, seulement 1 ligne par utilisateur

+2

Qu'est-ce qui se passe? Des erreurs sont-elles signalées? Quelle est votre question concrète? Ou devrions-nous juste rejoindre deviner avec vous? – hakre

+8

Pour l'amour de Dieu, utilisez des requêtes paramétrées –

+3

Si vous ne savez pas ce que Keith veut dire, ou pourquoi il le dit, lisez: [Bobby Tables] (http://bobby-tables.com) – eggyal

Répondre

1

Pouvez-vous nous montrer la requête finale? Avec quelque chose comme ça après $query = sprintf(...):

echo $query 

Peut-être d'une simple citation dans votre $abstract? Vous pouvez utiliser mysql_real_escape_string() pour advoid il:

$thesis_Name = mysql_real_escape_string($thesis_Name); 
$abstract = mysql_real_escape_string($abstract); 
0
  1. pour obtenir une erreur de MySQL, vous devez utiliser la fonction mysql_error().
  2. vous devez échapper les chaînes que vous placez dans la requête.
  3. il n'y a pas d'utilisation pour le sprintf() ici.

.

$user_id  = intval($_SESSION['user_id']);  
$id   = mysql_real_escape_string($_POST['id']); 
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']); 
$abstract = mysql_real_escape_string($_POST['abstract']); 

$query  = "INSERT INTO thesis (id, user_id, thesis_Name, abstract) 
       VALUES ('$id','$user_id', '$thesis_Name', '$abstract') 
       ON DUPLICATE KEY UPDATE 
        `thesis_Name` = VALUES(`thesis_Name`), 
        `abstract` = VALUES(`abstract`)"; 

mysql_query($query) or trigger_error(mysql_error()." ".$query); 

si vous utilisez les fonctions mysql *.

Cependant, cette approche est tout à fait inhabituelle
généralement nous décidons que requête à utiliser en fonction de la logique de PHP, comme celui-ci

if ($_POST['id']) { 
    $query = "INSERT..." 
} else { 
    $query = "UPDATE..." 
} 
+0

merci pour votre aide. avec ceci il ajoute l'insertion mais ajoute une autre rangée (avec same_id et id différent) au lieu de mettre à jour ce que j'ai inséré – user1296762

+0

bien, au début j'ai pris l'id d'utilisateur comme clé unique. –

+0

donc avec le code supérieur maintenant, une deuxième ligne n'est pas ajoutée mais les données ne changent pas. Lorsque vous appuyez sur Enregistrer, cela me redirige vers la bonne page. suggérez-vous d'essayer votre deuxième morceau de code alors? – user1296762