2015-08-23 3 views
-3

Я не вижу, что не так с этим кодом?Отправить кнопку - форма для MySQL

HTML

<form id="msform" method="post" type="submit" name="submit" action="oddaj.php"> 
     <!-- progressbar -->    
     <ul id="progressbar"> 
      <li class="active">Kontaktne informacije</li>     
      <li>Podatki o vozilu</li>     
      <li>Cena vozila</li>     
     </ul>    
     <!-- fieldsets -->    
     <fieldset> 
      <h2 class="fs-title">Oddaj vozilo v prodajo</h2> 
      <h3 class="fs-subtitle">Kontaktne informacije</h3> 
      <input type="text" name="ime" pattern="[a-žA-ž0-9]+" placeholder="Ime in priimek" required /> 
      <input type="text" name="telefonska" pattern="^\d{3}-\d{3}-\d{3}$" placeholder="Telefonska številka" /> 
      <input type="email" name="email" required placeholder="Email naslov" required /> 
      <input type="button" name="next" class="next action-button" value="Nadaljuj" /> 
     </fieldset>       
     <fieldset> 
      <h2 class="fs-title">Podatki o vozilu</h2> 
      <h3 class="fs-subtitle">Natančno posredujte podatke!</h3> 
      <input type="text" name="twitter" placeholder="Naslov, kjer se nahaja vozilo" /> 
      <input type="text" name="facebook" placeholder="Minimalna cena vozila" /> 
      <input type="text" name="gplus" placeholder="Izberite trajanje dražbe" /> 
      <input type="button" name="previous" class="previous action-button" value="Previous" /> 
      <input type="submit" form="msform" name="submit" class="submit action-button" value="Submit" /> 
     </fieldset>    
    </form>   

PHP

<?php 
/* Attempt MySQL server connection. Assuming you are running MySQL 
server with default setting (user 'root' with no password) */ 
$link = mysqli_connect("host", "username", "password", "database"); 

// Check connection 
if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 

// Escape user inputs for security 
$ime = mysqli_real_escape_string($link, $_POST['ime']); 
$telefonska = mysqli_real_escape_string($link, $_POST['telefonska']); 
$email = mysqli_real_escape_string($link, $_POST['email']); 
$slika = mysqli_real_escape_string($link, $_POST['slika']); 

