2015-12-03 3 views
0

Я загрузил этот сценарий «подписаться на нашу рассылку» от here.Модифицированная форма PHP не работает

Скрипт содержит форму и базу данных MYSQL с 6 полями: id, email, name, date_subscribe, date_unsubscribe и status.

Форма проста: наберите свой адрес электронной почты, введите свое имя и подпишитесь.

Мне нужно внести изменения в эту форму/базу данных, чтобы добавить дополнительное поле. Я вызываю promotion. Я отредактировал базу данных mySQL и добавил promotion как varchar (250) после status.

Я изменил скрипт PHP, чтобы включить это новое поле, но когда я отправляю форму, содержимое в новом поле promotion не добавляется в базу данных.

Я проверил код и сформировал несколько раз, и я не вижу проблемы.

Это форма HTML после модификации (мои изменения отмечены):

<!DOCTYPE html> 
<!--[if lt IE 7]>  <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> 
<!--[if IE 7]>   <html class="no-js lt-ie9 lt-ie8"> <![endif]--> 
<!--[if IE 8]>   <html class="no-js lt-ie9"> <![endif]--> 
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <title>Subscription form</title> 
     <meta name="description" content=""> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 

     <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> 

     <link rel="stylesheet" href="css/normalize.css"> 
     <link rel="stylesheet" href="css/main.css"> 
     <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,700,800' rel='stylesheet' type='text/css'> 
     <link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet"> 
     <script src="js/vendor/modernizr-2.6.2.min.js"></script> 
    </head> 
    <body> 
     <!--[if lt IE 7]> 
      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> 
     <![endif]--> 

     <!-- Add your site or application content here --> 
     <form id="subscribe-form" class="subscribe-form hide"> 
      <div class="form-title">Subscribe to our newsletter</div> 
      <hr> 
      <div class="form-loading hide"><i class="fa fa-circle-o-notch fa-spin"></i></div> 
      <div class="form-message hide"> 
       Thank you for subscribing!</div> 
      <div class="form-content"> 
       <div class="group"> 
        <label for="email">Your email</label> 
        <div class="input-prefix"> 
         <i class="fa fa-user"></i> 
         <input id="email" name="email" class="form-control" type="email" placeholder="Your email"> 
        </div> 
       </div> 
       <div class="group"> 
        <label for="name">Your name</label> 
        <div class="input-prefix"> 
         <i class="fa fa-envelope"></i> 
         <input id="name" name="name" class="form-control" type="text" placeholder="Your name"> 
        </div> 
       </div> 

I HAVE ADDED THIS SECTION 
=========================== 

       <div class="group"> 
        <label for="promotion">PROMOTION NAME (Fill this with the promotion name)</label> 
        <div class="input-prefix"> 
         <input id="promotion" name="promotion" class="form-control" type="text" placeholder="Promotion Name"> 
        </div> 
       </div> 

============================ 

       <div class="group group-submit"> 
        <label class="empty"></label> 
        <div align="right"><button class="btn-submit" type="submit">Subscribe</button></div> 
       </div> 
      </div> 
      <!--<div class="form-footer"> 
       <a class="btn" data-toggle="unsubscribe" href="#">Unsubscribe</a> 
      </div>--> 
      <input type="hidden" name="action" value="subscribe"> 
     </form> 

     <form id="unsubscribe-form" class="subscribe-form hide"> 
      <div class="form-title unsubscribe">Unsubscribe from our newsletter</div> 
      <hr> 
      <div class="form-loading hide"><i class="fa fa-circle-o-notch fa-spin"></i></div> 
      <div class="form-message hide"> 
       You've been unsubscribed.</div> 
      <div class="form-content"> 
       <div class="group"> 
        <label for="unsubscribe_email">Your email</label> 
        <div class="input-prefix"> 
         <i class="fa fa-user"></i> 
         <input id="unsubscribe_email" name="unsubscribe_email" class="form-control" type="email" placeholder="Your email"> 
        </div> 
       </div> 
       <div class="group"> 
        <label class="empty"></label> 
        <div> 
         <input id="confirm" type="checkbox" name="confirm" value="T"> 
         <label for="confirm">Click to confirm you want to unsubscribe</label> 
        </div> 
       </div> 
       <div class="group group-submit"> 
        <label class="empty"></label> 
        <div align="right"><button class="btn-submit" type="submit">Unsubscribe</button></div> 
       </div> 
      </div> 
      <div class="form-footer"> 
       <a class="btn" data-toggle="subscribe" href="#">Subscribe</a> 
      </div> 
      <input type="hidden" name="action" value="unsubscribe"> 
     </form> 

     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
     <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>  
     <script src="js/plugins.js"></script> 
     <script src="js/main.js"></script> 
    </body> 
</html> 

Это PHP, который заполнит базу данных и мои изменения:

<?php 
########################################################### 
/* 
Subscription Form 
Copyright (C) StivaSoft ltd. All rights Reserved. 

This program is free software: you can redistribute it and/or modify 
it under the terms of the GNU General Public License as published by 
the Free Software Foundation, either version 3 of the License, or 
(at your option) any later version. 

This program is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
GNU General Public License for more details. 

You should have received a copy of the GNU General Public License 
along with this program. If not, see http://www.gnu.org/licenses/gpl-3.0.html. 

For further information visit: 
http://www.phpjabbers.com/ 
[email protected] 

*/ 
########################################################### 

