2016-05-10 8 views
0

Ich habe eine Option der Kategorie „ wählen Sie“ aus dem Benutzer verschiedene Optionen auswählen und wenn Benutzer wählt „andere“ ein Eingabefeld erscheint (so kann dieser Benutzer hinzufügen eine andere Kategorie) und posten einen Artikel in dieser Kategorie.
Ich nehme Werte von wählen und prüfen, ob die Eingabe nicht leer ist, dann aktualisieren Sie die gleiche Variable, wo ich den Wert für hatte, wählen Sie.
Jetzt Problem ist, ich kann nicht scheinen zwischen den "wählen Optionen und Eingabe" Feld, wenn ich gehe mit einfach Auswahl von Werten aus wählen Option funktioniert es gut, aber wenn Benutzer wählt "andere" und gab eine neue Kategorie Eingabefeld die Variable bleibt mit dem Wert von select.
Der folgende Fehler wird angezeigt, wenn wir versuchen, durch Eingabefeld hinzuzufügen:Codeigniter3.0.1: Werden Werte von ausgewählten und Eingabe

Fehlernummer: 1452
kann nicht hinzugefügt oder ein Kind Zeile aktualisieren: a. Fremdschlüssel fehlschlägt (ciuser_articles, CONSTRAINT article_catagory_fk FOREIGN KEY (cat_id_fk) LITERATUR catagory (cat_id) ON NO ACTION ON UPDATE CASCADE DELETE)
INSERT INTO user_articles (cat_id_fk, title, article) VALUES ('andere', 'Neuer Titel', 'Mein Artikel ist ein Eibisch');

Hier ist der Code, der es tut. Das ist meine add_article() Funktion in Model_article.php Datei:

public function add_article() 
{ 
     $id = $this->input->post('hiddenValue'); 
     $title = $this->input->post('title'); 
     $catagory_id = $this->input->post('catagory_select'); 

     $cat = $this->input->post('cat'); 

     if (!isset($cat)) 
     { 

      $cat_input = $this->input->post('cat'); 

      $add_catagory = "INSERT INTO catagory (`user_id_fk`,`cat_name`) VALUES ('{$id}' ,'{$cat_input}') "; 
      $result_catagory = $this->db->query($add_catagory); 

      $retrive_catagory = "SELECT cat_id FROM catagory WHERE cat_name = '{$cat_input}' "; 

      $result = $this->db->query($retrive_catagory)->row(); 

      $catagory_id = $result->cat_id; 

     } 

     $articletext = $this->input->post('articletext',true); 

     // echo $catagory_id; 
     // die(); 
     $sql = " INSERT INTO user_articles (`cat_id_fk`, `title`, `article`) VALUES ('$catagory_id', '{$title}', '{$articletext}'); "; 

     $result = $this->db->query($sql); 
     $row = $this->db->affected_rows(); 

     if ($row) { 
      return true; 
     } 
     else 
     { 
      echo "Couldn't perform query"; 
      die(mysqli_error($sql)); 
      return false; 
     } 
} 

Und das ist mein view_addarticle.php Datei:

<div class="container"> 
<div class="row"> 
    <div class="col-xs-6"> 
     <?php 
      // Display Result Using Ajax 
      echo "<div id='result' style='display: none'>"; 

      echo "<div class='alert alert-success' role='alert'>Well done! You successfully read this important alert message....</div>"; 
      echo "</div>"; 
      echo "</div>"; 
     ?> 
    </div> 
    <div class="col-xs-6"> 
     <?php  
      echo validation_errors(); 
      echo form_open('article/submit_article'); #'add_post/submit_post' 
     ?> 

     <div class="form-group"> 
     <input type="hidden" name="hiddenValue" id="hiddenValue" value="<?php echo $session_data['id']; ?>"> 
      <label for="sel1">Title:</label> 
       <input type="text" name="title" class="form-control" placeholder="Title of Article"> 
      <br> 
      <!-- <label for="sel1">Select Catagory:</label> --> 

      <script type="text/javascript"> 
       function admSelectCheck(nameSelect) 
      { 
       console.log(nameSelect); 
       if(nameSelect){ 
        admOptionValue = document.getElementById("admOption").value; 
        if(admOptionValue == nameSelect.value){ 
         document.getElementById("admDivCheck").style.display = "block"; 
        } 
        else{ 
         document.getElementById("admDivCheck").style.display = "none"; 
        } 
       } 
       else{ 
        document.getElementById("admDivCheck").style.display = "none"; 
       }} 
     </script> 


       <select name="catagory_select" class="selectpicker form-control" style=" width: 150px;" onchange='admSelectCheck(this);'> 
       <option>Select Catagory</option> 
       <?php 
        foreach ($query->result() as $key): 
       ?> 
       <option value="<?php echo $key->cat_id; ?>"><?php echo $key->cat_name; ?></option> 
       <?php endforeach; ?> 
       <option id="admOption">others</option> 
       </select> 

       <br> 
       <div id="admDivCheck" style="display: none;"> 
       <input type="text" placeholder="Enter Catagory Name" class="form-control" name="cat" id="color" style='width: 170px;'/> 
       </div> 
      <br> 
      <label for="sel1">Article:</label> 
      <textarea class="form-control" name="articletext" id="" cols="80" rows="10"></textarea> 
      <br> 
      <input class="btn btn-primary " value="Submit Article" id="submit" type="submit" style="float:right;" /> 
      </div> 
     </form> 
    </div> 
