2017-08-25 1 views
0

Ich habe erschöpfend auf Möglichkeiten gesucht, um diese Aufgabe zu erfüllen. Ich habe Probleme, Inhalt innerhalb eines Div in eine Variable zu verwandeln, die in eine PHP-Anweisung verarbeitet werden kann. Ich habe versucht mit AjaxForm Ich habe AJax ausprobiert.Wie nehmen Sie Inhalt in einem div, das in einem Formular ist und es in eine Datenbank zusammen mit anderen Formulardaten

Hier ist mein Formularcode, der unter dem Titel "library.php" steht. Hier habe ich ein div mit der ID "input". Ich versuche, die Daten in diesem Div zu bekommen, das entweder die Option "Öffentlich" oder "Privat" sein wird. Ich werde dann gehen Sie auf die Schaltfläche erstellen, um die Daten an die database.php

<form method="post" action="library.php" id="form3"> 
<a id="libOptPP" class="select">      
    **<div id="input" class="input" name="Privacy">    
    </div>** 
    <div id="libOptPP2" class="select-options"> 
    <ul> 
    <li id="pub" value="1"><span>Public</span> (logo) </li> 
    <li id="priv" value="2" class="selected"><span>Private</span></li> 
    </ul>      
    </div> 
</a> 
<div class="libOptCS"> 
    <span class="bbCT"> 
    <button type="submit" name="create"> Create </button> 
    </span> 
</div> 
</form> 

Hier vorzulegen ist das Skript, das im Kopf des library.php liegt, wo ich werde versuchen und die Verwendung AJAX um die Variable zu senden "Datenschutz" für die Database.php. Diese Variable enthält den Text des div, der im vorherigen Codeblock angegeben ist. Dies wird entweder die Option "Öffentlich" oder "Privat" sein. Anstatt den ID-Namen des divs zu verwenden, ging ich weiter und wählte die Klassen aus, die ".select .input" heißen.

<script> 
$(document).ready(function main() { 
    $("create").click(function() {  

    var privacy = $(.select .input).text();      
    .ajax({ 
    type: "POST", 
    url: ../../database/database.php, 
    data: "privacy="+privacy, 
    dataType: "html", 
    async: false, 
    success: function(data) { 
    alert(data); 
    } 
    }); 
    }); 
}); 
</script> 

Hier ist der PHP-Code für die Eingabe der Formulardaten in meine Datenbank. Sobald wir auf die Schaltfläche "Erstellen" klicken, wie im vorherigen Code angegeben, aktiviert dies die Übertragung von Daten in die entsprechende Tabelle und die nachfolgenden Zeilen.

if (isset($_POST["create"])) { 
$Privacy = mysqli_real_escape_string($db, $_POST['privacy']); 
$ETH = mysqli_real_escape_string($db, $_POST['ETH']); 
$Email_Phone_Number = $_SESSION['Email_Phone_Number']; 

if ($Privacy === "Public") { 
    $sql = "INSERT INTO library (Title, Privacy, Bio, User_iD) 
     VALUES ('$ETH', '$Privacy', 'testbio', (SELECT User_iD FROM logstart WHERE Email_Phone_Number='$Email_Phone_Number'))"; 
     mysqli_query($db, $sql); 
} 
if ($Privacy === "Private") { 
$sql = "INSERT INTO library (Title, Privacy, Bio, User_iD) 
     VALUES ('$ETH', '$Privacy', 'testbio', (SELECT User_iD FROM logstart WHERE Email_Phone_Number='$Email_Phone_Number'))"; 
     mysqli_query($db, $sql); 
} 
if (mysqli_query($db, $sql)) { 
    echo "YES!"; 
    } else { 
    echo "No!"; 
    } 
} 

Irgendwo entlang Die Variable wird nicht identifiziert. Wenn ich den "create" Knopf drücke, wird ein Popup von "unidentified Index: privacy" erstellt. Mit anderen Worten, $ _POST ['privacy'] enthält nicht die Daten, die ich brauche, die öffentlich oder privat sein müssen, damit ich das identifizieren und den Rest des Codes weiter verwenden kann.

+1

Ich kenne PHP nicht, aber ... warum benutzt du kein Eingabesteuerelement - egal ob versteckt, Text oder Textbereich? Außerdem sind Sie an das click-Ereignis der create-Schaltfläche gebunden, aber es handelt sich um eine Übermittlungsschaltfläche, und Sie rufen preventDefault nicht auf, damit das Formular möglicherweise übergeben wird, bevor der Code ausgeführt wird? – upsidedowncreature

+1

