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 (ci
user_articles
, CONSTRAINTarticle_catagory_fk
FOREIGN KEY (cat_id_fk
) LITERATURcatagory
(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');
}
}
}
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. –
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. . –