2017-08-16 1 views
-1

Salut actuellement obtenir une discordance avec Id, mais ne peut pas trouver pourquoi il ne reçoit pas l'ID de la table (par exemple 0,1,2, etc), la page d'affichage leur montre bien aller les yeux croisés en le regardant. Est-ce que la table peut aussi être rangée en code? semble désordonné avec tous les tags <?php ?>. En utilisant mysql 5.5, autant que je sache, utiliserComment résoudre cette erreur MYSQL PHP Update Function version

Erreur:

Could not able to execute UPDATE weightsmeasures SET 1 = 'dszfxc',2 = 'Kilograms',10 = 'Litre',11 = 'Litre',12 = 'Ton',13 = 'vdd',14 = 'mega' WHERE id = 14. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 = 'dszfxc',2 = 'Kilograms',10 = 'Litre',11 = 'Litre',12 = 'Ton',13 = 'vdd',14 ' at line 1

forme d'entrée index.php

<div> 
     <?php  $result = tablename(weightsmeasures); ?> 
     <form method="post" action="update.php"> 
      <div class="col-8"> 
      <?php while($row = mysqli_fetch_array($result)) { 
      echo "<tr>"; 
      echo "<td>" . $row['id'] . "</td>"; ?> 
       <td> 
        <input class="form-control" type="text" value="<?php echo $row['WeightorMeasure']; ?>" id="<?php echo $row['id']; ?>" name="<?php echo $row['id']; ?>"> 
       </td> 
      <?php 
      echo "</tr>"; 
       } 
      ?> 
      </div> 
      <input type="submit" value="Update"> 
     </form> 
     </div> 

update.php

$id = $_POST['id']; 
$sql = "UPDATE weightsmeasures SET"; 
$fieldValuePairs = array(); 
foreach($_POST as $key => $value) 
if($key != 'id') 
     $fieldValuePairs[] = "$key = '$value'"; 
$sql .= " ". implode(',', $fieldValuePairs)." WHERE id = $id"; 

Cordialement

+1

** AVERTISSEMENT **: Lorsque vous utilisez 'mysqli' vous devriez utiliser [requêtes paramétrées] (http://php.net/manual/fr/mysqli.quickstart.prepared-statements.php) et [' bind_param' ] (http://php.net/manual/fr/mysqli-stmt.bind-param.php) pour ajouter des données utilisateur à votre requête. ** N'utilisez PAS ** l'interpolation ou la concaténation de chaîne pour y parvenir car vous avez créé un [bogue d'injection SQL] grave (http://bobby-tables.com/). ** NE JAMAIS ** mettre directement dans une requête les données utilisateur '$ _POST',' $ _GET' ou ** tout **, cela peut être très dangereux si quelqu'un cherche à exploiter votre erreur. – tadman

+0

Note: L'interface orientée objet de 'mysqli' est significativement moins verbeuse, rendant le code plus facile à lire et à auditer, et n'est pas facilement confondue avec l'interface' mysql_query' obsolète. Avant de vous investir trop dans le style procédural, cela vaut la peine de changer. Exemple: '$ db = new mysqli (...)' et '$ db-> prepare (" ... ")' L'interface procédurale existe est un artefact de l'ère PHP 4 lorsque l'API 'mysqli' a été introduite et ne devrait pas être utilisée dans nouveau code. – tadman

Répondre

0

est ici un cas où vous devriez lire le message d'erreur attentionné y, puis relisez-le.

Il dit votre requête ressemble à ceci:

UPDATE weightsmeasures SET 1 = 'dszfxc', 
          2 = 'Kilograms', 
          10 = 'Litre', 
          11 = 'Litre', 
          12 = 'Ton', 
          13 = 'vdd', 
          14 = 'mega' 
WHERE id = 14 

Huh? Il semble que les clés de votre instruction foreach sont des nombres. Pour que cela fonctionne, ils doivent être des noms de colonnes.

Même si vous pouvez obtenir ce que cela fonctionne, vous chatouillez la queue du dragon en prenant les données de la variable $_POST sans le vérifier. Utilisez votre moteur de recherche préféré pour rechercher "little johnny droptables".