Ihr Code ist anfällig für SQL-Injection-Angriffe. Sie sollten parametrisierte Abfragen und vorbereitete Anweisungen verwenden, um Angreifern zu helfen, Ihre Datenbank durch die Verwendung schädlicher Eingabewerte zu kompromittieren. http://bobby-tables.com/ gibt eine Erklärung der Risiken, sowie einige Beispiele, wie Sie Ihre Abfragen sicher mit PHP/mysqli schreiben können. – ADyson

Antwort

0

Ihre Form die normale Art und Weise wird Entsendung zurück, anstatt mit Ajax, weil zwei Dinge:

1) Sie sind das Click-Ereignis auf die Schaltfläche richtig unverbindlich - Ihre Wähler für Elemente wie <create> sucht, die von Natürlich gibt es das nicht.

2) Sobald dies gelöst ist, haben Sie vergessen, das Standard-Postback-Verhalten der Schaltfläche zu verhindern. Sie können dies entweder mit Markup oder Code sortieren. Markup ist einfacher:

<button id="create" type="button" name="create"> Create </button> 

Notiere die id Attribut eindeutig auf die Schaltfläche zu identifizieren, und die das Attribut type="button" - es sei denn, der Typ „Eintragen“, dann wird es nicht dazu führen, die Form eines normalen Postbacks zu tun. Dann sollten Sie Ihre Event-Handler sein:

$("#create").click(function() { 

Notiere die # die jQuery für ein Element mit der ID „erstellen“ aussehen erzählt.

Ein weiteres Problem: Ihr PHP enthält einen logischen Fehler. Sie rufen mysqli_query mehrmals für dieselbe Abfrage auf, anstatt das Ergebnis der früheren Abfrage zu überprüfen. Ihre if-Anweisungen, die mit dem Datenschutzwert zu tun haben, scheinen ebenfalls redundant zu sein - Sie ändern die Abfrage daher nicht. Dies ist, wie Sie es tun müssen:

if (isset($_POST["create"])) { 
$Privacy = mysqli_real_escape_string($db, $_POST['privacy']); 
$ETH = mysqli_real_escape_string($db, $_POST['ETH']); 
$Email_Phone_Number = $_SESSION['Email_Phone_Number']; 

$sql = "INSERT INTO library (Title, Privacy, Bio, User_iD) 
     VALUES ('$ETH', '$Privacy', 'testbio', (SELECT User_iD FROM logstart WHERE Email_Phone_Number='$Email_Phone_Number'))"; 
$result = mysqli_query($db, $sql); //return the result of the query for checking 

if ($result === true) { 
    echo "YES!"; 
    } else { 
    echo "No!"; 
    } 
} 

Siehe meinen Kommentar oben re SQL-Injection-Schwachstellen auch, die nicht direkt mit Ihrer Frage ist aber nicht Ihre dringende Aufmerksamkeit erfordern.

BEARBEITEN Es gibt auch eine Reihe anderer Probleme mit Ihrem Skript, einschließlich Syntaxfehlern, die es wahrscheinlich daran hindern, zu funktionieren. Hier ist eine feste/verbesserte Version:

$(document).ready(function() { 
    $("#create").click(function() { 

    var privacy = $(".select .input").text(); 

    $.ajax({ 
     type: "POST", 
     url: "../../database/database.php", 
     data: { "privacy": privacy }, 
     dataType: "html", 
     success: function(data) { 
     alert(data); 
     } 
    }); 
    }); 
}); 

Es gab fehlende Sprach runden Variablen markiert, manuelle Erstellung von Datenfolge (Codierung Probleme zu riskieren, die jQuery Pflege für Sie nehmen können, wenn Sie es sich um ein Objekt übergeben), Schließung der braucht keinen Namen und unnötige Verwendung von async: false (es sperrt den Browser einfach aus keinem guten Grund).


+0

Dies hat geholfen, aber ich bekomme immer noch Probleme mit einem nicht identifizierten Index für Datenschutz. Mit anderen Worten, mein Problem besteht immer noch darin, dieser php-Variablen keinen Wert zu geben. –

+0

Bei genauerer Betrachtung Ihres Skripts gibt es eine Reihe offensichtlicher Probleme mit Ihrem Code, einschließlich Syntaxfehlern, was bedeutet, dass das Skript gerade nicht läuft und daher wahrscheinlich immer noch den normalen Weg zurückgibt. Wenn Sie die Konsole Ihres Browsers überprüfen, werden Sie diese wahrscheinlich sehen, wenn Sie den Code ausführen. Ich werde die Frage in einem Moment mit einer festen Version bearbeiten – ADyson

Verwandte Themen