Eintragen von Daten per Formular in MySQL Datenbank

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Eintragen von Daten per Formular in MySQL Datenbank

Beitrag von volker58 »

hallo,

ich versuch ein formular zu basteln für eintragungen in eine db.

Code: Alles auswählen

<form method="post" action="dbeintrag2.php">

<table>

<tr>
<td>Name: <td>
<td><input type='text' name='name' size='40'></td>
</tr>
<tr>
<td>Züchter: <td>
<td><input type='text' name='zuechter'  size='40'></td>
</tr>
<tr>
<td>Eltern: <td>
<td><input type='text' name='eltern' size='40' ></td>
</tr>
<tr>
<td>Tubus: <td>
<td><input type='text' name='tubus' size='40' ></td>
</tr>
<tr>
<td>sepalen: <td>
<td><input type='text' name='sepalen' size='40' ></td>
</tr>
<tr>
<td>korolle: <td>
<td><input type='text' name='korolle' size='40' ></td>
</tr>
<tr>
<td>petalen: <td>
<td><input type='text' name='petalen' size='40' ></td>
</tr>
<tr>
<td>staubfaeden: <td>
<td><input type='text' name='staubfaeden' size='40' ></td>
</tr>
<tr>
<td>stempel: <td>
<td><input type='text' name='stempel' size='40' ></td>
</tr>
<tr>
<td>laub: <td>
<td><input type='text' name='laub' size='40' ></td>
</tr>
<tr>
<td>wuchs: <td>
<td><input type='text' name='wuchs' size='40' ></td>
</tr>
<tr>
<td>knospe: <td>
<td><input type='text' name='knospe' size='40' ></td>
</tr>
<tr>
<td>text: <td>
<td><input type='text' name='text' size='40' ></td>
</tr>
<tr>
<td>autor: <td>
<td><input type='text' name='autor' size='40' ></td>
</tr>
<tr>
<td>foto: <td>
<td><input type='text' name='foto' size='40' ></td>
</tr>
<tr>
<td>thumb: <td>
<td><input type='text' name='thumb' size='40' ></td>
</tr>
<tr>
<td>bild: <td>
<td><input type='text' name='bild' size='40' ></td>
</tr>

<tr><td colspan='3'>&nbsp;</td></tr>
<tr>
<td colspan='3' align='center'>
	<input type="submit">

	</td>
</tr>
</table>

</form>
und das php dazu

Code: Alles auswählen

<?php
mysql_connect("localhost","root","");
  mysql_select_db("dfg");
	

$name = $_POST["name"]; 
$zuechter = $_POST["zuechter"]; 
$eltern = $_POST["eltern"];
$tubus = $_POST["tubus"];
$sepalen = $_POST["sepalen"];
$korolle = $_POST["korolle"];
$petalen = $_POST["petalen"];
$staubfaeden = $_POST["staubfaeden"];
$stempel = $_POST["stempel"];
$laub = $_POST["laub"];
$wuchs = $_POST["wuchs"];
$knospe = $_POST["knospe"];
$text = $_POST["text"];
$autor = $_POST["autor"];
$foto = $_POST["foto"];
$thumb = $_POST["thumb"];
$bild = $_POST["bild"];



$eintrag = "(INSERT INTO galerie (id, name, zuechter, eltern, tubus, sepalen, korolle, petalen, staubfaeden, stempel, laub, wuchs, knospe, text, autor, foto, thumb, bild) 
VALUES ('$id','$name', '$zuechter', '$eltern', '$tubus', '$sepalen', '$korolle', '$petalen', '$staubfaeden', '$stempel', '$laub', '$wuchs', '$knospe', '$text', '$autor', '$foto', '$thumb', '$bild')"; 

$eintragen = mysql_query($eintrag);


?>
beim absenden kommt eine leere seite und er hat nichts eingetragen.

wird die nächste id in der db eigendlich automatisch vergeben oder muß ich das noch mit eintragen?
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Hallo,
wird die nächste id in der db eigendlich automatisch vergeben oder muß ich das noch mit eintragen?
Das kommt darauf an, ob das betreffende Feld mit einem automatischen Zähler versehen wurde oder nicht.
Bei der Gallerie ist das IMHO so.
Am besten vor dem Ausführen der SQL-Anweisung die Variable $eintrag mal mit echo $eintrag; anzeigen lassen und selber gegen die Tabelle laufen lassen.
Dann siehst du auch ggf. SQL-Fehler.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Beitrag von volker58 »

