2017-09-25 1 views
0

Ich arbeite an einem CMS mit PHP OOP. In diesem Projekt gibt es eine Funktion für Benutzer, um einen neuen Telegrammkanal hinzuzufügen. Für diese Funktion habe ich diese Form, die auch die Aktionscodes enthält:Wie füge ich mehrere Radio Button Werte mit PHP OOP

<?php 
if(isset($_POST['submit'])){ 
    $token = $_POST['token']; 
    $cat = $_POST['cat']; 
    $ads = $_POST['ads']; 
    $key = $_POST['keyboard']; 
    $tel = new Telegram(); 
    $notice = $tel->AddNew($token,$cat,$ads,$key); 
} 
?> 
<div class='content-wrapper'> 
    <section class='content-header'> 
     <h1> 
      Add New Telegram Account 
      <small>You can add a new Telegram channel here</small> 
     </h1> 
     <ol class='breadcrumb'> 
      <li class='active'>telegram.php</li> 
     </ol> 
    </section> 
    <?php 
    if($dataSet->GetLevel()==1) 
    { echo " 
     <section class='content'> 
      <div class='row'> 
       <div class='col-md-6'> 
        <div class='box box-primary'> 
         <div class='box-header with-border'> 
          <h3 class='box-title'>Required Information</h3> 
         </div> 
         "; 
         if(isset($notice['success_message'])){ 
          echo " 
           <div class='alert alert-success'> 
            <strong>Hey!</strong> ".$notice['success_message'].". 
           </div> 
          "; 
         } 
         echo " 
         <form role='form' method='POST' action=''> 
          <div class='box-body'> 
           <div class='form-group'> 
            <label>Token Number</label> 
            <input type='text' class='form-control' placeholder='Enter token' name='token' required> 
            <a href='#' style='color:purple;'>Having problem while getting token</a> 
           </div> 
           <div class='form-group'> 
            <label>Select Category</label> 
            <select name='cat' class='form-control'> 
             <option value='empty'>---</option> 
             <option value='technology'>Technology</option> 
             <option value='4fun'>Game & Fun</option> 
             <option value='news'>News</option> 
             <option value='tools'>Tools</option> 
             <option value='learning'>Learning</option> 
             <option value='traditional'>Traditional</option> 
             <option value='media'>Media</option> 
            </select> 
           </div> 
           <div class='form-group'> 
            <div class='radio'> 
             <label> 
              <input type='radio' name='ads' id='optionsRadios1' value='on' checked> 
              Set ads on</br> 
              <input type='radio' name='ads' id='optionsRadios1' value='off'> 
              Set ads off 
             </label> 
            </div> 
           </div> 
           <div class='form-group'> 
            <div class='checkbox'> 
             <label> 
              <input type='checkbox' name='keyboard' value='with_keyboard'> 
              Use dedicated keyboard for this bot 
             </label></br> 
             <label> 
              <input type='checkbox' name='keyboard' value='without_keyboard'> 
              Show keyboard at groups 
             </label></br> 
             <label> 
              <input type='checkbox' name='answer' value='answer_messages_chats' checked> 
              In private chats, just anwser the pre defined messages 
             </label></br> 
             <label> 
              <input type='checkbox' name='answer' value='answer_messages_groups' checked> 
              In groups, just answer the pre defined messages 
             </label> 
            </div> 
           </div> 
          </div> 
          <div class='box-footer'> 
           Visit <a href='https://zite.pouyavagefi.com/documentation/telegram.php'>Telegram</a> Social Media Documentation. 
          </div> 
          <div class='box-footer'> 
           <button name='submit' type='submit' class='btn btn-primary'>Submit</button> 
          </div> 
         </form> 
        </div> 
       </div> 
      </div> 
     </section> "; 
    }else{ 
     echo " 
     <section class='content'> 
      <div class='alert alert-warning'> 
       <strong>Access Denied!</strong> You don\'t have permission to access this page. 
      </div> 
     </section> "; 
    } 
    ?> 
</div> 

Wie Sie an der Spitze kann, habe ich eine Klasse genannt, die Telegram.class.php genannt wird und diese Klasse geht so:

