2010-06-02 4 views
3

J'ai un site Web qui a une requête de mise à jour. Exemple.
Requête de mise à jour PHP MySQL

 
Table name -> myTable 
Table Content -> id(AI) 
       name --> myName 
       age --> 13 
       image --> (no values) 
       birthdate --> (no values) 

Je ne mettre en valeur nom et âge. En image et date de naissance, je n'ai rien mis.
Si je le modifier et le mettre à jour et je ne mets rien dans nom et âge, je ne mets que des valeurs dans l'image et date de naissance. La sortie est comme ça. (Ce ouput je voulais)

 
Table name -> myTable 
Table Content -> id(AI) 
       name --> myName 
       age --> 13 
       image --> myImage.jpg 
       birthdate --> Feb. 31, 2010 


Voici mon code:

 
<?php 
    //mysql connect... 
    //mysql select database... 
$sql = "UPDATE myTable SET name = '".$name."', age = '".$age."', image = '".$image."', birthdate"'$birthdate.."' WHERE id = $id"; 
mysql_query($sql); 
?> 

J'ai utilisé ce code, mais la sortie est:

 
Table name -> myTable 
Table Content -> id(AI) 
       name --> (no values) 
       age --> (no values) 
       image --> myImage.jpg 
       birthdate --> Feb. 31, 2010 


Ne hésitez pas à demander si vous ne comprenez pas ma question
Merci

Répondre

4

UPDATE laisse les colonnes telles quelles si vous n'incluez pas de nouvelles valeurs dans votre instruction UPDATE.

Vous devrez peut-être créer la variable $sql avec un code conditionnel qui examine ce que l'utilisateur a saisi, puis inclure une colonne uniquement si l'utilisateur lui a donné une valeur.

<?php 

$columns = array("name", "age", "image", "birthdate"); 
$set = array(); 
foreach ($columns as $col) { 
    if (isset($_GET[$col])) { 
     $set[] = "$col = '" . mysql_real_escape_string($_GET[$col]) . "'"; 
    } 
} 
$sql = "UPDATE myTable " 
if ($set) { 
    $sql .= " SET " . implode(",", $set); 
} 
$sql .= " WHERE id = " . (int) $id; 
+0

Merci. C'est ce dont j'ai besoin. – Jorge

+0

Il pourrait être préférable d'utiliser '! Empty ($ _ GET [$ col])' à la place de 'isset'. Si le formulaire a des entrées fixes (par exemple: les entrées ne sont pas ajoutées ou désactivées dynamiquement), les entrées vides seront traitées comme si une nouvelle valeur était fournie. –

+0

@Justin Johnson: Bon point. Assaisonner selon l'envie. :-) –

1

avez juste deux requêtes distinctes:

// update name and age 
$sql = "UPDATE myTable SET name = '$name', age = '$age' WHERE id = '$id'"; 

// Update image and birthday 
$sql = "UPDATE myTable SET image = '$image', birthdate = '$birthdate' WHERE id = '$id'"; 

En outre, vous pouvez simplement mettre toutes les variables à l'intérieur de la chaîne, car il est entre guillemets.

1

Si vous ne souhaitez pas modifier un champ, ne l'incluez pas dans la requête de mise à jour.

2

vous avez une erreur dans votre code--

$sql = "UPDATE myTable SET name = '".$name."', age = '".$age."', image = '".$image."', birthdate"'$birthdate.."' WHERE id = $id" 

devrait lire:

$sql = "UPDATE myTable SET name = '".$name."', age = '".$age."', image = '".$image."', birthdate = '".$birthdate."' WHERE id = $id" 

mais c'est probablement juste une faute de frappe. Êtes-vous sûr que les variables sont correctement définies? Essayez de faire écho à toutes les vars pour vous assurer. Vérifiez également que les colonnes n'ont pas de définition de données par défaut.

+0

me devança: date de naissance «date de naissance de $ .." ' – RobertPitt

+0

Merci. ^^. J'ai oublié le signe égal. – Jorge

0

Personnellement, je pense que ce genre sont cahiers pas fiables, surtout quand il se résume à transtypage etc.

Je vous recommande d'essayer et mettre en œuvre PDO ou quelque chose.

http://php.net/manual/en/book.pdo.php

othewise, l'erreur est birthdate'".$birthdate."' sorcière doit être birthdate = '".$birthdate."'