2017-01-04 5 views
-2

私は抽象的な投稿フォームを持っています。クライアントは要約を提出し、データベースに収集します。このフォームには、確認メールで生成されたリンクを使用して、送信された要約をクライアントが変更できるオプションがあります。彼らが要約を再提出するとき、私は自分のデータベースで "submission id = 1a、またはsubmission id = 1bとなるように受け取るsubmission idを再提出する必要があります。だから私は番号が同じである必要がありますが、彼らが再提出するたびにそれの隣に手紙があります。抽象的なID番号を提出して再提出する

ここでは、抽象的な要素に加えられた変更の数に関係なく、サブミットID番号は変わりません。

<?php 

require_once './lib.php'; 
include_once 'lib/swift_required.php'; 

function reSendSubmissions() { 
    $ids = array(108, 117, 142, 170, 171, 154, 153, 146, 159, 255, 109, 185, 250, 257, 151, 235, 234, 233, 273, 275, 281, 355, 366, 373, 231, 365, 384, 425, 234, 290, 303, 153, 154, 391, 388); 
    foreach ($ids as $id) { 
     $sql = 'SELECT a.`title`, a.`speaker`, a.`submisssion_timestampt`, a.`submissionid`, a.`pincode`, b.`email` ' 
       . 'FROM `submissions` a INNER JOIN `personaldata` b ON(b.`pdataid`=a.`pdata_id`) ' 
       . 'WHERE a.`submissionid`="' . (int) $id . '" ' 
       . 'LIMIT 1'; 
     $db = new dbrequest(); 
     $data = array(); 
     if ($submission = $db->generalSelect($sql)) { 
      if (!$submission[0]) 
       continue; 
      $submission = $submission[0]; 
      $data['title'] = $submission['title']; 
      $data['speaker'] = $submission['speaker']; 
      $data['date'] = date('d-m-Y', strtotime($submission['submisssion_timestampt'])); 
      $data['time'] = date('H:i', strtotime($submission['submisssion_timestampt'])); 
      $data['no'] = $submission['submissionid']; 
      $data['link'] = 'http://www.e-bass.org/22ndcongress/form/edit.php?pcode=' . $submission['pincode']; 
//   maildata::mailSenderTest($submission['email'], $data); 
      echo $id.'-'.$submission['email'].'<br/>'; 
     } 
    } 
} 

reSendSubmissions(); 

エンド提出フォームのPHPコード:

<?php 

