2013-07-15 7 views
0

мне нужна помощь с моей MySQL запросов в PHPMySQL Вопросы PHP Запрос

Прежде чем я скажу больше я использую mysql_* функцию, я знаю, что они обесценились, однако только с PHP v5.5 и у меня есть PHP 5.3 установлен на мой сервер и другие функции mysql_* работают именно так.

Я пытаюсь вставить значения из формы в таблицу в форме submit, код находится в правильном месте, так как PHP отправляет электронное письмо, а echo - «отправленное письмо».

Это мой запрос:

mysql_query("INSERT INTO customers (
    name,email,telephone 
) VALUES (
    ".$_POST['name'].", 
    ".$_POST['email'].", 
    ".$_POST['telephone'].", 
)"); 

Это документ, он находится в:

<?php 

    // Database connect 
    $db_host  = 'localhost'; 
    $db_user  = 'redjaxco'; 
    $db_pass  = 'CORRECT PASSWORD'; 
    $db_database = 'redjaxco_website'; 

    $link = mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish a DB connection'); 

    mysql_select_db($db_database,$link); 
    mysql_query("SET names UTF8"); 

    $owner_email = "[email protected]"; 

    $headers = 'From:' . $_POST["email"]; 
    $subject = 'Online Form - '. $_POST["topic"]. " : " . $_POST["name"]; 
    $messageBody = ""; 

    if($_POST['topic']!='nope'){ 
     $messageBody .= '<p>Subject: ' . $_POST["topic"] . '</p>' . "\n"; 
     $messageBody .= '<br>' . "\n"; 
    } 
    if($_POST['name']!='nope'){ 
     $messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n"; 
     $messageBody .= '<br>' . "\n"; 
    } 
    if($_POST['email']!='nope'){ 
     $messageBody .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n"; 
     $messageBody .= '<br>' . "\n"; 
    }else{ 
     $headers = ''; 
    } 
    if($_POST['phone']!='nope'){   
     $messageBody .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n"; 
     $messageBody .= '<br>' . "\n"; 
    } 
    if($_POST['message']!='nope'){ 
     $messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n"; 
    } 

    if($_POST["stripHTML"] == 'true'){ 
     $messageBody = strip_tags($messageBody); 
    } 

    try{ 
     if(!mail($owner_email, $subject, $messageBody, $headers)) 
     { 
      throw new Exception('mail failed'); 
     } 
     else 
     { 
      mysql_query("INSERT INTO customers (
       name,email,telephone 
      ) VALUES (
       ".$_POST['name'].", 
       ".$_POST['email'].", 
       ".$_POST['telephone'].", 
      )"); 

      echo 'mail sent'; 
     } 
    }catch(Exception $e){ 
     echo $e->getMessage() ."\n"; 
    } 
?> 
+0

Что именно не работает? –

+0

Запрос не является, он не добавляет в таблицу – RedJax

+0

Просто потому, что вы используете 'ext/mysql' (это, возможно, не было * устаревшим * в версии 5.3, но его использование было, конечно, обескураженным) не означает вам следует избегать экранирования переменных. Ваш код широко открыт для SQL-инъекций и атак XSS. – eggyal

ответ

1

Не то, что я наслаждаюсь говорить это, но я бы сказал вам, чтобы добавить, обработку ошибок т.е. or die(mysql_error()) в ваш вопрос:

mysql_select_db($db_database,$link) or die(mysql_error()); 
mysql_query("SET names UTF8")or die(mysql_error()); 

Я даже не знаю, что делает второй запрос, но addin g приведет к понятной ошибке, с которой вы можете работать, по крайней мере.

EDIT

mysql_query("INSERT INTO customers (
       name,email,telephone 
      ) VALUES (
       '".$_POST['name']."', 
       '".$_POST['email']."', 
       '".$_POST['telephone']."' 
      )") or die(mysql_error()); 

EDIT-2

Хорошо, вы, вероятно, есть ошибки, превратились из по умолчанию, поэтому пишу это в верхней части ваших сценариев.

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

EDIT-3

if(!mail($owner_email, $subject, $messageBody, $headers)) 
     { 
      echo 'Email not sent'; 
     } 
     else 
     { 
     mysql_query("INSERT INTO customers (name, email, telephone 
         ) VALUES (
         '".$_POST['name']."', 
         '".$_POST['email']."', 
         '".$_POST['telephone']."') 
        ") or die(mysql_error()); 

      echo 'mail sent'; 
     } 
+0

Это работает ... Не тот запрос, который является проблемой, его запрос, который я разместил над всем файлом. – RedJax

+0

Ну, просто сделайте то же самое и добавьте 'или die (mysql_error()) к нему. Это был тот момент, который я пытался сделать. – samayo

+0

ничего не сделал – RedJax

1

Вы должны вложить свои строки в апострофы и устранить запятая в конце списка значений:

mysql_query("INSERT INTO customers (
      name,email,telephone 
     ) VALUES (
      '".$_POST['name']."', 
      '".$_POST['email']."', 
      '".$_POST['telephone']."' 
     )"); 
+0

Апострофы уже есть и устранение запятой не помогло – RedJax

+0

В вашем исходном посте апостории явно нет, и есть дополнительная запятая. Я не думаю, что тебе можно помочь. – cocogorilla

+0

Я извиняюсь, я смотрел на свой текущий код, который я тогда не редактировал, и апострофы там. – RedJax

3

С точки зрения отладки Обычный шаблон - распечатать текст SQL, прежде чем отправлять его в базу данных, примерно так:

$querytext = "INSERT INTO customers (
      name,email,telephone 
     ) VALUES (
      '".mysql_real_escape_string($_POST['name'])."', 
      '".mysql_real_escape_string($_POST['email'])."', 
      '".mysql_real_escape_string($_POST['telephone'])."', 
     )"; 
echo "querytext=" . $querytext; // display statement for debugging 
mysql_query($querytext) or die(mysql_error()); 

Проверьте, действительно ли утверждение действительно сработало или нет, и если это не так, получите какой-то результат, с которым вы можете работать, вместо того, чтобы вытащить д-р Эвил мизинец в угол-в-рот " Я просто предполагаю, что все пойдет по плану. Что?»

И, пожалуйста, сделайте себе одолжение и дезинфицировать те входы, что-то вроде этого:

mysql_real_escape_string($_POST['name']) 

Чтобы ответить на ваш вопрос, то наиболее вероятной причиной ваш запрос не удается, что строка литералы в вашем заявлении не заключены в кавычки ...

сравнения:

... VALUES (paul,[email protected],5551212) 

... VALUES ('paul','[email protected]','5551212') 

И санировать эти входы, чтобы иметь дело с именами, как 'O'Reilly

... VALUES ('O'Reilly','[email protected]','5551212') 

и более волнующе имени клиентов, как Маленький Бобби Tables ...

"Robert','',''); DROP TABLE customers; -- " 
+0

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

+0

Если вы не получаете эхо-запрос запроса, это может означать, что эта строка кода не выполняется, поэтому у вас есть проблема с потоком управления в достижении заявления на этой линии. Это обычная отладка. Добавьте инструкции echo после каждого условного выражения, чтобы узнать, где ваша логика принимает вас. – spencer7593

+0

Я думаю, что это связано с JS-кодом, который связан с ним, почему он не будет отвечать на echo – RedJax

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