2013-08-30 4 views
0

Я довольно новичок в PHP, и я пытаюсь сохранить входные данные от пользователя в базе данных mysql. Я последовал за учебником онлайн о том, как это сделать, но каждый раз, когда я ввожу информацию о пользователе, веб-сайт говорит мне, что это не удалось. Единственное, о чем я могу думать, это имя хоста (я скопировал и вложил его из phpadmin). Пожалуйста, дайте мне знать, если что-то не так.Сохранение ввода от пользователя в базу данных

contact.html

<section id="mid_section"> 
       <div id="boxes"> 
        <h1> 
         Leave your information here for a quick reponse: 
        </h1> 
        <br/> 
        <form id="myform" action="userinfo.php" method="post"> 
         Name:<input type="text" value="name"> 
         Email:<input type="email" value="email"> 
         Phone:<input type= "tel" value="phone(opt)"> 
         <button id="sub">Submit</button> 
        </form> 

db.php

<?php 
    $conn = mysql_connect('custsql.eigbox.net','username','password'); 
    $db= mysql_select_db('visitors'); 
?> 

userinfo.php

<?php 
    include_once('db.php'); 

    $name =$_POST['name']; 
    $email =$_POST['email']; 
    $phone =$_POST['phone']; 

    if(mysql_query("INSERT INTO users (name,email,phone) VALUES ('$name','$email','$phone')")) 
    echo"successfully inserted"; 
    else 
    echo "failed"; 
?> 

myscript.js

$("#sub").click(function(){ 

    $.post($("#myform").attr("action"), $("#myform:input").serializeArray(), function(info){$("#result").html(info);}); 
    }); 

$("#myform").submit(function(){ 
    return false; 
    }); 
+0

Ваш код невероятно легко взломать. Узнайте, как дезинфицировать переменные и прекратить использование 'mysql_ *', поскольку он устарел. Используйте 'mysqli_ *' или 'PDO'. Есть ли конкретное сообщение об ошибке, которое вы можете указать? Мы не можем волшебным образом находить ошибки, если это явно очевидно. –

+0

У вас есть собственная база данных mysql? – bfavaretto

+0

да У меня есть моя база данных sql @bfavaretto – jorgeAChacon

ответ

4

Как вы могли бы быть новичком в php, с одной стороны, хорошо следить за учебниками , однако использование правильного источника может быть частой катастрофой.

Когда вы используете такие функции, как mysql_select_db и mysql_query, это basiaclly означает, что вы используете устаревший стиль mysql.

Если вы заходите в официальную документацию по php и ищете метод mysql, он расскажет вам об ее устаревании.

Проблема здесь, однако, не в том, как вы взаимодействуете с базой данных, ваш стиль кодирования по-прежнему работает, и многие люди все еще делают это именно так.

Я просто говорю вам, как новичок, что вместо функций mysql_ люди склонны поддерживать mysqli и PDO. Рассматривайте их как своих будущих друзей.

Что касается вашей проблемы, я считаю, что все в порядке, за исключением того, что функции mysql_query выглядят странно. Попробуйте следующий код вместо вашего оператора запроса

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".$name."','".$email."','".$phone."')")) 

или по соображениям безопасности даже лучше

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".mysql_real_escape_string($name)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($phone)."')")) 

Если это не так, и вы все равно получите заявление ОШИБКИ «Нормально», то вам нужно сделать очень мало отладки и люди здесь смогут помочь вам

Итак, вам нужно будет использовать следующие вместо того, что у вас есть сейчас

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".mysql_real_escape_string($name)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($phone)."')")) { 
    echo 'Success!' 
} else { 
    echo mysql_error(); 
    exit; 
} 

Посмотрим, что получится

+0

Спасибо за рекомендации по безопасности. Я обновил все, и теперь я получаю это сообщение: невозможно подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2). Я пробовал использовать localhost как хост, а также custsql. eigbox.net. – jorgeAChacon

+0

Ну, это, вероятно, означает, что 'mysqld' должен быть запущен для' mysql.sock' для создания и доступа. Вам нужно будет проверить, запущен ли он. Я думаю, вам нужно обратиться к этому вопросу http://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq или найти аналогичные , Удачи! – Davit

1

Сначала используйте имя для каждого атрибута формы. Так, contact.html будет

<form id="myform" action="userinfo.php" method="post"> 
         Name:<input type="text" value="name" name='name'> 
         Email:<input type="email" value="email" name='email'> 
         Phone:<input type= "tel" value="phone(opt)" name='phone'> 
         <button id="sub">Submit</button> 
</form> 

Использование mysqli_ * вместо mysql_ *, как это осуждается. Вы также можете использовать PDO. Подробнее о: mysqli_*

Отфильтруйте данные перед их вставкой в ​​базу данных. Итак, userinfo.php будет выглядеть так:

include_once('db.php'); 

$name = mysqli_real_escape_string($db, $_POST['name']); 
$email = mysqli_real_escape_string($db,$_POST['email']); 
$phone = mysqli_real_escape_string($db,$_POST['phone']); 

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".$name."','".$email."','".$phone."')")) 
echo"successfully inserted"; 
else 
echo "failed"; 
+0

Я сделал все, как вы объяснили, и теперь у меня есть следующая ошибка: «Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Обратитесь к администратору сервера и сообщите об этом время, в которое произошла ошибка, и все, что вы могли бы сделать, что могло вызвать ошибку. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера. " – jorgeAChacon

+0

можете ли вы поделиться кодом? – Debashis

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