hallo,

das ganze hat mit phpbb nichts zutun. mit dem echo, kannst das mal so eintragen? ich habe da keine ahnung :(
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

[quote="volker58";p="88454"]das ganze hat mit phpbb nichts zutun.[/quote]
Von phpbB hatte ich auch nichts geschrieben ;)

[quote="volker58";p="88454"]mit dem echo, kannst das mal so eintragen? ich habe da keine ahnung :([/quote]
Einfach vor die Zeile

Code: Alles auswählen

$eintragen = mysql_query($eintrag); 
dieses einfügen:

Code: Alles auswählen

echo $eintrag; exit;
Dann wird die SQL-Anweisung angezeigt, aber noch nicht ausgelöst.
Und die kannst du dann kopieren und z. B. mit phpmyadmin direkt in der Datenbank ausführen, um zu sehen, ob und welche Fehler es gibt.

Allerdings fällt mir gerade auf, dass du vor INSERT INTO noch eine Klammer angegeben hast. Diese ist definitiv falsch und muss da raus.
Das kann dann auch bereits der Fehler sein...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Beitrag von volker58 »

danke erstmal.

die klammer habe ich raus gemacht, geht auch nicht.

das echo habe ich eingetragen, bekomme aber nichts angezeigt ?4

edit: es geht nur auf dem localem server nicht, auf dem server geht es.
Zuletzt geändert von volker58 am Mo 08.Jun, 2009 08:06, insgesamt 1-mal geändert.
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich nehme jetzt mal an, dass du die Verbindungsdaten auf dem Server angepasst hast?!?

Hm, wie ist denn die Tabelle selber aufgebaut?
Kannst du mal von der Struktur ein Backup hier posten?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Beitrag von volker58 »

hallo,

die daten mußte ich natürlich ändern

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS `galerie` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(250) NOT NULL default '',
  `zuechter` varchar(250) NOT NULL default '',
  `eltern` varchar(250) default NULL,
  `tubus` varchar(250) NOT NULL default '',
  `sepalen` varchar(250) NOT NULL default '',
  `korolle` varchar(250) NOT NULL default '',
  `petalen` varchar(250) default NULL,
  `staubfaeden` varchar(250) NOT NULL default '',
  `stempel` varchar(250) NOT NULL default '',
  `laub` varchar(250) NOT NULL default '',
  `wuchs` varchar(250) NOT NULL default '',
  `knospe` varchar(100) default NULL,
  `text` text NOT NULL,
  `autor` varchar(100) NOT NULL default '',
  `foto` varchar(100) NOT NULL default '',
  `thumb` varchar(250) NOT NULL default 'images/galerie/thumb/fanfare2.jpg',
  `bild` varchar(250) NOT NULL default 'images/galerie/gross/fanfare2.jpg',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=207 ;
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Also:

Das Feld "id" ist in deiner Tabelle auf auto_increment gesetzt, daher darf das Feld so zunächst nicht in der SQL-Anweisung enthalten sein, zumal es nach deinem Script auch leer wäre (böser Fehler!).

Also muss die Anweisung schon mal so lauten:

Code: Alles auswählen

$eintrag = "INSERT INTO galerie (name, zuechter, eltern, tubus, sepalen, korolle, petalen, staubfaeden, stempel, laub, wuchs, knospe, text, autor, foto, thumb, bild) 
VALUES ('$name', '$zuechter', '$eltern', '$tubus', '$sepalen', '$korolle', '$petalen', '$staubfaeden', '$stempel', '$laub', '$wuchs', '$knospe', '$text', '$autor', '$foto', '$thumb', '$bild')"; 
Dazu kommt, dass du blind, ja gar grob fahrlässig Formulardaten ohne weitere Prüfung in die Datenbank schreiben lässt.
Das ist eine echte Einladung für Hacker!!

Du solltest daher jeden Wert, den du übernehmen willst, zunächst prüfen, damit hier keine ernste Gefährdung deine Servers besteht.

Beispiel für Text:

Code: Alles auswählen

$name = (isset($_POST['name'])) ? str_replace("'", "''", htmlspecialchars(trim($_POST['name'])) : '');
Beispiel für Zahlen:

Code: Alles auswählen

$zahl = (isset($_POST['zahl'])) ? intval($_POST['zahl'])) : 0;
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Beitrag von volker58 »

