• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

Coding-Thread

Ich schätze mal, dass es daran liegt

"$projtel=$_POST['pojtel'];"
mysql_query(INSERT INTO Mitarbeiter (Name,Vorname,Telefon,ProjektTelefon,Email,Titel,Position,MobilTelefon,WebSite) VALUE ('$name','$vorname','$telintern','$projtel','$email','$titel','$position','$mobil','$homepage'));
 
Danke, das is auf jeden Fall schonmal nen Fehler gewesen.. aber trotzdem gehts nicht :/
 
Vermutung: Es muss VALUES heißen, nicht VALUE

Falls es das nicht ist: Guck mal nach, ob die Felder in der DB alle als Strings definiert sind oder ob da Zahlenfelder stehen. Kann sein, dass du dann vielleicht irgendwas erst in eine Zhl konvertieren musst.
 
Das mit VALUES ist mir auch aufgefallen habs auch schon paar mal geändert nur ensteht kein Unterschied..

Alle DB-Felder sind Varchar, muss also im normalfall nichts zu zahlen felder konvertieren ?

Noch irgendwelche Lösugnsansätze.. mh?
 
' ' um die Anfrage setzen?

mysql_query('INSERT INTO Mitarbeiter (...) VALUE (...)');
 
try sis!
Code:
mysql_query("INSERT INTO Mitarbeiter (Name, Vorname, Telefon, ProjektTelefon, Email, Titel, Position, MobilTelefon, WebSite) VALUES ($name, $vorname, $telintern, $projtel, $email, $titel, $position, $mobil, $homepage)");
und escape auf jeden Fall die einkommenden Daten (http://de.php.net/mysql_real_escape_string)
 
hilft beides nix :/ aber trtodzem danke fürs versuchen !
 
Vielleicht hilft es, wenn du es testweise mal nur auf 1-2 Eingabefelder einschränkst. Macht zumindest die Fehlersuche etwas einfacher.
 
Auch schon gemacht, hab jedes Feld einzeln ausprobiert... *haare rausrupft*
 
Versuch es mal mit Anführungszeichen um jeden Spaltennamen.
 
Fehlermeldungen wären schick :v

// Syntaxfehler sollte es keine mehr geben
% php -l blah.php
No syntax errors detected in blah.php

Ah und poste mal das Schema der Datenbank und dein Formular.
 
Zuletzt bearbeitet:
Es muss doch heißen:

$result = mysql_query...usw

weil mysql_query einen Wert zurückliefert.
 
HTML:
<html>

<head>
	<title>WiW Eingabe</title>
	<meta http-dev="content-type" content="text/html; charset=utf-8">
	<link rel="stylesheet" type="text/css" href="CSS LINK.css">
</head>

<body width="600" height="530" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0">
<table width="600" height="530" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0"><td>
	<table width="600" height="110">
		<tr width="600" height="110">
		<td width="120" height="110"><img src="http://kainname.googlepages.com/logo-softcon.jpg" width="140" height="110"></td>
			<td width="440" height="110"><center>Bitte tragen Sie den Datensatz ein.</center></td>
				<td width="40" height="110"></td>
		</tr>
	<form action="wiwauswertung.php" method="post">
			<table width="600" height="40">
			<tr width="600" height="40">
			<td width="250" height="40"></td>
				<td bgcolor="#E5E5E5" width="450" height="40"><center> Name <input type="text" name="name" size="10">   Vorname <input type="text" name="vorname" size="10"></td>	<td width="150" height="40"></center></td>
			</tr>
			<table border="1" width="600" height="350">
					<tr width="600" height="50">
						<td width="50" height="50"></td>
							<td width="100" height="50">Titel</td>
								<td width="450" height="50"><input type="text" name="titel" size="10"></td>	
					<tr width="600" height="50">
						<td width="50" height="50"></td>
							<td width="100" height="50">Position</td>
								<td width="450" height="50"><input type="text" name="position" size="10"></td>	
							<tr width="600" height="50">
						<td width="50" height="50"></td>
							<td width="100" height="50">Telefon (intern)</td>
								<td width="440" height="50"><input type="text" name="telintern" size="10"></td>							
					<tr width="600" height="50">
						<td width="50" height="50"></td>
							<td width="100" height="50">Projekt-Telefon</td>
								<td width="450" height="50"><input type="text" name="projtel" size="10"></td>	
					<tr width="600" height="50">
						<td width="50" height="50"></td>
							<td width="100" height="50">Mobiltelefon</td>
								<td width="450" height="50"><input type="text" name="mobil" size="10"></td>	
					<tr width="600" height="50">
						<td width="50" height="50"></td>
							<td width="100" height="50">Email</td>
								<td width="450" height="50"><input type="text" name="email" size="10"></td>	
					<tr width="600" height="50">
						<td width="50" height="50"></td>
							<td width="100" height="50">Homepage</td>
								<td width="450" height="50"><input type="text" name="homepage" size="10"></td>	
					</tr>
					
					<table width="600" height="50">
						<tr width="600" height="50">
							<td width="80" height="50"></td>
									<td width="250" height="50"><input type="submit" name="send" value="Daten eintragen" size="10"> <input type="reset" value="zurücksetzen" </td>
						<tr>
</td>
						</table>
	</table>
		</table>
			</table>
				</table>
	</form>
</body>
</html>

DB Schema

Noch immer:
Parse error: syntax error, unexpected T_STRING in /var/www/wiwauswertung.php on line 20
 
Das mit VALUES ist mir auch aufgefallen habs auch schon paar mal geändert nur ensteht kein Unterschied..
natürlich nicht. Du hast nen PHP-Syntaxfehler, der kommt garnicht zum Ausführen des SQL-Statements. Abgesehen davon ist VALUES richtig, VALUE falsch.
Alle DB-Felder sind Varchar, muss also im normalfall nichts zu zahlen felder konvertieren ?

Noch irgendwelche Lösugnsansätze.. mh?

1. das muss ganz einfach folgendermaßen aussehen:
mysql_query("INSERT INTO Mitarbeiter (Name,Vorname,Telefon,ProjektTelefon,Email,Titel,Position,MobilTelefon,WebSite) VALUES ('$name','$vorname','$telintern','$projtel','$email','$titel','$position','$mobil','$homepage')");

2. das sieht so aus und der gibt dir einen Syntaxfehler? In dem Fall tritt Regel 1 in Kraft, weil es nicht so aussieht.

Benutze einen Editor mit Syntax-Highlighting, dann entdeckt man solche Fehler leichter. Alles was in mysql_query(....) steht, muss ein String sein (in deinem Fall).
Übrigens, das Leerzeichen in "$mobil" stammt von der Forensoftware, nicht von mir...
 
Zuletzt bearbeitet:
Jetzt noch ein bisschen Erklärung nach dem Warum.

Wie Nevi schon richtig gesagt hat, wird mysql_query() ein String, also eine Zeichenkette übergeben. Das kann man auf der Website von php nachlesen. Genauer: http://de.php.net/mysql_query

Code:
resource mysql_query  ( string $query  [, resource $link_identifier  ] )
D.h. mysql_query(), die Funktion hat zwei Parameter. Der erste ist verpflichtend und ist vom Datentyp string, also eine Zeichenkette. Zu dem gibt es einen optionalen Parameter, der ein resource ist. Was das genau macht, lässt sich auf der Seite nachlesen. Zu dem gibt mysql_query() etwas mit dem Datentyp resource zurück. Was es genau zurückgibt, lässt sich auch nachlesen auf der Seite.
Es ist oft von der Logik unerlässlich den Rückgabewert (return value) zu verarbeiten. Oft aber auch nicht. Dennoch ist es ein besserer Stil, wenn man versucht die Fehler so früh wie möglich selber zu behandeln.
Nun zu dem SQL.
Das Insert-Query geht nach einem Schema vor (http://dev.mysql.com/doc/refman/5.1/en/insert.html). Dabei werden Zeichenketten in Anführungszeichen bzw. Quotes angegeben, damit es keine Verwechslungen gibt.
Deswegen war auch das Schema interessant, um zu sehen welchen Datentyp die einzelnen Spalten haben.

Bei dem fiktiven Schema:
Code:
+------ score_data ------+
+--  id  --+-- score --+-- name --+
+--  INT --+--  INT  --+-- TEXT --+
Wäre es ein valides Query z.B.:
Code:
INSERT INTO score_data (score, name) VALUES (139, "Bla, Foo")
Hier sieht man auch, dass die Anführungszeichen Probleme verursachen würden. Da es sonst lauten würde
Code:
INSERT INTO score_data (score, name) VALUES (139, Bla, Foo)

Da die alten Datenbankfunktionen (mysql_*) noch recht tief sind, muss man somit noch recht viel arbeit selber erledigen. Die Textersetzung funktioniert also bei Datenbankquerys genau so, wie sonst auch.

Code:
$foo = "bla";
$bla = "bla";
print $foo.$bla; //"foo"."bla" => "foobla"

Bei einem Query entsprechend.
Code:
$var1 = "var1";
$var2 = "var2";
$query = "SELECT myvar, yourvar FROM vars WHERE myvar = '$var1' AND yourvar = '$var2'"; // SELECT myvar, yourvar FROM vars WHERE myvar = 'var1' AND yourvar = 'var2'

Neben den "alten" mysql_* Funktionen hat PHP mit PEAR auch abstraktere Bibliotheken. Wie z.B. MDB2.

Ach zu dem Escapen wollte ich noch was schreiben. Wenn man nun das obrige Beispiel nimmt.
Code:
$query = "SELECT myvar, yourvar FROM vars WHERE myvar = '$var1' AND yourvar = '$var2'";
Könnte es sein, dass ein Angreifen, die $var2 mit dem Inhalt ' OR 5=5 UNION SELECT 'foo', deingeheimespasswort FROM meinegeheimepasswoerter /* an das Script schickt. Somit wäre das Query:
Code:
SELECT myvar, yourvar FROM vars WHERE myvar = 'var1' AND yourvar ='[color=red]' OR 5=5 UNION ALL SELECT 'foo', deingeheimespasswort FROM meinegeheimepasswoeter /*[/color]'
Das wäre ein gültiges Query und somit hätte der Angreifer dein Passwort. Je nach dem, wie die Datenbank administriert wurde, kann man sogar das Passwort der Datenbank herausfinden und somit hat man Vollzugriff. Daher merkt man sich: All input data is evil!
 
Zuletzt bearbeitet:
Wunderbärchen, jetzt klappt alles Vielen dank für die Hilfe, die Community in dem Forum ist so genial wie immer :)

:D
 
Meine Frage dazu: WIESO wird nur die erste Zeile (richtig) gesetzt und der Rest vom Array ist unangetastet?

Danke schonmal :D

http://codepad.org/CuFnu8lV

Da kann man den Code und die Ausgabe schön sehen
 
Im IRC haben wir die Lösung gefunden:


[19:41:21] <aquinas> sech mal
[19:41:25] <aquinas> die check funktionen...
[19:41:29] <aquinas> testen die ALLE felder?
[19:41:52] <FaustX> jop im moment schon
[19:42:08] <mfb> das ist doch unsinn
[19:42:11] <Freiik> ^^
[19:42:19] <mfb> die dürfen nur die entsprechende zeile bzw. spalte testen
[19:42:28] <mfb> sonst schlägt der test natürlich ziemlich schnell fehl
[19:42:42] <mfb> und du kommst zu oft zum x-- fall
[19:42:49] <Freiik> ne
[19:43:01] <mfb> ach falsch
[19:43:02] <Freiik> x-- ist wenn keine 0 drin steht
[19:43:05] <mfb> aber du trägst dann nix mehr ein
[19:43:13] <Freiik> aber die check dinger schlagen fehl, wenn eine zahl schon vergeben ist
[19:43:18] <mfb> was erklärt, wieso nichts mehr eingetragen wird^^
[19:43:19] <Freiik> deswegen nur einmal 1-9 und rest 0
[19:43:27] <aquinas> eben nicht freiik
[19:43:28] <mfb> nach der ersten zeile sind die checks eben immer false
[19:43:33] <aquinas> genau
 
Huhu ihr Coder!

Ich kenne mich mit HTML, Pascal(Delphi), Logo und Java aus und wollte mich nunmal mit C/C++ beschäftigen, hab mir schonmal "Dev C++" runtergeladen und mich son ergoogleltes Tutorial eingelesen aber irgendwie scheint das schon n bisschen älter zu sein, deshalb: Kennt jemand ein wirklich GUTES C/C++ Tutorial im Internet?

Grüße
 
C++ hat sich seit 2003 nicht mehr verändert (C++0x ist noch nicht verabschiedet), also ist ein alters Tutorial nicht unbedingt schlechter. Vor allem da die grundlegenden Dinge die für so ein Tutorial relevant sind schon 1998 standardisiert wurden.
 
Zurück
Oben