if ((isset($_POST['firstname'])) && (isset($_POST['email']))) { 
    require_once 'lib.php'; 
    (isset($_POST['poster'])) ? $poster = $_POST['poster'] : $poster = null; 
    (isset($_POST['contestant'])) ? $contestant = $_POST['contestant'] : $contestant = null; 
    $newdata = new dbrequest(); 
    $pdata = array(
     'firstname' => filter_input(INPUT_POST, 'firstname', FILTER_SANITIZE_STRING), 
     'lastname' => filter_input(INPUT_POST, 'lastname', FILTER_SANITIZE_STRING), 
     'address' => $_POST['address'], 
     'city' => $_POST['city'], 
     'poc' => $_POST['poc'], 
     'country' => $_POST['country'], 
     'workingplace' => $_POST['workingplace'], 
     'specialization' => $_POST['specialization'], 
     'email' => $_POST['email'], 
     'cellphone' => $_POST['cellphone'], 
     'phone' => $_POST['phone'], 
     'fax' => $_POST['fax']); 
    $authors = $_POST['authors1'] . '-' . $_POST['title1'] . '-' . $_POST['university1'] . ';' . $_POST['authors2'] . '-' . $_POST['title2'] . '-' . $_POST['university2'] . ';' . $_POST['authors3'] . '-' . $_POST['title3'] . '-' . $_POST['university3'] . ';' . $_POST['authors4'] . '-' . $_POST['title4'] . '-' . $_POST['university4'] . ';' . $_POST['authors5'] . '-' . $_POST['title5'] . '-' . $_POST['university5']; 
    if ((isset($_POST['update'])) && ($_POST['update'] == 'true')) { 
     $updateSubData = array(
      'authors' => $authors, 
      'speaker' => trim(filter_input(INPUT_POST, 'speaker_firstname', FILTER_SANITIZE_STRING)) . ' ' . trim(filter_input(INPUT_POST, 'speaker_lastname', FILTER_SANITIZE_STRING)), 
      'title' => $_POST['title'], 
      'presentation_id' => $_POST['presentation'], 
      'topic_id' => $_POST['topic'], 
      'poster' => $poster, 
      'contestant' => $contestant, 
      'summary' => $_POST['summary']); 
     $newdata->updatePersonalData($pdata, $_POST['pdata_id']); 
     $newdata->updateSumission($updateSubData, $_POST['submissionid']); 
     $html = <<<EOD 
       <!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"> 
       <head> 
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
       <title>Paper Submited</title> 
           </head> 
       <body style="margin:0; padding:0"> 
       <div style="width:600px;height:auto; margin:0 auto;"> 
       <div id="header"></div> 
       <div id="content"> 
       <h3>The processing of your paper is done successfully.</h3> 
       <p style="text-align:center">Thank you for your participation.</p> 
       </div> 
       </div> 
       </body> 
       </html> 
EOD; 
     print $html; 
    } else { 
     $speakerPost = trim(filter_input(INPUT_POST, 'speaker_firstname', FILTER_SANITIZE_STRING)) . ' ' . trim(filter_input(INPUT_POST, 'speaker_lastname', FILTER_SANITIZE_STRING)); 
     $speakerDB = $newdata->metriseOmilites($speakerPost); 
     $speakerDB = $speakerDB[0]['single_speaker']; 
     if ($speakerDB >= 1) { 
      $html = <<<EOD 
       <!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"> 
       <head> 
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
       <title>SUBMISSION FORM</title> 
           </head> 
       <body style="margin:0; padding:0"> 
       <div style="width:600px;height:auto; margin:0 auto;"> 
       <    <div style="width:600px;height:auto; margin:0 auto;background-color:#4F6B92"> 
       <h3>There was an error in your application.</h3> 
       <p style="text-align:center">The presenter chosen is already registered in 1 paper.</p> 
       <p style="text-align:center"><a href="javascript:history.back(1)">Click here to return to the Submission Form.</a></p> 
       </div> 
       </div> 
       </body> 
       </html> 
EOD; 
      print $html; 
      exit(); 
     } 
     $newdata->insertPersonalData($pdata); 
     $pdata_id = $newdata->selectLastInsert('personaldata', 'pdataid'); 
     $pdata_id = $pdata_id[0]['pdataid']; 
     $pcode = mt_rand(1, 99999); 
     $pcode = md5(time() . $pcode); 
     $pcode = substr($pcode, 0, 22); 
     $submission = array(
      'pincode' => $pcode, 
      'pdata_id' => $pdata_id, 
      'authors' => $authors, 
      'speaker' => trim(filter_input(INPUT_POST, 'speaker_firstname', FILTER_SANITIZE_STRING)) . ' ' . trim(filter_input(INPUT_POST, 'speaker_lastname', FILTER_SANITIZE_STRING)), 
      'title' => $_POST['title'], 
      'presentation_id' => $_POST['presentation'], 
      'topic_id' => $_POST['topic'], 
      'poster' => $poster, 
      'contestant' => $contestant, 
      'summary' => $_POST['summary']); 
     $newdata->insertSubmission($submission); 
     $submissionNo = $newdata->selectLastInsert('submissions', 'submissionid'); 
     $submissionNo = $submissionNo[0]['submissionid']; 
     $neoMail = new maildata(); 
     $datamail = array(
      'title' => $_POST['title'], 
      'speaker' => $_POST['speaker_firstname'] . ' ' . $_POST['speaker_lastname'], 
      'date' => date('d-m-Y'), 
      'time' => date('H:i'), 
      'no' => $submissionNo, 
      'link' => 'http://' . $newdata->domainURL . '/edit.php?pcode=' . $pcode); 
     $neoMail->mailSender($_POST['email'], $datamail); 
     $html = <<<EOD 
       <!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"> 
       <head> 
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
       <title>SUBMISSION OF PAPER</title> 
           </head> 
       <body style="margin:0; padding:0"> 
       <div style="width:600px;height:auto; margin:0 auto;"> 
       <div id="header"></div> 
       <div id="content"> 
       <h3>Submitting your work done successfully.</h3> 
       <p>You receive the relevant proof of submission to the email address you provided in the application form.</p> 
       <p style="text-align:center">Thank you for your participation.</p> 
       </div> 
       </div> 
       </body> 
       </html> 
EOD; 
     print $html; 
    } 
} 

は、あなたが私を助けることができます(数字のみ)ここで

は、再送信フォームのPHPコードですか?

+0

