Frage von waswesich, 90

...wieso funktioniert das mysqli_query nicht?

Hallo, ich habe etwas rumgebastelt und wollte eigentlich nur ein paar Daten in eine Datenbank schreiben, aber irgendwie tut das Programm nicht was es soll. Leider kann ich mit der Fehlermeldung nicht wirklich was anfangen. Wäre net wenn sich jemand bitte mal etwas Zeit nehmen könnte um ma drüber zu schauen. Dankee ;-)

Code: http://pastebin.com/KSGzF46A

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von GoodbyeKitty1, 64
    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 :)))

Kommentar von GoodbyeKitty1 ,
<?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;
}
Kommentar von waswesich ,

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 ;-)

Kommentar von GoodbyeKitty1 ,

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;")

Kommentar von maximilianus7 ,

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.

Kommentar von GoodbyeKitty1 ,

oha, stimmt sogar

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

aber dreckig ist das schon... ;)

Kommentar von waswesich ,

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 ;-)

Antwort
von apachy, 48

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.

Kommentar von waswesich ,

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.

Keine passende Antwort gefunden?

Fragen Sie die Community