online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Deathfun vom 05.07.2020, 01:11 Options

Lösung

method="post"

Hallo alle miteinander -

ich werkel grade an ein paar neuen Projekten und mir stellt sich ein Problem:


Ich habe eine Tabelle:
"ID" "termin" "zeitraum" "tätigkeit" "helfermin" "helfermax"

ID ist als "INT" "UNSIGNED" "NOT NULL" "auto_increment" "INDEX"

Demnach sollte die ID mit jedem eintrag um eins steigen bzw. es kann jede zahl nur einmal vorhanden sein, der Ordnung zurliebe.

Jetzt stelle ich die Verbindung zur DB her und lasse sie befüllen.
    $tabellenname="Todo";
    $sql="INSERT INTO $tabellenname (`ID`, `termin`, `zeitraum`,   `tätigkeit`, `helfermin`, `helfermax`) 
   values
   (NULL,
   '".$_POST['termin']."',
   '".$_POST['zeitraum']."',
   '".$_POST['tätigkeit']."',
   '".$_POST['helfermin']."',
   '".$_POST['helfermax']."',
   now())";



Da ist nun das Problem:
Wenn ich es so abschicke wird nichts in die Datenbank geschrieben.

Fehler bekomme ich dazu auch nicht angegeben -
zum Fehler anzeigen verwende ich:
    error_reporting(E_ALL);
    ini_set('display_errors', '1'); 



Lasse ich die "NULL" Zeile komplett weg funktioniert alles,
zumindest das senden.
Nun steht aber in der Tabelle auf "ID" Position der Inhalt der "termin" feldes.
Das leuchtet auch ein.


Lass ich die "$_POST" komplett weg
und füge alles per Hand ein funktioniert es wie vorgesehen.





Hier der gesamte code:



<html><head>
<title>Termin eintragen</titel>
</head>
<body>
<h1>Termin eintragen</h1>

<?php
      /*  DEBUGGING
    error_reporting(E_ALL);
    ini_set('display_errors', '1'); 
              */
if($_POST['flag']==1)
{
$_POST['termin']=trim($_POST['termin']);
$_POST['zeitraum']=trim($_POST['zeitraum']);
$_POST['tätigkeit']=trim($_POST['tätigkeit']);
$_POST['helfermin']=trim($_POST['helfermin']);
$_POST['helfermax']=trim($_POST['helfermax']);

$_POST['termin']=strip_tags($_POST['termin']);
$_POST['zeitraum']=strip_tags($_POST['zeitraum']);
$_POST['tätigkeit']=strip_tags($_POST['tätigkeit']);
$_POST['helfermin']=strip_tags($_POST['helfermin']);
$_POST['helfermax']=strip_tags($_POST['helfermax']);

if(!$_POST['termin']){$fehler="Bitte geben Sie einen Termin ein. <br>";}
if(!$_POST['zeitraum']){$fehler="Bitte geben Sie einen Zeitraum ein. <br>";}
if(!$_POST['tätigkeit']){$fehler="Bitte geben Sie eine Beschreibung der Tätigkeit ein. <br>";}
if(!$_POST['helfermin']){$fehler="Bitte geben Sie die Zahl der mindestens benötigten Helfer ein. <br>";}
if(!$_POST['helfermax']){$fehler="Bitte geben Sie die Zahl der maximal benötigten Helfer ein. <br>";}

if($fehler)
{
$meldung="<h2><font color=red>".$fehler."</font></h2>";
unset($_POST['flag']);
}
else

// Hier kommt die Übertragung

{
$tabellenname="Todo";
$sql="INSERT INTO $tabellenname (`ID`, `termin`, `zeitraum`, `tätigkeit`, `helfermin`, `helfermax`) 
values
(NULL,
'".$_POST['termin']."',
'".$_POST['zeitraum']."',
'".$_POST['tätigkeit']."',
'".$_POST['helfermin']."',
'".$_POST['helfermax']."',
now())";


$host = "localhost";
$username = "Fabian";
$passw = "";
$db = "SQL1";

$link = mysql_connect("$host", "$username", "$passw");
mysql_select_db($db,  $link);
mysql_query($sql, $link);


$meldung="<h2><font color=green> Ihre Angaben wurden aufgenommen und werden in Kürze veröffentlicht.</font></h2>
<a href=\"www.unknownlink.de/xy\">Weiter</a>";
}
echo $meldung;
}
if(!$_POST['flag'])
{
?>

	<form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
	<input type="hidden" name="flag" value="1">
	<p>Termin:<br>
	<input type="text" name="termin" value="<?php echo $_POST['termin']; ?>"> </p>
	<p>Zeitraum:<br>
	<input type="text" name="zeitraum" value="<?php echo $_POST['zeitraum']; ?>"> </p>
	<p>Tätigkeit:<br>
	<textarea name="tätigkeit"> <?php echo $_POST['tätigkeit']; ?>
	</textarea>
	</p>
	<p>Helfer minimum:<br>
	<input type="text" name="helfermin" value="<?php echo $_POST['helfermin']; ?>"> </p>
	<p>Helfer maximum:<br>
	<input type="text" name="helfermax" value="<?php echo $_POST['helfermax']; ?>"> </p>
	<input type="submit" value="eintragen">
	</form>
	<?php
	}
	?>
</body></html>





Schoneinmal danke fürs anschauen
Deathfun


Antwort schreiben

Antwort 1 von otimac vom 05.07.2020, 03:25 Options

hai deathfun,

lass mal in der zeile
$sql="INSERT INTO $tabellenname (`ID`, `termin`, `zeitraum`,   `tätigkeit`, `helfermin`, `helfermax`) 