// attempt insert query execution 
$sql = "INSERT INTO oddaja (ime, telefonska, email) VALUES ('$ime', '$telefonska', '$email', '$slika')"; 
if(mysqli_query($link, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

// close connection 
mysqli_close($link); 
?> 

I`ve сделал все. Попробуйте использовать на одной странице (action = ""), POST, GET. GET даже не изменил URI. Если я посещаю файл PHP (для отправки), он сохраняет запись в базу данных, но значения пустые.

+0

это одна вещь '<форма тип = "отправить" имя = "отправить"' и с помощью GET массивов по методу POST. Изменить: ах, вы отредактировали.Nice Stealth ;-) –

+0

затем 3 столбца и 4 значения –

+0

какая ошибка у вас? – Jaylen

ответ

0

Чтобы вы начали отлаживать свой код, как босс.

Список возможных ошибок, которые могут

больше появляться
  • Являются HTML разметка действует?
  • Есть переменные POST в PHP?
  • Является ли соединение MySQLI успешным?
  • Есть ли ошибки в SQL?

Адресация ошибки

Так, чтобы проверить на наличие ошибок в HTML-разметке сначала должны быть знакомы с HTML. Если вы arent, то google каждый элемент, чтобы вы узнали о них, прочитайте об их свойствах, а после этого, если вы уверены, что разметка HTML верна, начните отладку на стороне сервера.

var_dump является большого способом быстро получить взгляд на вещи, использовать его, если у вас есть какие-либо проблемы, если они используются правильно, вы должны решить большинство проблем.

Если MySQLI connection не увенчались успехом, вам необходимо проверить свои учетные данные и имя базы данных.

Если есть ошибки в SQL, вы должны увидеть, что сервер жалуется на это IF вы установили error_reporting правильно.

Ваш код очень процедурный, и вы не используете подготовленные заявления. There are numerous questions and discussions regarding procedural vs oop, но в нижней строке важно понимать, как сделать код понятным и простым в обслуживании.

Я настоятельно рекомендую вам рассмотреть prepared statements, потому что таким образом запрос и данные отправляются на SQL-сервер отдельно, и это хорошо, потому что корень проблемы SQL-инъекции - это смешение кода и данные. Here - отличный ответ на это благодаря @Your Common Sense.

И вот мой вклад в отношении кода - предложение более объектно-ориентированного способа вашего кода, в котором используются подготовленные операторы.

HTML

<form id="msform" method="post" type="submit" name="submit" action="oddaj.php"> 
    <!-- progressbar -->    
    <ul id="progressbar"> 
     <li class="active">Kontaktne informacije</li>     
     <li>Podatki o vozilu</li>     
     <li>Cena vozila</li>     
    </ul>    
    <!-- fieldsets -->    
    <fieldset> 
     <h2 class="fs-title">Oddaj vozilo v prodajo</h2> 
     <h3 class="fs-subtitle">Kontaktne informacije</h3> 
     <input type="text" name="ime" pattern="[a-žA-ž0-9]+" placeholder="Ime in priimek" required /> 
     <input type="text" name="telefonska" pattern="^\d{3}-\d{3}-\d{3}$" placeholder="Telefonska številka" /> 
     <input type="email" name="email" required placeholder="Email naslov" required /> 
     <input type="button" name="next" class="next action-button" value="Nadaljuj" /> 
    </fieldset>       
    <fieldset> 
     <h2 class="fs-title">Podatki o vozilu</h2> 
     <h3 class="fs-subtitle">Natančno posredujte podatke!</h3> 
     <input type="text" name="twitter" placeholder="Naslov, kjer se nahaja vozilo" /> 
     <input type="text" name="facebook" placeholder="Minimalna cena vozila" /> 
     <input type="text" name="gplus" placeholder="Izberite trajanje dražbe" /> 
     <input type="button" name="previous" class="previous action-button" value="Previous" /> 
     <input type="submit" form="msform" name="submit" class="submit action-button" value="Submit" /> 
    </fieldset>    
</form>  

PHP

// if the POST variables are set 
if (isset($_POST['ime']) && $_POST['telefonska'] && $_POST['email'] && $_POST['slika']) { 

    // Object oriented style 
    $ime = mysqli_real_escape_string($_POST['ime']); 
    $telefonska = mysqli_real_escape_string($_POST['telefonska']); 
    $email = mysqli_real_escape_string($_POST['email']); 

    // Object oriented style 
    $mysqli = new mysqli("host", "username", "password", "database"); 

    // If there is an error exit 
    if ($mysqli->connect_errno) { 
     printf("ERROR: Could not connect. %s\n", $mysqli->connect_error); 
     exit(); 
    } 

    // Prepare the statement 
    $stmt = $mysqli->prepare("INSERT INTO oddaja (ime, telefonska, email) VALUES (?,?,?)"); 
    // Bind the parameters 
    $stmt->bind_param($ime,$telefonska,$email); 
    // Execute the query 
    $stmt->execute(); 
    // Close the connection 
    $stmt->close(); 
} 
1

У вас есть это в обоих ваших форм тегов и ваши кнопки отправки

type="submit" name="submit" 

Те должны быть удалены из формы тегов.

  • Это противоречиво.

Затем вы используете 3 столбца в своем запросе и 4 значения.

  • В вашем запросе отсутствует столбец для $slika.

  • Я также заметил, что в вашей форме нет атрибута имени «slika» или соответствующего элемента. Это само по себе должно вызывать неопределенный индекс slika извещение.

Plus, если форма и PHP/MySQL находятся внутри одного файла, вам нужно будет использовать !empty() и/или isset() против ваших массивов POST. В любом случае лучше всего проверять пустые поля.

Если это так, вы получите неопределенные уведомления об индексах.

т.е .:

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

    && !empty($_POST['ime']) 
    && !empty($_POST['telefonska']) 
    && !empty($_POST['email']) 
    && !empty($_POST['slika']) 
) 
{ 
// do something 
} 

else{ 
    echo "Something failed. Error reporting/logs will tell you."; 
} 

Используйте инструменты, которые находятся в вашем полном распоряжении.

Добавить error reporting в начало файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Отображение ошибок не должно быть сделано только в постановке, и никогда производства.

  • var_dump();
  • print_r();

Чтобы увидеть, что проходит через или нет.


Sidenote:

Это mysqli_connect("host" - Если host не репрезентативное значение, то оно должно читаться как localhost. Просто говорю.

Смежные вопросы