Column count doesn't match value count at row 1

strolch_007

Mitglied
Hallo,

ich habe 3 drop-dows zur Eingabe des Geburtstages (g_tag, g_monat und g_jahr):. Nach Auswahl eine Geburtstages gehts dann vom XHTML- Code (da stehen die 3 drop-downs) in die PHP-Prüfung auf vorhanden sein.

PHP:
			 isset($_POST['g_tag']) ? $_POST['g_tag']:"";
				 isset($_POST['g_monat']) ? $_POST['g_monat']:"";
				 isset($_POST['g_jahr']) ? $_POST['g_jahr']:"";

Dann wierden die drei drop-downs in das "date format wie folgt umgewandelt

PHP:
		  // Umwandlung von Geburtstag,- Monat- und Jahr in date format für die Datenbank
		
		  $g_tag = isset($_POST['g_tag']) ? intval($_POST['g_tag']):0;
  		  $g_monat = isset($_POST['g_monat']) ? intval($_POST['g_monat']):0;
  		  $g_jahr = isset($_POST['g_jahr']) ? intval($_POST['g_jahr']):0;
		  
   		  $birthday = ""; //leere Variable Geburtstag definieren

                 if ($g_tag > 0 && $g_monat > 0 && $g_jahr > 1900)
    
		       { 

				$birthday = $g_tag.'-'.$g_monat.'-'.$g_jahr;
		 
       		      }

Anschließend erfolgt die Formularprüfung auf evtl. Fehler. Ergibt die Prüfung keine Fehler soll alles in die Datenbank gespeichert werden.

PHP:
            $sql = "INSERT INTO
                                        datensicherung
                                    (.....

                                      birthday)      

                      VALUES (

                             ........
                             '".mysql_real_escape_string(trim($birthday['birthday']))."',
                             usw.

                                       )
		";

		    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
		   // oder Fehlerhinweis
			
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());


        echo "	blabla";

Mein kleines Testscript

PHP:
		echo $birthday;
		echo " <br />";

		// Uhrzeit setzen - Uhrzeit der Registrierung
			$confirm_code 	= time();

  			$timestamp = time();
   			$reg_time = date("H:i",$timestamp);

			echo $reg_time," Uhr";

zeigt mir auch die richtigen Eingaben an. Nur wenn ich das in die Datenbank speichern möchte kommt der im Titel genannte Fehlerhinweis.
Als Ausgabe seh ich beim Fehlerhinweis das--->>> '1', als Datum.
Wo liegt mein Fehler. - Undi ist es überhaupt sinnvoll das alles in ein date Format umzuwandeln. Mit den 3 dropw-downs in eine Datenbank speichern klappt nämlich wunderbar. Hab halt drei Datenfelder für ein Geburtsdatum. Erscheint mir etwas umständlich. Ich denke das Mysql date Format bringt mir beim auslesen mehr Vorteile als mein "dreifachgewuschtel".
Das Datenbankfeld sieht so aus:
Feld: birthday
Type: Date
Standard: NULL
Null: mit Häckchen bestätigt (liegts vielleicht daran?)
Geburtsdatum muß eigentlich zwingend angegeben werden, aber jetzt steht ja noch nichts drin.
Gruss
strolch_007
 
Hi,

Undi ist es überhaupt sinnvoll das alles in ein date Format umzuwandeln. Mit den 3 dropw-downs in eine Datenbank speichern klappt nämlich wunderbar. Hab halt drei Datenfelder für ein Geburtsdatum. Erscheint mir etwas umständlich. Ich denke das Mysql date Format bringt mir beim auslesen mehr Vorteile als mein "dreifachgewuschtel".

Wie, Du hast 3 Felder für das Datum? Ich seh nur eins, und Du baust die Daten aus den 3 Dropdowns dafür zusammen, das ist schon okay so. Nur nimmst Du die falsche Reihenfolge, ein MySQL-Datum sieht so aus: JJJJ-MM-TT. Das ist aber nicht der Grund für den Fehler.

Wenn Deine Abfrage fehlschlägt, solltest Du sie hier auch posten (Du gibst sie im Fehlerfall ja aus). Der PHP-Code, der sie generiert, nützt da in der Regel nicht, zumal Du ja auch da gekürzt hast. Bei diesem Fehler brauchen wir aber die komplette Abfrage.

LG
 
Hallo kuddeldaddeldu,


