Problem beim Speichern von Variablen in Mysql

Joschi1711

Mitglied
Hallo, und wieder ein Problem bei meinem Projekt Build-Editor für GuildWars2.

mittels folgender Funktion übergebe ich Variablen an PHP:
Code:
function speichern(){
    $.ajax({
  url : 'js/data.php',
  type : 'post',
  data : {
  "imgw1": wf1,
  "imgw2": wf2,
    "imgw3": wf3,
    "imgw4": wf4,
    "imgw5": wf5,
    "hfskillname1": hfskillname1,
    "hfskillname2": hfskillname2,
    "hfskillname3": hfskillname3,
    "hfskillname4": hfskillname4,
    "hfskillname5": hfskillname5,
  }
  })   
}

die data.php:

Code:
 <?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
  $weaponsk1  = $_POST["imgw1"];  
    $weaponsk2  = $_POST["imgw2"];  
    $weaponsk3  = $_POST["imgw3"];
    $weaponsk4  = $_POST["imgw4"];  
    $weaponsk5  = $_POST["imgw5"] ;
    $helpsk1 = $_POST["hfskillname1"];
    $helpsk2  = $_POST["hfskillname2"];
    $helpsk3 = $_POST["hfskillname3"];
    $helpsk4 = $_POST["hfskillname4"];
    $helpsk5 = $_POST["hfskillname5"];
 
// folgende echo´s nur zur Kontrolle
 echo "$weaponsk1";
 echo "$weaponsk2";
 echo "$weaponsk3";
 echo "$weaponsk4";
 echo "$weaponsk5";
 echo "$helpsk1";
 echo "$helpsk2";
 echo "$helpsk3";
 echo "$helpsk4";
 echo "$helpsk5";

// 
 $dbUrl = "localhost";
$dbName = "***";
$dbUser = "***";
$dbPw = "***";


 $con = mysqli_connect($dbUrl, $dbUser, $dbPw, $dbName);
  if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();

  } else {

  $sucess = mysqli_query($con,"INSERT INTO builds (weaponsk1, weaponsk2, weaponsk3, weaponsk4, weaponsk5, helpsk1, helpsk2, helpsk3, helpsk4, helpsk5)
                       VALUES
                     (" .$weaponsk1. ", " .$weaponsk2. ", " .$weaponsk3. ", " .$weaponsk4. ", " .$weaponsk5. ", " .$helpsk1. ", " .$helpsk2. ", " .$helpsk3. ", " .$helpsk4. ", " .$helpsk5. ")");

  if (!$sucess) {
  die('Error: ' . mysqli_error($con));
  }

  $id = mysqli_insert_id($con);
 mysqli_close($con);
  echo $id;

  }
   
?>

irgendwo ist hier ein Fehler finde den aber nicht, folgende Ausgabe erfolgt:

Code:
s1s2s3s4s5Arkane BrillanzArkane MachtErdrüstungNebelformTornadoError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Brillanz, Arkane Macht, Erdrüstung, Nebelform, Tornado)' at line 3
 
Zuletzt bearbeitet von einem Moderator:
Hi

a) SQL-Injection, je nach Fall XSS usw. ... dein Code ist voller Sicherheitsprobleme.

b) Du solltest mit isset prüfen, ob überhaupt alle Variablen übergeben wurden, bevor du irgendwas damit machst

c)
SQL:
INSERT INTO tab(a,b,c) VALUES(a,b,c)
//vs
INSERT INTO tab(a,b,c) VALUES('a','b','c')

d) Logindaten aus deinem Beitrag entfernt, die sind nur für dich :)
 
Danke für den Hinweis @sheel ,
ISSET folgt noch und die LoginDaten sind nur lokale Testdaten, die logischerweise später in einer konfiguration.php abgelegt werden.
Vorab, auch alle möglichen Werte werden vor dem prod. Einsatz noch auf den richtigen zulässigen Syntax geprüft.
 
Ok, unglaublich aber war,
mit
Code:
INSERT INTO builds (weaponsk1, weaponsk2, weaponsk3, weaponsk4, weaponsk5, helpsk1, helpsk2, helpsk3, helpsk4, helpsk5)
                       VALUES
                     ('$weaponsk1', '$weaponsk2', '$weaponsk3', '$weaponsk4', '$weaponsk5', '$helpsk1', '$helpsk2', '$helpsk3', '$helpsk4', '$helpsk5')
[
läuft es
Datenbankversion bei XAMPP das Problem?
versuche das gleich mal auf dem Webserver...
 
Naja, warum "unglaublich"? Text in SQL gehört in Auführungszeichen, sonst ist es einfach falsch
(genau wie bei Punkt c meiner Antwort oben angedeutet) Und das hat nichts mit der DB-Version zu tun.
 
Ok verstanden ;)

suche mal nach den verschiedenen Typen an Variablen und DB Einrag-Typen, wie die Syntax ausehen müssen.

Danke für den Denkanstoß...
 
Zahlen können direkt ohne Anführungszeichen hin,
Keyörter wie null (für Spalten wo erlaubt) ebenfalls,
je nach DB gibt es auch true, false und Ähnliches (da auch),

nur Strings müssen in Anführungszeichen, damit beliebiger Text von SQL-Anweisungen
unterschieden werden kann (der einzutragende Text könnte ja zB. auch ein SQL-String sein)
 
Noch ne Frage zu dem ganzen, ist es möglich mehrdimensionale Arrays zu übergeben ?
Code:
build = new Array();
   build[0] = new Array(wf1, wf2, wf3, wf4, wf5),
   build[1] = new Array(hfskillname1, hfskillname2, hfskillname3, hfskillname4, hfskillname5);

wird an die data.php als "Build" übergeben und lässt sich mit
Code:
 $Build  = $_POST["Build"];  
 echo $Build[0][0];
usw.
wieder auslesen...

kann ich das auch in das INSERT INTO als VALUES('$Build[0][0] usw. übergeben, da bekomme ich nen Fehler:

<b>Notice</b>: Array to string conversion in <b>D:\xampp\htdocs\Builds\js\data.php</b> on line <b>55
 

Neue Beiträge

Zurück