2016-11-23 10 views
0

Versuchen, Daten in meine Tabelle einzufügen, aber ich bekomme immer einen undefinierten Index, weil "kein Wert gesetzt, wenn ich mein Formular absende". Die if (isset($_POST['submit'])) löscht meinen Fehler, auch wenn ich die .php allein ausführen, aber keine Daten werden eingefügt, wenn ich mein Formular absende. Jede Hilfe wird geschätzt. DankeHTML-Post zu PHP

Mein form.html

<form name="supportForm" class="form" action="database.php" method="POST" onsubmit="return validateForm()"> 

<label>Name:</label> 
<input type="text" name="name"/> 
<br/> 

<label>Client ID:</label> 
<input type="text" name="clientID"/> 
<br/> 

<label>E-mail address:</label> 
<input type="email" name="email"/> 
<br/> 

<label>Phone number:</label> 
<input type="tel" name="tel"/> 
<br/> 

<br/> 
Support Type:<br> 
<input type="radio" name="suppType" value="Question/Inquiry">Question/Inquiry<br> 
<input type="radio" name="suppType" value="Software">Software Issue<br> 
<input type="radio" name="suppType" value="Hardware">Hardware Issue<br> 
<input type="radio" name="suppType" value="Connectivity">Connectivity<br> 
</br> 

Operating System: 
<select id="select"> 
    <option disabled selected value="">Choose a product</option> 
    <option value="w7" name="OS">Windows 7</option> 
    <option value="w8" name="OS">Windows 8/8.1</option> 
    <option value="w10" name="OS">Windows 10</option> 
</select> 

<br> </br> 

Problem Description: 
<br><textarea id="ta" rows="10" cols="80" name="pDesc"></textarea></br> 

<input type="checkbox" name="terms" value="agree"> 
<a href="#">I agree to the terms and conditions.</a> 

<br> </br> 
<input type="hidden" name="submitted" value="true"> 
<input type="submit" name="submit" onClick="validateSubmit()"> 
</form> 

Meine PHP-Datei

<?php 
//Creates static credentials 
define('DB_NAME', 'data'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', ''); 
define('DB_HOST', 'localhost'); 

//Creates connection to the database 
$con = new mysqli(DB_HOST, DB_USER, DB_PASSWORD); 

//Checks for connection 
if ($con->connect_error) { 
    die("Connection failed: " . $con->connect_error); 
} 

//If there are no connection, error 
if (!$con) { 
    die ('Could not connect' . mysqli_error()); 
} 

//Select the 'data' database 
$con->select_db(DB_NAME); 

//Checks if database 'data' has been selected 
if (mysqli_select_db($con, DB_NAME)) { 
    echo "Database exists <br>"; 
} else { 
    echo "Database does not exist"; 
} 

//Successful connection message 
echo "Connected successfully <br>"; 

if (isset($_POST['submit'])) { 
//Retrieving values from support form 
    $name = $_POST['name']; 
    $clientID = $_POST['clientID']; 
    $email = $_POST['email']; 
    $tel = $_POST['tel']; 
    $suppType = $_POST['suppType']; 
    $OS = $_POST['OS']; 
    $pDesc = $_POST['pDesc']; 

//Inserting values into a table 
    $sql = "INSERT INTO info (fullname, clientID, email, tel, 
    suppType, OS, pDesc) 
    VALUES ($name, $clientID, $email, $tel, 
    $suppType, $OS, $pDesc)"; 

if (!mysqli_query($con, $sql)) { 
    echo "No data"; 
} else { 
    echo "Data recorded successfully"; 
} 
} 

//Closes connection 
mysqli_close($con); 
+2

aktualisieren Sie den Code von 'validateSubmit()' –

+0

Sie werden nicht die richtigen Ergebnisse erhalten, weil Sie einfache Anführungszeichen um Ihre '$ _POST' Werte hinzufügen sollten. Aber es ist auch nicht sicher, Sie sollten 'mysqli_real_escape_string()' oder vorbereitete Anweisungen verwenden. – Phiter

+0

Erhalten Sie Ihre Werte in der '$ _POST' in Ihrer PHP-Datei? Erhalten Sie "keine Daten" Fehler? – masterFly

Antwort

3

Sie name="OS" in <select> nicht in <option>

<select id="select" name="OS"> 
    <option disabled selected value="">Choose a product</option> 
    <option value="w7">Windows 7</option> 
    <option value="w8">Windows 8/8.1</option> 
    <option value="w10">Windows 10</option> 
</select> 

Und Sql muss so sein, schreiben müssen Sie brauche Apostrophe ('') aro und Variablen

$sql = "INSERT INTO `info` (fullname, clientID, email, tel, suppType, OS, pDesc) 
VALUES ('$name', '$clientID', '$email', '$tel', '$suppType', '$OS', '$pDesc')"; 
+0

Es ist das Problem, aber nicht das Hauptproblem! –

1

Sie zeigt uns nicht die validateForm() Funktion, deshalb werden wir nicht wirklich wissen, was dort passiert, dennoch habe ich das Formular bearbeitet und haben eine Validierung mit PHP,

, was Sie brauchen Zuerst müssen Sie überprüfen, ob alle Werte gesetzt sind, bevor Sie zum Einfügen in db springen, und sicherstellen, dass die E-Mail eine richtige E-Mail ist. Auch die Option select muss nicht auf dem Optionstag stehen habe nur Werte.