Wie, Du hast 3 Felder für das Datum? Ich seh nur eins,

Versteh ich nicht was du meinst. g_tag + g_monat + g_jahr sind bei mir 3. i$_POST hat seine Infos ja auch aus drei dropw-downs geholt. - Und in meiner Datenbank standen bis dato auch diese 3! Bezeichnungen. JETZT bin ich auf dem Weg zu versuchen aus diesen drei eines, nämlich birthday zu machen. Eine Fehlermeldung gibt es jetzt in meinem Testformulkar trotz

PHP:
error_reporting(E_ALL | E_STRICT);

gar keine mehr. Hab das mit dem Format (hoffentlich richtig) geändert. Ich sehe nur die Möglichkeit den kompletten PHP-Code zu posten (evtl an dich direkt ) weil er ziemlich umfangreich ist.. oder noch besser die komplette Seite incl. XHTML damit du dir das in Ruhe ansehen kannst. Ist das ok? Ich weiß ja nicht wieviel Code man hier posten darf oder soll....Es gibt nämlich auch noch eine kuriose Sache mt der E-Mailprüfung. aber des ist ja jetzt nicht das Thema.

PHP:
		  // Umwandlung von Geburtstag,- Monat- und Jahr in date Format für die Datenbank
		
		  $g_tag = isset($_POST['g_tag']) ? intval($_POST['g_tag']):0;
  		  $g_monat = isset($_POST['g_monat']) ? intval($_POST['g_monat']):0;
  		  $g_jahr = isset($_POST['g_jahr']) ? intval($_POST['g_jahr']):0;
		  
   		  $birthday = ""; //leere Variable Geburtstag definieren

                if ($g_tag > 0 && $g_monat > 0 && $g_jahr > 1900)
    
				{ 

				          $birthday = $g_jahr.'-'.$g_monat.'-'.$g_tag.'-';
		 
    				}
Sieht jetzt so aus.

Ich glaub der Fehler liegt im folgenden, weil ich mir nicht sicher bin ob ich $birthday so ansprechen darf zum abspeichern in eine Datenbank.

$sql = "INSERT INTO
datensicherung
(.....

birthday)

VALUES (

........
'".mysql_real_escape_string(trim($birthday['birthday']))."',
usw.

Gruss
strolch_007
 
Zuletzt bearbeitet:
Hi,

Ich sehe nur die Möglichkeit den kompletten PHP-Code zu posten (evtl an dich direkt ) weil er ziemlich umfangreich ist.. oder noch besser die komplette Seite incl. XHTML damit du dir das in Ruhe ansehen kannst. Ist das ok?

Nein, das ist nicht ok. Erstens: s. meine Signatur, zweitens wirst Du Verständnis dafür haben, dass ich keine Lust habe, mich durch einen umfangreichen Komplettcode zu wursteln. Poste den problematischen Teil Deines Codes. Du solltest Dir auch mal die Variable $sql ausgeben lassen, um zu sehen, wie die zusammengesetzte Query aussieht.

LG
 
Hallo kuddeldaddeldu,

ich habe sogar vollstes Verständnis dafür. Drum hab ich ja mal vorsichtig angefragt, weil ich keinen anderen Weg sah (glücklich war ich dabei auch nicht). Der Fehler lag genau da wo ich ihn vermutet hatte. Hab das Problem nun (nach 5 Stunden "fummeln", lesen und probieren) gelöst und alles läuft reibungslos. Mysql korrigiert natürlich nichts (ist ja auch ok so) , sondern schreibt dann einfach 0000.00.00 rein. Kann ja auch kener was für wenn ich den falschen PHP-Code schreibe!
So muß es wohl richtig aussehen.

PHP:
'".mysql_real_escape_string(trim($birthday))."',

Trotzdem vielen lieben Dank das du dich meiner angenommen hast! Ich "mach" halt erst so ca. 7 Wochen php und lern ja fleissig dazu. Ich finde es sehr schwer und bin für jede noch so kleine Hilfe sehr dankbar. Kannst ja noch mal über die eine PHP-Zeile "drüber huschen" obs wirklich so korrekt ist und auch einigermaßen sicher. Funktioniert auf jeden Fall mal:) - Mein PHP "läuft" jetzt ohne Fehler! Is ja auch was:)

Gruss
stroclh_007
 

Neue Beiträge

Zurück