...wieso funktioniert das mysqli_query nicht?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
    Klar geht das nicht, Du hast ja auch einen Fehler im Code:

                    $sql = "INSERT INTO ".$dbuname." ('";

    Außerdem machst Du das fürchterlich kompliziert.

    while(list(....

    ist echt umständlich. Nimm mal 

    foreach($benutzer as $key => $value) {

    Das hier:... omgomgomg, wart, ich schreib Dir das einmal KOMPLETT neu :)))

GoodbyeKitty1  15.01.2016, 18:03
<?php // immer kleinschreiben, ganz am Ende brauchst Du kein schließendes '? >'  session_start();
error_reporting(E_ALL);

$tage = "|Mo|Di|Mi|Do|Fr|Sa|So";
$benutzer = [
"zs" => time(),
"0200" => $tage,
"0500" => $tage,
"0730" => $tage,
"0800" => $tage,
"1100" => $tage,
"1400" => $tage,
"1700" => $tage,
"2000" => $tage,
"2300" => $tage,
"feld1" => "Erstes Feld",
"feld2" => "Zweites Feld",
"feld3" => "Drittes Feld",
"feld4" => "Viertes Feld" ];

eintragen($benutzer, "plan");
unset($benutzer); // wozu? function eintragen($benutzer, $dbTableName) {
$dbserver = "localhost";
$dbname = "tp";
$dbuser = "root";
$dbpass = "???????";

$connectionId = mysqli_connect ($dbserver, $dbuser, $dbpass, $dbname);
if (!mysqli_select_db ($connectionId, $dbname)) {
die ("Keine Verbindung zur Datenbank");
}

$sql = "INSERT INTO ".$dbTableName." ";
$sql.= " (".implode(",", array_keys($benutzer)).")";
$sql.= "VALUES ('";
$sql.= implode("', '", $benutzer); // hier wird NICHT gequotet, das ist gefährlich! Schau Dir mal "prepared statements" an $sql.= "');";

mysqli_query ($connectionId, $sql);

if (mysqli_affected_rows ($connectionId) > 0) {
echo "Daten erfolgreich eingefügt.<br>".PHP_EOL;
}
else {
echo "<HR>Fehler beim Einfügen der Daten.<br>\n";
mysqli_errorhandler($connectionId, "Daten NEU hinzufügen gescheitert", "<b>".$sql."</b>");
echo "<HR>";
}
}

function mysqli_errorhandler($connectionId, $problem, $query = "") {
echo "<span style=\"color:red\"><b>Datenbankfehler:</b></span><br />".PHP_EOL;
echo "Problem: ".$problem."<br />".PHP_EOL;
if($query != "")
{
echo "Query: ".$query."<br />".PHP_EOL;
}
echo "mysqli: " . mysqli_errno($connectionId) . " - " . mysqli_error($connectionId) . "<br /><br />".PHP_EOL;
}
0
waswesich 
Fragesteller
 15.01.2016, 18:42
@GoodbyeKitty1

Hallo GoodbyeKitty1, also dein implode mit array_keys, einfach nur genial ;-) und erst dein Das hier:... omgomgomg, wart, ich schreib Dir das einmal KOMPLETT neu :))) ich könnt mich wegtun, schön dass du Spaß verstehst und auch genauso weitergeben kannst. ABER, der Dummdäämliche Fehler: mysqli: 1064 - 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 '0200,0500,0730,0800,1100,1400,1700,2000,2300,feld1,feld2,feld3,feld4) VALUES ('1'... at line 1, kömmt immer noch :-( Auf jeden Fall mal recht herzliches Dankeschön für deine wirklich sehr schnelle Antwort ;-)

0
GoodbyeKitty1  15.01.2016, 18:48
@waswesich

hehe ;)

Oh... das sehe ich jetzt erst - Du kannst in einer MySQL den einzelnen Columns (Spalten) natürlich keine numerischen Strings als Namen geben - deshalb geht das auch nicht. Schick mal das Create-Statement Deiner Tabelle ("SHOW CREATE TABLE plan;")

0
maximilianus7  15.01.2016, 20:40
@GoodbyeKitty1

kannst du schon. aber solche syntaktisch problematisch oder mehrdeutige namen musst du dann bei mysql in backticks (`) setzen.
das kannst du dann beim 1. implode so ähnlich machen.

0
GoodbyeKitty1  15.01.2016, 20:43
@maximilianus7

oha, stimmt sogar

Identifiers may begin with a digit but unless quoted may not consist solely of digits.

aber dreckig ist das schon... ;)

0
waswesich 
Fragesteller
 15.01.2016, 20:53
@GoodbyeKitty1

Hallo #GoodbyeKitty1: Keine numerischen Strings als Namen. Dass war der ausschlaggebende Punkt, ich hab jetzt einfach noch ein 'z' vorne angestellt, und siehe da, sogar mein Code funktionierte :-)
Man Man Man, was würd ich nur ohne solche Leuts wie dir machen, wahrscheinlich Dumm Sterben :-) :-) :-) Viiiiielen Dank für deine Mühe, hast was gut ;-)

1

Nun dass du es dir ziemlich schwer machst, wurde dir ja schon gesagt.

Die Fehlermeldung lässt vermuten, dass du die Spalten 0200, 0500, 0730, 0800, 1100, 1400, 1700, 2000, 2300, feld1, feld2, feld3 und feld4 nicht in deiner Tabelle hast.

Ansonsten solltest du uns ggf. mal ausführlicher erklären was du genau vor hast, wie der Tabellenaufbau aussieht, ob der Insert ohne PHP direkt in die DB klappt, wie deine mittels PHP zusammengesetzte SQL Abfrage aussieht und welchen Fehler du genau bekommst.

Dein Code lässt vermuten, dass dein Problem sehr viel besser und einfacher zu lösen ist. Auch solltest du generell ein wenig an deinem Code arbeiten. Die Einrückung sieht höchst seltsam aus und ist nicht konsistent und die Namen der Variablen sind auch zum schreien.

Ist nicht böse gemeint aber gewöhne dir gleich etwas anderes an, so verstehst du später noch was du geschrieben hast und sofern andere mal auf deinen Code schauen verstehen sie auch wesentlich schneller was du vor hast. Wenn Sachen gut programmiert sind lesen sie sich quasi fast wie ein englischer Satz.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012
waswesich 
Fragesteller
 15.01.2016, 20:47

Hallo #apachy, die Spalten sind alle vorhanden ;-) Problem wurde von #GoodbyeKitty1 schon gelöst. Keine numerischen Strings als Namen, dennoch vielen Dank für deine Antwort.

1