2010-08-12 8 views
1

J'apprends php par php et mysql de tête first et je joue avec le plus simple des scripts php: les données d'un formulaire sont insérées dans une base de données mysql. J'ai modifié l'exemple du chapitre deux pour l'utiliser sur mon propre formulaire et db, mais je n'ai pas réussi à faire en sorte que le db accepte tout ce que j'écris dans le formulaire.Pourquoi ce formulaire ne met-il pas à jour la base de données?

Où est l'erreur?

Voici le script php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Evaluaciones</title> 
</head> 
<body> 
    <h2>Evaluaciones</h2> 

<?php 
    $nombre_apellido = $_POST['nombreYapellido']; 


    $dbc = mysqli_connect('localhost', 'root', 'password', 'evaluaciones') 
    or die('Error connecting to MySQL server.'); 

    $query = "INSERT INTO `evaluaciones_cursos` (nombre_apellido) " . 
    "VALUES ('$nombre_apellido')"; 




    $result = mysqli_query($dbc, $query) 
    or die('Error querying database.'); 

    mysqli_close($dbc); 

    echo 'Gracias por llenar el formulario .<br />'.$nombre_apellido; 

?> 

</body> 
</html> 

Et voici le formulaire html

formbeta2.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html> 

<head> 

    <meta http-equiv="Content-Type" 
     content="text/html; charset=ISO-8859-1" /> 

    <title>Evaluaci&oacute;n de Curso</title> 


    <style type="text/css"> 
    body { 
     background-color: #CC7722; 
     margin-left:20%; 
     margin-right:20%; 
     border:3px dotted gray; 
     padding: 10px 10px 10px 10px; 
     font-family:sans-serif; 

    } 


    .tabla img { 
     width:100%; 
    } 

</style> 

</head> 

<body> 
<form> 






<img src='http://img690.imageshack.us/img690/4338/softrain2.jpg' width="408" height="123"border='0'/> 








<h1>Evaluaci&oacute;n</h1> 


<p>Por favor, tome unos minutos para llenar esta evaluaci&oacute;n. </p> 

<p> </p> 

<form action="script2.php" method="POST"> 

    <p> 

     <!--h3>Info Personal</h3--> 
     <table> 


     <tr><td>Nombre y Apellido:</td> <td> <input type="text" name="nombreYapellido" value="" /> </td></tr> 



     </table> 

     <input type="submit" value="Enviar Evaluaci&oacute;n"/> 


</body> 

</form> 

</html> 

sur MySQL J'ai couru:

CREATE TABLE `evaluaciones_cursos` (
`nombre_apellido` VARCHAR(60) 
) 

Pourtant, l'info ne montre pas sur phpmyadmin. Pourquoi?

+0

Un message d'erreur s'affiche-t-il? Votre message de réussite apparaît-il? – jasonbar

+0

Avez-vous essayé de changer les virgules de 'à '? – Iznogood

+0

Je travaille avec gedit dans apache, comment puis-je le faire afficher des messages d'erreur? – andandandand

Répondre

2

En regardant le code HTML, le </form> est en dehors du tag </body>. Changer cela:

</form> 
</body> 

Ensuite, vous devez retirer le <form> qui est juste sous l'étiquette <body> puisque vous l'avez déjà plus tard.

Une fois ces modifications effectuées, tout le reste semble fonctionner correctement.

Buena Suerte!

+0

Merci, cela a résolu le problème. – andandandand

4

Vous avez un formulaire imbriqué dans un autre formulaire. Je commencerais là. Edit: Ce qui se passe probablement, c'est que la première forme (vide) est ce qui est soumis. Comme il soumet à la même page formbeta2.html, votre PHP et SQL ne sont jamais exécutés. Veuillez répondre à la question dans mon commentaire et nous pouvons vous aider à partir de là.

+0

en effet. Deux Iznogood

+0

Merci, je n'ai pas réalisé la forme imbriquée. – andandandand

+0

Je l'ai sorti, mais ça ne marche toujours pas. Je vais reformuler la question et la rediffuser. – andandandand

0

Où je voudrais commencer est de séparer la logique métier et la présentation (le code PHP et le code HTML). Mettre une logique métier dans le code HTML est généralement une mauvaise idée.

Il ya un truc simple que j'aime utiliser: en PHP, vous pouvez très facilement créer des fichiers de modèles. Un système de modèle très basique peut être:

function render($file, $variables) { 
    ob_start(); 
    extract($variables); 
    if(file_exists($file)) { 
    include $file; 
    } 
    return ob_end_clean(); 
} 

Aussi, rappelez-vous que trusing dans l'entrée utilisateur est une mauvaise idée, donc jamais fourni par l'utilisateur jamais remplacer les données directement dans la une chaîne SQL. Dans un cas de MySQL, utilisez mysql_real_escape_string().

$sql = 'INSERT INTO table(col) VALUES(\'' . mysql_real_escape_string($value) . '\');' 

Cette technique est l'une des choses les plus essentielles en matière de sécurité Web.

Questions connexes