hallo,

dasmit der ip hatte ich vergessen wieder rauszuhauen, danke.

das formular bekommt keiner zu sehen, ist nur für mich zu sehen und passwortgeschützt.
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

das formular bekommt keiner zu sehen, ist nur für mich zu sehen und passwortgeschützt.
Dennoch sollten diese einfachen Regeln beachtet werden. Besser ist das.
Denn: Sicher ist nur ein Offline-System ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Beitrag von volker58 »

okay, hast recht.

bekomme aber ein fehler


Parse error: syntax error, unexpected ':' in /home/web222/deut333/ftproot/....../eintragen/dbeintrag2.php on line 9

bei der zeile

Code: Alles auswählen

$name = (isset($_POST['name'])) ? str_replace("'", "''", htmlspecialchars(trim($_POST['name'])) : '');
Zuletzt geändert von volker58 am Di 09.Jun, 2009 12:00, insgesamt 2-mal geändert.
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Oh, da fehlt noch eine Klammer. So sollte es korrekt sein:

Code: Alles auswählen

$name = (isset($_POST['name'])) ? str_replace("'", "''", htmlspecialchars(trim($_POST['name']))) : '');
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Beitrag von volker58 »

nee, die ist nun zuviel, muß was anderes sein :(

Parse error: syntax error, unexpected ')' in /home/web222/deut333/ftproot/....../eintragen/dbeintrag2.php on line 9
Zuletzt geändert von volker58 am Di 09.Jun, 2009 12:00, insgesamt 2-mal geändert.
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Öh, nein, am Ende ist sie zu viel:

Code: Alles auswählen

$name = (isset($_POST['name'])) ? str_replace("'", "''", htmlspecialchars(trim($_POST['name']))) : '';
*ich sollte wirklich mal nur eine Sache bearbeiten und nicht 1001 auf einmal*
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Beitrag von volker58 »

danke, das passt nun :p
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Re: Eintragen von Daten per Formular in MySQL Datenbank

Beitrag von volker58 »

hallo,

ich hätte hier nochmal eine frage. wie kann ich es machen, das ich eine seite noch davor mach, wo das feld name nur ist, ich den name eingebe und auf weiter klick. ist der name vorhanden, stehen die daten in dem formular drin und ich kann änderungen machen, ist der name nicht vergeben, kommt das leeres formular
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Eintragen von Daten per Formular in MySQL Datenbank

Beitrag von oxpus »

Guten auch,

das würde ich mit einer Bedingung im Script machen.
Hier mal als Grundgerüst auf Basis deines Codes hier im Topic:

Code: Alles auswählen

<?php

$name = $_POST["name"];

// Aufruf, wenn das 2. Formular abgesendet wurde.
if ($name && $_POST['gesendet'])
{
	$zuechter = $_POST["zuechter"];
	$eltern = $_POST["eltern"];
	$tubus = $_POST["tubus"];
	$sepalen = $_POST["sepalen"];
	$korolle = $_POST["korolle"];
	$petalen = $_POST["petalen"];
	$staubfaeden = $_POST["staubfaeden"];
	$stempel = $_POST["stempel"];
	$laub = $_POST["laub"];
	$wuchs = $_POST["wuchs"];
	$knospe = $_POST["knospe"];
	$text = $_POST["text"];
	$autor = $_POST["autor"];
	$foto = $_POST["foto"];
	$thumb = $_POST["thumb"];
	$bild = $_POST["bild"];
	
	mysql_connect("localhost","root","");
	mysql_select_db("dfg");
	
	$eintrag = "(INSERT INTO galerie (id, name, zuechter, eltern, tubus, sepalen, korolle, petalen, staubfaeden, stempel, laub, wuchs, knospe, text, autor, foto, thumb, bild)
	VALUES ('$id','$name', '$zuechter', '$eltern', '$tubus', '$sepalen', '$korolle', '$petalen', '$staubfaeden', '$stempel', '$laub', '$wuchs', '$knospe', '$text', '$autor', '$foto', '$thumb', '$bild')";
	
	$eintragen = mysql_query($eintrag);
}
// Aufruf eigentliches Formular, wenn im Einstiegsformular ein Name angegeben und abgesendet wurde
else if ($name && $_POST['submit])
{
	// Hier das eigentliche Formular darstellen, wo alle Angaben eingetragen werden sollen.
	// Dabei kann man $name bereits als Wert in das Input-Feld übergeben, welches dann so aussehen würde:
	// Mit Templatesystem wie im phpBB
	// <input type="text" name="name" value="{NAME}" />
	// Über echo
	echo '<input type="text" name="name" value="' . $name . '" />;
}
// Aufruf der Einstiegsseite
else
{
	// Hier die erste Seite aufbauen / darstellen, wo zunächst nur der Name eingetragen werden soll
	// Durch das Konstrukt des Scripts würde diese Seite solange erscheinen, bis ein Name auf der "Einstiegsseite" angegeben wurde
}

?>
Und dazu das passende Formular für die erste Seite:

Code: Alles auswählen

<form action="url_zum_script" method="post" name="namensangabe">
<input type="text" size="50" name="name" value="" />&nbsp;<input type="submit" name="submit" value="Weiter" />
</form>
Und zuletzt musst du aus deinem Template die Zeile

Code: Alles auswählen

   <input type="submit">
ersetzen durch

Code: Alles auswählen

   <input type="submit" name="gesendet" value="Absenden" />
damit das Script in seiner Struktur auch funktionert.

Aber mal eine Frage zum Script selber:
Fragst du wirklich $_POST ab, ohne etwas zu prüfen und schickst die Inhalte auch ungeprüft direkt gegen die Datenbank?
Dann dürftest du das Script NIE öffentlich im Internet stehen haben, denn damit könnte man ruck zuck den Server ausspionieren oder gar ganz übernehmen!!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Re: Eintragen von Daten per Formular in MySQL Datenbank

Beitrag von volker58 »

hallo,

danke für deine hilfe, aber bekomme das nicht hin. ich hänge dir einfach mal mein gebastel an.
die daten werden nicht ausgelesen aus der db. dann fehlt doch bestimmt was, wenn der eintrag vorhanden ist und es nur geändert werden soll, sowas wie UPDATE galerie SET....
Zuletzt geändert von volker58 am So 17.Jan, 2010 06:50, insgesamt 1-mal geändert.
Gruss Volker

http://www.fuchsienfreunde.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Eintragen von Daten per Formular in MySQL Datenbank

Beitrag von oxpus »

Ähm, da muss ich dich leider bitten, dich an andere Foren zu wenden, da ich aktuell durch größere Kundenaufträge kaum Zeit habe, etwas anderes nebenher zu tun.
Sorry, aber ich kann dir wirklich nicht das gesamte Script bauen. Dafür fehlt mir aktuell schlicht die Zeit.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
volker58
Beiträge: 724
Registriert: Mo 27.Dez, 2004 19:22
Wohnort: Annaberg-Buchholz
Kontaktdaten:

Re: Eintragen von Daten per Formular in MySQL Datenbank

Beitrag von volker58 »

hallo,

okay, ist zu verstehen.
habe es nun auch hinbekommen, bis auf eine kleinigkeit, hoffe ich jedenfals.

ich möchte das nicht nach id, sondern nach namen sortiert angezeigt bekommen. die 2 sachen sind da bestimmt zuständig

Code: Alles auswählen

$sql_data_list = "SELECT ID, name FROM galerie";
    $qry_data_list = mysql_query($sql_data_list)
        or die(mysql_error());
und

Code: Alles auswählen

while($all_data = mysql_fetch_array($qry_data_list))    {    
        echo "[<a href=\"".$_SERVER['PHP_SELF']."?edit=".$all_data['ID']."\">Edit</a>] | ";
        echo $all_data['ID']." | ".$all_data['name']."<br />";
    } 
könntest du mir bitte nochmal behilflich sein?

danke

okay, erledigt, ORDER BY hat geholfen :)
Gruss Volker

http://www.fuchsienfreunde.de
Antworten