# CONFIG 
define('_DB_HOST', 'localhost'); 
define('_DB_NAME', 'news'); 
define('_DB_USER', 'admin_xxxx'); 
define('_DB_PASS', 'xxx'); 


$subscribe = (isset($_POST['action']) && $_POST['action'] == 'unsubscribe')?false:true; 

if ($subscribe){ 
    $fields = array(
     array('name' => 'email', 'valid' => array('require', 'email')), 
     array('name' => 'name', 'valid' => array('require')), 
    ); 
}else{ 
    $fields = array(
     array('name' => 'unsubscribe_email', 'valid' => array('require', 'email')), 
     array('name' => 'confirm', 'valid' => array('require'), 'err_message' => 'Please confirm'), 
    ); 
} 

// Connect to database 
$connection = mysql_connect(_DB_HOST, _DB_USER, _DB_PASS) or die ('Unable to connect to MySQL server.<br ><br >Please make sure your MySQL login details are correct.'); 
$db = mysql_select_db(_DB_NAME, $connection) or die ('request "Unable to select database."'); 

$error_fields = array(); 
$get = array(); 
foreach ($fields AS $field){ 
    $value = isset($_POST[$field['name']])?$_POST[$field['name']]:''; 
    if (is_array($value)){ 
     $value = implode('/ ', $value); 
    } 
    if (get_magic_quotes_gpc()){ 
     $value = stripslashes($value); 
    } 
    $get[$field['name']] = mysql_real_escape_string($value); 
    $is_valid = true; 
    $err_message = ''; 
    if (!empty($field['valid'])){ 
     foreach ($field['valid'] AS $valid) { 
      switch ($valid) { 
       case 'require': 
        $is_valid = $is_valid && strlen($value) > 0; 
        $err_message = 'Field required'; 
        break; 
       case 'email': 
        $is_valid = $is_valid && preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $value); 
        $err_message = 'Email required'; 
        break; 
       default:     
        break; 
      } 
     } 
    } 
    if (!$is_valid){ 
     if (!empty($field['err_message'])){ 
      $err_message = $field['err_message']; 
     } 
     $error_fields[] = array('name' => $field['name'], 'message' => $err_message); 
    } 
} 

if (empty($error_fields)){ 
    if ($subscribe){ 
     $data = array(
      'email' => "'".$get['email']."'", 
      'name' => "'".$get['name']."'", 
      'date_subscribe' => 'NOW()', 
      'status' => "'T'", 


I HAVE ADDED THIS 
============================================ 

      'promotion' => "'".$get['promotion']."'" 

============================================ 

     ); 
     $sql = "REPLACE INTO subscription_form (`".implode("`, `", array_keys($data))."`) VALUES(".implode(", ", array_values($data)).")"; 
    }else{ 
     $sql = "UPDATE subscription_form SET date_unsubscribe = NOW(), status = 'F' WHERE email = '".$get['unsubscribe_email']."'"; 
    } 
    if (!empty($sql)){ 
     $sql_result = mysql_query ($sql, $connection) or die ('request "Could not execute SQL query" '.$sql); 
    } 
    echo (json_encode(array('code' => 'success'))); 
}else{ 
    echo json_encode(array('code' => 'failed', 'fields' => $error_fields)); 
} 

что мне не хватает?

+0

Вы хорошо с этим паролем общественностью? – summea

+0

Это просто тест – SpaceDog

+1

Пожалуйста, прекратите использование 'mysql_ *' функций (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

1

Что-то вроде этого в вашем php?

if ($subscribe){ 
$fields = array(
    array('name' => 'email', 'valid' => array('require', 'email')), 
    array('name' => 'name', 'valid' => array('require')), 
    array('name' => 'promotion', 'valid' => array()), 
); 
} 
+0

. Я не думаю, что это проблема, поскольку фактический запрос использует только $ массив данных для обоих ключей и значений. – VIDesignz

+0

foreach ($ fields AS $ field) {говорит, что это допустимые поля, которые мы будем принимать, обрабатывая их. ($ get) Новое поле не было в списке. – hendr1x

+0

ok, но вы отмечаете продвижение по требованию, и это не требуется. Пользователь может оставить его пустым. – SpaceDog

0

В РНР попытаться изменить

'promocao' => "'".$get['promocao']."'" 

к этому

'promocao' => "'".$get['promotion']."'" 

С вашего входного поля name="promotion" , а также быть в курсе, что в имени DB поля является promocao Если нет, и если в вашей БД ваше название поля - это продвижение по службе, а затем измените его следующим образом:

'promotion' => "'".$get['promotion']."'" 
+0

О, извините, это была просто опечатка, когда я скопировал ее здесь. Исправлена. Проблема сохраняется. – SpaceDog

+0

, как я уже сказал, это была опечатка, когда я скопировал код здесь. Поле db называется продвижением и поле формы. – SpaceDog

+0

o и скажите, что другие поля вставляются в db только этого? – Standej

0

добавить также promotion поля здесь:

if ($subscribe){ 
    $fields = array(
     array('name' => 'email', 'valid' => array('require', 'email')), 
     array('name' => 'name', 'valid' => array('require')), 
    ); 
Смежные вопросы