Dann Validieren, filtern und bereinigen Benutzereingaben vor dem Speichern in der Datenbank. Behandeln Sie jeden Benutzereintrag in Ihrem Formular wie von einem sehr gefährlichen Hacker.

Es gibt etwas vorbereitete Anweisungen genannt, in mysqli und PDO sollten Sie versuchen, das zu lernen, und es verwenden :) Sie werden es genießen, werde ich es Ihnen überlassen, wie um zu erforschen, warum Sie vorbereitete Anweisungen verwenden müssen.

Dies ist, wie Sie Ihren Code

<form name="supportForm" class="form" action="database.php" method="POST"> 
    <label>Name:</label> 
    <input type="text" name="name"/> 
    <br/> 
    <label>Client ID:</label> 
    <input type="text" name="clientID"/> 
    <br/> 
    <label>E-mail address:</label> 
    <input type="email" name="email"/> 
    <br/> 
    <label>Phone number:</label> 
    <input type="tel" name="tel"/> 
    <br/> 
    <br/> 
    Support Type:<br> 
    <input type="radio" name="suppType" value="Question/Inquiry">Question/Inquiry<br> 
    <input type="radio" name="suppType" value="Software">Software Issue<br> 
    <input type="radio" name="suppType" value="Hardware">Hardware Issue<br> 
    <input type="radio" name="suppType" value="Connectivity">Connectivity<br> 
    </br> 
    Operating System: 
    <select id="select" name="OS"> 
     <option value="0">Choose a product</option> 
     <option value="w7">Windows 7</option> 
     <option value="w8">Windows 8/8.1</option> 
     <option value="w10">Windows 10</option> 
    </select> 
    <br> </br> 
    Problem Description: 
    <br> 
    <textarea id="ta" rows="10" cols="80" name="pDesc"></textarea> 
    </br> 
    <input type="checkbox" name="terms" value="agree"> 
    <a href="#">I agree to the terms and conditions.</a> 
    <br> </br> 
    <input type="hidden" name="submitted" value="true"> 
    <input type="submit" name="submit"> 
</form> 

Dann database.php

<?php 
//Creates static credentials 
define('DB_NAME', 'data'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', ''); 
define('DB_HOST', 'localhost'); 

$errors = ""; //checking for errors 

//Creates connection to the database 
$con = new mysqli(DB_HOST, DB_USER, DB_PASSWORD); 

//Checks for connection 
if ($con->connect_error) { 
     die("Connection failed: " . $con->connect_error); 
} 

//If there are no connection, error 
if (!$con) { 
     die('Could not connect' . mysqli_error()); 
} 

//Select the 'data' database 
$con->select_db(DB_NAME); 

//Checks if database 'data' has been selected 
if (mysqli_select_db($con, DB_NAME)) { 
     echo "Database exists <br>"; 
} else { 
     echo "Database does not exist"; 
} 

//Successful connection message 
echo "Connected successfully <br>"; 

if (isset($_POST['submit'])) { 

     //check values are set 

     if (empty($_POST['name'])) { 

       echo "enter name"; 
       $errors++; 
     } else { 

       $name = userIput($_POST['name']); 
     } 

     if (empty($_POST['clientID'])) { 

       echo "enter id"; 
       $errors++; 
     } else { 

       $clientID = userIput($_POST['clientID']); 
     } 

     if (empty($_POST['email'])) { 

       echo "enter email"; 
       $errors++; 
     } else { 

       $email = userIput($_POST['email']); 

       if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) { //validate email, 

         echo "enter valid email"; 
         $errors++; 
       } 
     } 

     if (empty($_POST['tel'])) { 

       echo "enter tel"; 
       $errors++; 
     } else { 

       $tel = userIput($_POST['tel']); 
     } 

     if (!isset($_POST['suppType'])) { 

       echo "select one option"; 
       $errors++; 
     } else { 

       $suppType = userIput($_POST['suppType']); 
     } 

     if (isset($_REQUEST['OS']) && $_REQUEST['OS'] === "0") { 

       echo "please select product"; 
       $errors++; 
     } else { 

       $OS = userIput($_POST['OS']); 
     } 

     if (empty($_POST['pDesc'])) { 

       echo "enter Description"; 
       $errors++; 
     } else { 

       $pDesc = userIput($_POST['pDesc']); 
     } 


     if ($errors <= 0) { // No errors 

       //prepare and insert query 

       $sql = $con->prepare("INSERT INTO info (fullname, clientID, email, tel,suppType, OS, pDesc) VALUES (?, ?, ?, ?, ?, ?, ?)"); 
       $sql->bind_param("sssssss", $name, $clientID, $email, $tel, $suppType, $OS, $pDesc); 
       if ($sql->execute()) { 

         echo "records inserted successfully"; 
       } else { 

         echo "Could not insert " . mysqli_error(); 
       } 



       $sql->close(); 
       $con->close(); 




     } 

} 

function userIput($data) 
{ 

     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 


} 
?> 

hoffen, dass dies dazu beitragen, ein wenig aussehen sollte, und Sie werden das eine oder andere, und ich lernen Ich stehe immer für Anregungen zur Verfügung, nur wenn ich etwas verpasst habe. Danke