<?php 
class Telegram 
{ 
    protected $notice = array(); 
    private $db; 
    public function __construct() 
    { 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 
    public function AddNew($token,$cat,$ads,$key) 
    { 
     if(!empty($token)&&!empty($cat)&&!empty($ads)) 
     { 
      for ($i=0;$i<sizeof($ads);$i++) 
      { 
       for ($i=0;$i<sizeof($key);$i++) 
       { 
        $new = $this->db->prepare("INSERT INTO channels (token_number, category_name, ads_set, keyboard_status) VALUES (?, ?, "/*.$ads[$i].*/", "/*.$key[$i].*/")"); 
        $new->bindParam(1,$token); 
        $new->bindParam(2,$cat); 
        $new->bindParam(3,$ads); 
        $new->bindParam(4,$key); 
        $new->execute(); 
        $notice['success_message'] = "New Telegram Channel was successfully added"; 
        return $this->notice; 
       } 
      } 

     } 
    } 
    public function getNotice() 
    { 
     return $this->notice; 
    } 
} 
?> 

Da ich mehrere Kontrollkästchen in Tabelle hinzugefügt werden soll, verwendet für diese I-Schleife innerhalb des Verfahrens Add_New (Gemäß diesem qeustion):

for ($i=0;$i<sizeof($ads);$i++) 
     { 
      for ($i=0;$i<sizeof($key);$i++) 
      { 
       $new = $this->db->prepare("INSERT INTO channels (token_number, category_name, ads_set, keyboard_status) VALUES (?, ?, "/*.$ads[$i].*/", "/*.$key[$i].*/")"); 
       $new->bindParam(1,$token); 
       $new->bindParam(2,$cat); 
       $new->bindParam(3,$ads); 
       $new->bindParam(4,$key); 
       $new->execute(); 
       $notice['success_message'] = "New Telegram Channel was successfully added"; 
       return $this->notice; 
      } 
     } 

Ich weiß es nicht richtig ist, aber ich weiß nicht, den richtigen Weg, um diese $ Anzeigen [$ i] und $ key [$ i] Variablen in die Einsatz Anweisung hinzufügen ...

Also, wenn Sie wissen, wie man das in der richtigen Reihenfolge macht, lassen Sie es mich bitte wissen .. danke!

Antwort

0

Verwenden Sie einfach implode und explodieren Funktionen von PHP. Während der Daten zu speichern, implodieren sie wie folgt vor:

$key = implode(", ", $_POST['keyboard']); 
$tel = new Telegram(); 
$notice = $tel->AddNew($token,$cat,$ads,$key); 

ersten Parameter implodieren Ersetzen „“ nach Ihrem Bedarf.

Für die Anzeige verwenden explode wie folgt: $ id = explodieren (",", $ DbRes-> Tastatur);

Sobald Sie Ihr Array in einen String konvertieren, brauchen Sie keine Schleife innerhalb Ihrer Klasse. Siehe aktualisierten Code der Klasse wie folgt:

<?php 
class Telegram 
{ 
    protected $notice = array(); 
    private $db; 
    public function __construct() 
    { 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 
    public function AddNew($token,$cat,$ads,$key) 
    { 
     if(!empty($token)&&!empty($cat)&&!empty($ads)) 
     { 

      $new = $this->db->prepare("INSERT INTO channels (token_number, category_name, ads_set, keyboard_status) VALUES (?, ?, ".$ads.", ".$key.")"); 
      $new->bindParam(1,$token); 
      $new->bindParam(2,$cat); 
      $new->bindParam(3,$ads); 
      $new->bindParam(4,$key); 
      $new->execute(); 
      $notice['success_message'] = "New Telegram Channel was successfully added"; 
      return $this->notice; 
     } 
    } 
    public function getNotice() 
    { 
     return $this->notice; 
    } 
} 
?> 

Dies wird Ihnen helfen, Ihr Verständnis zu bauen. Sie müssen Array in String konvertieren, damit die MySQL-Datenbank es speichern kann. Dieser Beitrag kann auch hilfreich sein: Save PHP array to MySQL?

+1

Was ist dann mit der Klasse, keine Änderung in der Klassendatei? – wrephebiajou

+0

Ja Klasse wird geändert. Es ist nicht erforderlich, ein Array zu durchlaufen, wenn der Wert in eine Zeichenfolge konvertiert wurde. Antwort aktualisiert – Star

4

Nutzen Sie den Konstruktor

Das erste, was zuerst Ihre addNew Funktion kann wirklich als „erstellen Sie eine neue Instanz dieses Objekts“ gelesen werden, was wirklich die Aufgabe der __construct ist . Das andere Problem besteht darin, dass das Objekt Telegram mehrere Instanzen erstellen muss. Rufen Sie jedoch $tel = new Telegram(); auf eine und nur eine Instanz des Objekts. Ihre verschachtelten for-Schleifen sollten daher zur Skriptseite gehören, die sich innerhalb des Objekts befinden.

Umgestalten der Datenbankverbindung

Derzeit Ihre Datenbankverbindung wird in dem Objekt initialisiert. Jetzt hat Ihr Objekt zwei Verantwortlichkeiten: Ein Telegramm verwalten und mit der Datenbank kommunizieren. Ich würde vorschlagen, das Verbindungsobjekt außerhalb von Telegram zu erstellen und, um so objektorientiert wie möglich zu bleiben, es an das Objekt zu übergeben. This answer erklärt diesen Teil ziemlich gut.

einige Funktionen Breaking down

Gerade jetzt, der Konstruktor des Objekts tut zwei Dinge: es eine Instanz des Objekts zu schaffen, und es wird auf die Datenbank persistierenden. Idealerweise möchten Sie, dass diese beiden Prozesse voneinander entkoppelt sind. Dies ermöglicht es Ihnen, eine Instanz von Telegram zu erstellen und eine Überprüfung durchzuführen, bevor sie in der Datenbank gespeichert wird, wodurch Ihr Konstruktor nett und sauber bleibt.

Telegramm Klasse:

<?php 
class Telegram 
{ 
    protected $notice = ''; 
    private $_token; 
    private $_cat; 
    private $_ads; 
    private $_key 

