2010-08-12 7 views
1

Я изучаю php через php и mysql в голове, и я занимаюсь простейшим скриптом php: данные из формы вставляются в базу данных mysql. Я изменил пример из второй главы, чтобы использовать его в своей собственной форме и db, но я не смог заставить db принять все, что я пишу в форму.Почему эта форма не обновляет базу данных?

Где ошибка?

Вот скрипт:

<!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> 

А вот 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> 

В MySQL я побежал:

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

Однако информация не отображается на PHPMyAdmin. Зачем?

+0

У вас есть сообщение об ошибке? Появляется ли ваше сообщение о успехе? – jasonbar

+0

Вы пытались изменить запятую от 'to '? – Iznogood

+0

Я работаю с gedit в apache, как я могу заставить его показывать сообщения об ошибках? – andandandand

ответ

2

Глядя на HTML, </form> находится за пределами тега </body>. Измените это:

</form> 
</body> 

Затем вам нужно удалить <form>, который прямо под <body> тега, так как у вас уже есть позже.

Как только вы вносите эти изменения, все остальное выглядит так, как будто оно должно работать нормально.

Buena Suerte!

+0

Спасибо, это решило проблему. – andandandand

4

У вас есть форма, вложенная внутри другой формы. Я бы начал там.

Редактировать: Вероятно, происходит то, что первая (пустая) форма - это то, что отправляется. Поскольку он отправляется на ту же страницу formbeta2.html, ваш PHP и SQL никогда не запускаются. Пожалуйста, ответьте на вопрос в моем комментарии, и мы можем помочь дальше оттуда.

+0

действительно. Две формы и одна Iznogood

+0

Спасибо, я не понял вложенную форму. – andandandand

+0

Я взял его, но он все еще не работает. Я перефразирую вопрос и отправлю его. – andandandand

0

Здесь я бы хотел отделить бизнес-логику и презентацию (код PHP и HTML). Ввод бизнес-логики внутри HTML-кода обычно является плохим.

Существует простой трюк, который мне нравится использовать: на PHP вы можете очень легко создавать файлы шаблонов. Очень базовая система шаблонов может быть:

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

Кроме того, помните, что trusing на входе пользователя это плохая идея, так никогда когда-либо заменить пользователь поставлял данные непосредственно в строку с SQL. В случае с MySQL используйте mysql_real_escape_string().

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

Этот метод является одним из самых важных в веб-безопасности.

Смежные вопросы