2010-02-07 3 views
2

J'essaie de créer un formulaire de mise à jour. La partie de mise à jour fonctionne déjà, mais il vaudrait mieux que je mette un bouton de vue pour que les utilisateurs ne rentrent pas les données pour les mettre à jour.Comment remplir une zone de texte HTML avec des données MySQL

Je travaille sur ce code, il y a un bouton dans le formulaire html avec le code suivant comme action de formulaire. Son travail consiste à remplir les zones de texte avec les données appropriées en fonction du numéro de téléphone entré.

<?php 
    $con = mysql_connect("localhost","root",""); 
    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db("hospital", $con); 

    $result = mysql_query("SELECT * FROM t2 WHERE TELNUM='{$_POST["telnum"]}'"); 

    while ($row = mysql_fetch_array($result)) 
    { 

    <form> 
     <input name="lname" type="text"<?php echo $result["lname"];"> 
    </form> 
?> 

Quel est le problème avec mon code? Je suis toujours un débutant en PHP.

+0

Qu'est-ce qui ne va pas? Il contient une vulnérabilité d'injection SQL? –

Répondre

8

Votre HTML ne semble pas correct; la valeur d'un champ de saisie de texte est spécifiée avec l'attribut value, par ex.

<input name="lname" type="text" value="<?php echo(htmlspecialchars($row['lname'])); ?>" /> 

Les données de ligne sont présents dans la table de hachage $row; $result est juste un pointeur vers le tampon de résultat MySQL. En outre, il vous manque une balise ?> après l'instruction echo, et la dernière ?> est égarée. Il semble également n'y avoir aucune accolade fermante pour la boucle while

Notez l'utilisation de htmlspecialchars() pour échapper des entités HTML dans le texte. Cela empêchera le texte de la base de données de fermer par inadvertance l'étiquette et de répandre des déchets partout dans votre code HTML (et d'empêcher les entrées malveillantes des utilisateurs ayant un effet).

Dans l'ensemble, la bonne solution pourrait ressembler à:

<?php 
$con = mysql_connect('localhost', 'root', ''); 
if(!$con) { 
    die('Could not connect: ' . mysql_error()); 
} else { 
    mysql_select_db('hospital', $con); 
    $result = mysql_query("SELECT * FROM t2 WHERE TELNUM='{$_POST["telnum"]}'"); 
    while($row = mysql_fetch_array($result)) { 
     ?> 
     <form> 
      <input name="lname" type="text" value="<?php echo(htmlspecialchars($row['lname'])); ?>" /> 
     </form> 
     <?php 
    } 
} 
?> 

Enfin, pour ne pas deviner que vous, mais soyez prudent sur l'insertion des valeurs arbitraires à partir des données fournies par l'utilisateur (comme $_GET et $_POST) dans SQL requêtes - un utilisateur malveillant pourrait utiliser cela pour intentionnellement construire des requêtes que vous ne voulez pas exécuter, ou un utilisateur non malveillant pourrait raisonnablement fournir des données qui casse involontairement le SQL, provoquant une erreur inattendue (ou encore, une forme de comportement inconnu)). Jetez un oeil à la SQL injection page sur le site Web PHP comme un bon point de départ pour en savoir plus à ce sujet.

5

Il devrait être:

<input name="lname" type="text"<?php echo $row['lname']; 

Non

<input name="lname" type="text"<?php echo $result['lname']; 

$ result est juste que - le résultat booléen de l'appel mysql_query().

$ row est la donnée réelle à chaque itération de la boucle.

+0

Et ce que Munch dit ci-dessous, la "valeur" manquante. –

+1

$ result n'est pas booléen, c'est une ressource de résultat mysql. – Alex

+0

C'est une ressource en cas de succès, mais un booléen (faux) en cas d'échec. –

4

Un certain nombre de choses ne vont pas ici.

  1. Vous ouvrez et fermez les balises PHP qui ne correspondent pas. Vous pouvez les ouvrir au début et les fermer en bas comme vous le faites, vous n'avez qu'à faire écho au HTML en faisant cela.

  2. L'entrée prend un attribut de valeur que vous pouvez utiliser pour prédéfinir sa valeur.

  3. Le tableau dont vous voulez extraire votre tableau récupéré MySQL est $row, et non $result.

  4. Il serait utile de fermer votre boucle while.

  5. Il serait bon pour vous d'échapper à la sortie, en fonction de ce qui est produit.

    while ($ row = mysql_fetch_array ($ result)) { echo " "; }

0

Pourquoi htmlspecialchars plutôt htmlentities, j'utilise toujours htmlentities.

Questions connexes