    public function __construct($token, $cat, $ads, $key) 
    { 
     $this->_token = $token; 
     $this->_cat = $cat; 
     $this->_ads = $ads; 
     $this->_key = $key; 
    } 

    public function saveToDb(PDO $con) 
    { 
     $new = $this->con->prepare("INSERT INTO channels (token_number, category_name, ads_set, keyboard_status) VALUES (?, ?, "/*.$ads[$i].*/", "/*.$key[$i].*/")"); 
     $new->bindParam(1,$this->_token); 
     $new->bindParam(2,$this->_cat); 
     $new->bindParam(3,$this->_ads); 
     $new->bindParam(4,$this->_key); 
     $new->execute(); 
     $this->notice['success_message'] = "New Telegram Channel was successfully added"; 
     return $this->notice; 
    } 

    public function getNotice() 
    { 
     return $this->notice; 
    } 

    public function getToken() 
    { 
     return $this->_token; 
    } 

    public function getCat() 
    { 
     return $this->_cat; 
    } 

    public function getAds() 
    { 
     return $this->_ads; 
    } 

    public function getKey() 
    { 
     return $this->_key; 
    } 
} 
?> 

Formular Skript:

<?php 
    if(isset($_POST['submit'])){ 
     $db = new Connection(); 
     $db = $this->db->dbConnect(); 

     $token = $_POST['token']; 
     $cat = $_POST['cat']; 
     $ads = $_POST['ads']; 
     $key = $_POST['keyboard']; 

     $notices = array(); 
     if(!empty($token)&&!empty($cat)&&!empty($ads)) 
     { 
      for ($i=0; $i < count($this->_ads); $i++) 
      { 
       for ($j=0; $j < count($this->_key);$j++) 
       { 
        $tel = new Telegram($token, $cat, $ads[$i], $key[$j]); 
        $notices[] = $tel->saveToDb($db); // keep a notice for each object created 
       } 
      } 
     } 
    } 
?> 
<div class='content-wrapper'> 
/* ... */ 
Verwandte Themen