2016-04-29 12 views
1

Wir entwickeln ein Helpdesk-System an unserem Arbeitsplatz (Gymnasium). Wir werden einige Gebrauchsanweisungen auf der Website bis hin zu einer Datenbank veröffentlichen.MySQL Fehler in PHP-Skript

$sql = "INSERT INTO usermanual (title, link, slug) VALUES ('$title', '$link', '$slug')"; 

Dies ist unser Code aus dem Formular zu erhalten:

<form action="inc/publish-manual.php" method="post" accept-charset="ISO-8859-1"> 
    <p> 
     <label for="Title">Tittel:</label> 
     <br> 
     <input type="text" name="title" id="title"> 
    </p> 
    <p> 
     <label for="Link">Link til brukerveiledning:</label> 
     <br> 
     <input type="text" name="link" id="link"> 
    </p> 
    <p> 
     <label for="Slug">Slug:</label> 
     <br> 
     <input type="text" name="slug" id="slug"> 
    </p> 
    <input type="submit" value="Publiser"> 
</form> 

Wenn wir dies laufen wir nur einen Fehler zu sagen:

ERROR: Was not able to execute INSERT INTO usermanual (title, link, slug) VALUES ('test', 'http://gauldal.vgs.no/upload/Gauldal/Bilder/Brukerveiledninger-IKT/Bruke%20Larermentor.pdf', 'test') 

Wenn wir die laufen SQL in der Datenbank funktioniert, aber nicht von unserem Skript. Wir haben uns lange damit beschäftigt, und jetzt brauchen wir ein paar frische Augen, um zu sehen, wo der Fehler ist.

+3

Bitte post 'publish-manual.php' Inhalt. –

+2

Wertvoller Tipp: vorbereitete Aussagen ... – Naruto

+0

Von Clement Levallois: Können Sie anhängen, wie Sie Ihre Datenbank verbinden? Außerdem haben Sie Benutzereingaben in Ihrer Abfrage nicht entgangen? – Random

Antwort

1
<?php 
header('Content-type: text/html; charset=ISO-8859-1'); 

include '../config.php'; 
$link = mysqli_connect($servername, $username, $password, $dbname); 

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

$title = mysqli_real_escape_string($link, $_POST['title']); 
$link = mysqli_real_escape_string($link, $_POST['link']); 

function slugify($title) 
{ 
    $text = iconv('utf-8', 'us-ascii//TRANSLIT', $title); 
    return strtolower(preg_replace('/[^A-Za-z0-9-]+/', '-', $title)); 
} 
$slug = slugify($title); 

$sql = "INSERT INTO usermanual (title, link, slug) VALUES ('$title', '$link', '$slug')"; 

if (mysqli_query($link, $sql)) { 
    header("location: ../admin.php"); 
} else { 
    echo "ERROR: Was not able to execute $sql " . mysqli_error($link); 
} 
?> 

Ich würde vorschlagen, einen DB-Link zu $ ​​Verbindung umbenennen:

$link = mysqli_connect($servername, $username, $password, $dbname); 

Weil es verwirrend aussieht, haben Sie 2 verschiedene "link" Variablen in Ihrem Code, und es könnte das Problem

sein
+0

@diEcho - es wird auch mit mysql funktionieren –

+0

Mit [vorbereitete Anweisungen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und dem ['bind_param'] (http: //php.net/manual/en/mysqli-stmt.bind-param.php) Methode zum Hinzufügen von Daten ist deutlich besser als manuelles Escaping. – tadman

+0

@diEcho lernen zu lesen –

0
<?php 
header('Content-type: text/html; charset=ISO-8859-1'); 
include '../config.php'; 
$link = mysqli_connect($servername, $username, $password, $dbname); 

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

$title = mysqli_real_escape_string($link, $_POST['title']); 
$link = mysqli_real_escape_string($link, $_POST['link']); 

function slugify($title) 
{ 
    $text = iconv('utf-8', 'us-ascii//TRANSLIT', $title); 
    return strtolower(preg_replace('/[^A-Za-z0-9-]+/', '-', $title)); 
} 
$slug = slugify($title); 

$sql = "INSERT INTO usermanual (title, link, slug) VALUES ('$title', '$link', '$slug')"; 

if (mysqli_query($link, $sql)) { 
    header("location: ../admin.php"); 
} else { 
    echo "ERROR: Was not able to execute $sql " . mysqli_error($link); 
} 
?> 

Dies ist die Datei publish-manual.php. Ich verbinde mich mit der Datenbank mit der Konfigurationsdatei.

Dies ist ein System, das wir auf vielen Dateien haben, und es funktioniert auf alles aber NICHT dieses.

+0

Können Sie bitte diesen Code zu Ihrer Frage hinzufügen – newman

+0

Ich mag, dass Sie die Dinge entkommen, das ist eine große Verbesserung, aber tun Sie es nicht so. Verwenden Sie [prepared statements] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und ['bind_param'] (http://php.net/manual/en/mysqli- stmt.bind-param.php) Methode zum Hinzufügen von Daten. – tadman