</div> 

Dies ist mein Controller Funktion submit_article() in Article.php Datei:

public function submit_article() 
{ 
    $this->form_validation->set_rules('title', 'Title', 'required'); 
    $this->form_validation->set_rules('articletext', 'Article Text', 'required'); 


    if ($this->form_validation->run() === FALSE) 
    { 

     $this->load->view('layouts/header'); 
     $this->load->view('view_addarticle'); 
     $this->load->view('layouts/footer'); 
    } 
    else 
    { 
     $title = $this->input->post('title'); 

     $result = $this->model_article->add_article(); 

     if(!$result) 
     { 
      echo "Coulnd't register, contact site admin [email protected]"; 
     } 

     else 
     { 
      // echo json_encode($result); 
      redirect('account'); 
     } 
    } 

} 

Antwort

0

Bevor ich beginne ich alle meine Validierungen in der Steuerung der Regel tun, um sie in einem Array bündeln und auf das Modell auf diese Weise senden ...

Ihr Fehler Einkochen auf ein SQL-Fehler ... Sie haben einen Fremdschlüssel in der Tabelle 'ci.user_articles'. Existiert der Fremdschlüssel in der Kategorie cat_id (col)? Sie versuchen, einen Wert von "anderen" einzufügen, der als Schlüssel verfügbar sein muss? (basierend auf dem angezeigten Fehler). Typischerweise sind IDs Zahlen, keine Wörter?

Fremdschlüssel bedeutet, dass es in der Tabelle/Spalte sein muss, auf die Sie verweisen, oder es wird nicht eingefügt, es ist was ein Fremdschlüssel ist ... (nur nicht vorausgesetzt, Sie wissen dies nicht, profitieren . In den anderen später, wenn sie es nicht tun)

Im Hinblick auf die Überprüfung des Feldes Wert googeln hat oder nicht, würde ich mit einem Scheck wie vorschlagen:

if(isset($this->input->post('hiddenValue')){ 
    $id = $this->input->post('hiddenValue') 
    } 

tun dies bedeutet, wird nicht die Daten geschrieben werden, wenn der Benutzer hat niemals etwas eingegeben.

Wenn Sie den Query Helper/Query Builder verwenden, können Sie den Großteil des SQL mit CI erstellen, anstatt die Abfragen manuell zu erstellen. Sie können auch alles in ein Array im Controller packen (wo ich es mache) es sowieso) und übergeben Sie das Array einfach an das Modell.

die Helfer db Builder bedeutet auch Ihr Code tragbar ist, nur zum Nachdenken auf, dass man ...

+0

Danke für die Antwort, löste ich meine Frage nach der Logik genau zu ändern, wie Sie im Start sagten " eine Reihe von Validierungen im Controller zu machen "und y-Tabelle war alles mit wenig mehrdeutigen Weg, die Daten aus dem Formular abgerufen. Was ich getan habe, war das Formular zu überprüfen, wenn ich Wert im Eingabefeld habe, wenn ich nicht eine separate Funktion ausführen, wo die Eingabe keine Rolle hat. Und wenn ich die Eingabe erwische, werde ich eine Funktion ausführen, die für diesen Eingabewert spezifisch ist, und ich habe jetzt gut gearbeitet. –

+0

Froh, dass die Antwort half, würden Sie nicht 2 völlig separate Funktionen benötigen, wenn Sie die Daten an das Modell in einem Array senden und den CI Query Builder verwenden, schauen Sie hinein, sobald Sie den Dreh raus haben, spart viel Zeit. . –

Verwandte Themen