あなたのデータベースに 'id'と' version'のための別々の列があります。サブミットが更新されると、バージョンのみを変更します。それと同じくらい簡単です。これを答えとして投稿するのは簡単すぎですね。 –

+0

私はちょうど学び始めたので、残念なことに私のために簡単ではありません。もっと具体的にすることは可能でしょうか?コードに正確に何を追加すればいいですか? –

+0

さて、ここで私たちは行く、以下の答えを参照してください。かなり具体的でなければならない。コードがあなたの仕事であるかどうかを尋ねるか、既成の作品を微調整しているかどうか尋ねてください。 –

答えて

0

はい、そうかもしれません。まず、ID自体を変更すべきではありません。バージョンの新しいデータベース列を追加して、それを更新するだけです。 (まあ、あなた直接あまりにIDを変更することができますが、より多くのコードをあなたのための改訂があるだろう、それに加えて、それを行うには非常にスマートな方法ではありません。)

まず:を変更し、あなたのデータベース。私はあなたがPHPMyAdminのようなものを使用すると思います。その場合は:submissionsテーブルに行きます。 「構造」タブに移動します。 versionというフィールドが追加されています。おそらくsubmissionidフィールドの直後でしょう。あなたは第二

Z.以上のバージョンを持っていないと仮定すると、それはCHAR(1)を入力することができます:次のように、あなたの更新ルーチンを修正:

// We're modifying the code after this line: 
if ((isset($_POST['update'])) && ($_POST['update'] == 'true')) { 

// Here we get the current version: 
// (You could also get it from your submit form, but then 
// you'd have to check that the user hasn't messed with it.) 

$curr = $newdata->generalSelect('SELECT `version` FROM `submissions` 
      WHERE `submissionid` = ' . (int) $_POST['submissionid']); 

// If the old version is 'a'; it becomes 'b' etc. here: 

$version = $curr['version']++; 

// Then add it to your array with updated fields: 

$updateSubData = array(
    'version' => $version, 
    // ... 

これで全部、ベースとすべきであるとあなたが共有したコードで。あなたのアプリケーションの他の部分が、それと矛盾したり、他のリビジョンを必要とするかもしれません。あなたがそれをよく知っている(またはあなたが調べようとしている)でしょう。次に、あなたのコードを参照したので、調べるべきことがいくつかあります。

さらに、データベースクラスで行われていない限り、更新クエリの変数(どちらも)サニタイズされておらず、SQLインジェクションの脆弱性があるかもしれません。

また:あなたのfunction reSendSubmissions()あなたの代わりにこのような単一のクエリを使用しての、各IDに別々のクエリを作っているいくつかの理由のために:あなたはループの前に、そのクエリになるだろう

WHERE a.`submissionid` IN ("' . implode(',', $ids) . '") 

これはすべての行のリソースを返し、ループとしてwhile($submission = $result->fetch_assoc()) {を使用します。 (それはあなたのデータベースクラスは、標準mysqli結果リソースを返すと仮定し、ある。)

また:いくつかのタイプミスがあなたの変数やメソッドの名前であり、私の眼球はsubmisssion_timestampt$newdata->updateSumissionでいくつかを傷つけます。これらがあなたにエラーを与えていない場合は、良いですが、あなたのコードベースのどこかでそれらを更新して、保守を容易にしたいかもしれません。

+0

ありがとうございました。私はsubmit.phpであなたが提案した変更を加えました、そして今私は再提出のsubmitボタンを押すと次のメッセージを受け取ります。致命的なエラー:37行目のsubmit.phpにある非オブジェクトのメンバ関数generalSelect()を呼び出します。37行目のコード: 'if((isset($ _ POST ['update'])))&&($ _POST [ 'update'] == 'true')){ \t $ curr = $ db-> generalSelect( 'SELECT 'バージョン' FROM 'submissions')サブタイプid ='。(int)$ _POST ['submissionid' ]); \t $ version = $ curr ['version'] ++; –

+0

ああ、コードの最初のサンプルではデータベースを '$ db'としてインスタンス化していますが、2番目のサンプルでは' $ newdata'です。あなたが得るエラーは、単にその名前でオブジェクトがないことを意味します。変更するだけで正常に動作するはずです。 (答えを更新しました。) "newdata"という名前は心配しないでください。実際には "new data"とはまったく関係のない一般的なデータベースオブジェクトです。たとえば、次のようにして名前を変更することができます。 '$ db'はあなたのコードを読みやすくします。それからあなたはいつもそれがDBオブジェクトであることを知っています。 –

関連する問題