die id weg
und dann laesst das null weg

cu oti

Antwort 2 von Supermax vom 05.07.2020, 09:08 Options

Außerdem solltest du Umlaute und andere Sonderzeichen in Feldnamen vermeiden, also statt "tätigkeit" besser "taetigkeit", sonst kann es spätestens wenn du mal auf einen andern Server mit einer anders konfigurierten Datenbank übersiedelst zu Problemen kommen.

Zweitens solltest du alle Werte, die aus dem Formular kommen, vor dem Eintragen in die DB mit mysql_real_escape_string($_POST[....]) in eine "sichere" Form bringen bzw. bei Zahlen entsprechend mit intval() oder floatval(); das mag zwar bei einem privaten/Hobbyprojekt überflüssig erscheinen, aber spätestens wenn dein Projekt öffentlich per WWW erreichbar ist, öffnest du mit deinem Code "SQL-Injection" Angriffen Tür und Tor, außerdem kann es auch so Probleme geben, wenn einer der Formularwerte z.B. ein einfaches Hochkomma ' enthält, im besten Fall bekommst du nur einen Datenbankfehler, im schlimmsten Fall ist alles bis zum unbeabsichtigten Löschen oder verändern von Datensätzen möglich.

Antwort 3 von Deathfun vom 05.07.2020, 12:31 Options

Hallo,

ersteinmal danke für die Antworten.


Durch das weglassen von `ID` in beiden Teilen des INSERT

        $sql="INSERT INTO $tabellenname (`ID`, `termin`, `zeitraum`,   `tätigkeit`, `helfermin`, `helfermax`)

Ist das Problem leider nicht gelöst.
Wenn ich es so Teste, also ohne `ID` und NULL wird nichts
in die Tabelle geschrieben.

Es scheint so, dass ein Wert für die Tabellenposition angegeben werden muss,
obwolh diese sich von selbst in der Tabelle setzt (normalerweise "NULL")


#----------

Das mit den "ä" "ö" usw. habe ich geändert, das sehe ich auch ein.

#----------


Köntest du das mit
       mysql_real_escape_string($_POST[....])

einmal näher erklären zB wie genau ich es in mein Code einbauen
muss und was genau es bewirkt.




Gruß Deathfun

Antwort 4 von son_quatsch vom 07.07.2020, 08:56 Options

Tausche die folgenden 3 Zeilen

$link = mysql_connect("$host", "$username", "$passw");
mysql_select_db($db,  $link);
mysql_query($sql, $link);


...gegen die aus:

$link = mysql_connect("$host", "$username", "$passw") or die('connect: '. mysql_error());
mysql_select_db($db,  $link) or die('select: '. mysql_error());
mysql_query($sql, $link) or die('query: '. mysql_error());


...dann siehst du auch, welchen möglichen Fehler die DB zurückgibt.

Zu mysql_real_escape_string() wäre wohl am besten ein Blick in die Doku mit ihren zahlreichen Beispielen: http://de2.php.net/manual/de/function.mysql-real-escape-string.php

Antwort 5 von MixMax vom 07.07.2020, 10:02 Options

teste mal
    $sql="INSERT INTO $tabellenname (termin, zeitraum,   taetigkeit, helfermin, helfermax) 
   values
   ('".$_POST['termin']."',
   '".$_POST['zeitraum']."',
   '".$_POST['tätigkeit']."',
   '".$_POST['helfermin']."',
   '".$_POST['helfermax']."',
   now())";

echo mysql_error();

Antwort 6 von Deathfun vom 08.07.2020, 14:57 Options

So auch euch danke für eure Antworten.


Mach dem anwenden von son_quatsch tipp,
bekomme ich diese Meldung ausgegeben.

           query: Column count doesn't match value count at row 1



Ich denke mal das an dieser Stelle der Fehler liegt.


Ich versuche mal herauszufinden was da genau nicht passt, würde mich aber über einen Vorschlag eurerseits sehr freuen.



Gruß Deathfun

Antwort 7 von son_quatsch vom 08.07.2020, 15:19 OptionsLösung

Lösung
Die Meldung ist eindeutig: "Column count" sind die Anzahl der Spalten (das sind ID, termin, zeitraum, tätigkeit, helfermin, helfermax - also 6), "value count" sind die Anzahl der Werte (das sind NULL, $_POST['termin'], $_POST['zeitraum'], $_POST['tätigkeit'], $_POST['helfermin'], $_POST['helfermax'], now() - also 7) - und die sind nicht gleich.

Folglich stellt sich die Frage: warum willst du noch zusätzlich "now()" in eine Spalte einfügen, die du gar nicht genannt hast? Entferne , now() (ja, ich habs auch erst seit eben gesehen)

Antwort 8 von Deathfun vom 08.07.2020, 16:29 Options

Hallo,




Oh mein Gott!

Das hätte ich auch wirklich sehen können....



Nuja es ist passiert nun bin ich schlauer :)


Vielen dank für eure Hilfe es funktioniert nun wunderbar.


Gruß Deathfun

Ähnliche Themen

Select übergabe im selben Dokument
NorbertG  11.03.2007 - 59 Hits - 3 Antworten

Mit PHP textdatei online bearbetien
manwe  04.06.2007 - 128 Hits - 6 Antworten

Fehlermeldung beim versenden des Formulares?!
actofjustice  21.01.2008 - 17 Hits - 9 Antworten

In Mysql Datenbank schreiben
schojo  13.05.2008 - 55 Hits - 17 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Sun Jan 25 18:15:21 2026