mySQL mySQL und PHP Problem

Chom

gehört zum Inventar
Hallo,

Nachdem ich schon lange einen Fehler gesucht habe, und endlich gefunden, tritt jetzt der nächste auf.
Ich sehe den Wald vor lauter Bäumen nicht mehr, kann mal jemand drüber gucken ob er den Fehler findet?

Soll so eine Art Registrierungsformular sein:

PHP:
<html>
<body>
<?PHP

if ( $_POST['button']==" OK ") {

include("db.php");

$query = "INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email,username,pass) VALUES(" . $_POST['anrede'] . "," . $_POST['vorname'] . "," . $_POST['nachname'] . "," . $_POST['strasse'] . "," . $_POST['plz'] . "," . $_POST['wohnort'] . "," . $_POST['email'] . "," . $_POST['username'] . "," . $_POST['pass'] . ")";
mysql_query($query) or die (mysql_error());

 mysql_close();
 ?>
 Die Daten wurden eingetragen<br>
  <?PHP
} else { ?>
 <form method="post" action="anmelden.php">
 <input type="text" name="anrede" value="anrede"><br>
 <input type="text" name="vorname" value="vorname"><br>
 <input type="text" name="nachname" value="nachname"><br>
 <input type="text" name="strasse" value="strasse"><br>
 <input type="text" name="plz" value="plz"><br>
 <input type="text" name="wohnort" value="wohnort"><br>
 <input type="text" name="email" value="email"><br>
 <input type="text" name="username" value="username"><br>
 <input type="text" name="passwort" value="pass"><br>
 <input type="submit" name="button" value=" OK ">
 </form>
 <?PHP
} ?>
</body>
</html>

Und db.php:

PHP:
<?
$dbname="xxxx";
$dbhost="localhost";
$dbuser="xxxx";
$dbpass="xxxx";
$connection = mysql_connect($dbhost,$dbuser,$dbpass) or die ("Verbindungsversuch fehlgeschlagen");
mysql_select_db ($dbname,$connection) or die (mysql_error());
?>

Danke.

PS:
Dieser Fehler tritt immer auf:
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 ')' at line 1

PSS:
Kann jetzt doch gelöscht oder geschlossen werden, man glaubts nicht, :eek: es haben nur ein parr ' und ' gefehlt...
Jetzt gehe ich erst mal schlafen...N8 Leute.
 
Zuletzt bearbeitet:
Immerhin waren es mehrere. Meist fehlt irgendwo ein einziges Zeichen und das Script verabschiedet sich 500 Zeilen weiter mit irgendeiner blödsinnigen Meldung, anstatt einfach zu sagen: Ey, schau doch mal da oben :ROFLMAO:.
 
Mit eingeschaltetem Syntax Highlighting wäre das nicht so schnell passiert :ROFLMAO: :weg

Na ja, stimmt so auch wieder nicht, passiert dennoch und es gibt da auch noch ein paar andere nette Kandidaten für "Fiese Fehler, nach denen man sich zu Tode sucht"™:
l und 1 sowie | sind je nach gewählten Font im Editor auch schon mal schnell Ziele zur Verwechselung und ; sowie : übersieht man auch leicht (vor allem liegen die direkt nebeneinander)...


BTW: Gibts eigentlich einen gut lesbaren, serifenlosen, monospace Font, den man verwenden kann? Suche schon länger nach sowas...
 
Naja, ist passiert trotz Syntax Highlighting (verwende Kwrite, da macht der das automatisch)...
 
@ Chom,

noch ein Tipp zur Sicherheit:
Wenn du schon $_POST-Variablen direkt verwendest, ohne sie vorher zu prüfen, dann jage die Werte für Alphanumerische Felder wenigstens durch die mysql_real_escape_string() - Funktion. Diese maskiert bestimmte Zeichen, die auch für SQL-Injections benutzt werden können.

Wenn du es dir gleich angewöhnst, dann geht so etwas in Fleisch und Blut über.
 
Danke für den Tipp.
Du meinst das oder?
PHP:
$query = mysql_real_escape_string("INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email) VALUES('" . $_POST['anrede'] . "','" . $_POST['vorname'] . "','" . $_POST['nachname'] . "','" . $_POST['strasse'] . "','" . $_POST['plz'] . "','" . $_POST['wohnort'] . "','" . $_POST['email'] . "')");

Nochmals danke...
 
Nein, sondern nur die Variablen:

PHP:
$query = "INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email) VALUES('" . mysql_real_escape_string($_POST['anrede']) . "','" . mysql_real_escape_string($_POST['vorname']) . "','" . mysql_real_escape_string($_POST['nachname']) . "','" . mysql_real_escape_string($_POST['strasse']) . "','" . mysql_real_escape_string($_POST['plz']) . "','" . mysql_real_escape_string($_POST['wohnort']) . "','" . mysql_real_escape_string($_POST['email']) . "')";
 
Ja, Danke.
Habs gerade selber gemerkt :D

Positiv: Ich habe es geschafft eine E-Mail Adressen Kontrolle Ohne Fehler einzubauen.;)
 
Ich dachte es würde alles jetzt gehen, da ist dann aber wie auch anders doch noch irgendwo der Wurm drinnen.
Und zwar geht es diesmal darum 2 Felder in einer Zeile in einer Tabelle zu ändern:
PHP:
include("db.php");
$email = ($_GET["us"]);

$abfrage = "UPDATE `thiessen`.`main` SET `sid` = " . mysql_real_escape_string($_POST['sid']) . ", logistik = " . "'" . mysql_real_escape_string($_POST['logistik']) . " WHERE `main`.`email`=" . $email . ";";
$ergebnis = mysql_query($abfrage);
mysql_close($connection);

Und zwar soll der eigentlich die Zeile suchen in der die Spalte email den Wert $email hat (ist eine variabel die per Get übergeben wird...) und dort sollen dann die Felder sid und logistik geändert werden zu den POST Variablen.
Kann dort jemand einen Fehler erkennen?
Ich bekomme keine Fehler Meldung, aber das Update wird nicht übernommen...
 
Schau dir mal deine Verwendung der ' an. Bei Alphanumerischen Feldern solltest du die immer benutzen.

Und nimm mal bitte die ` raus.
 
Danke, waren echt diese verdammten komischen "`", hatten den Syntax aus dem SQL phpadmin übernommen...


Sorry das ich hier noch mal nerven muss, die Seite läuft jetzt, alles ist jetzt so abgeriegelt, dass keine injections gehen (hoffe ich doch mal...).
Jetzt habe ich nur eine Frage noch, ist es sinnvoll eine Abfrage so zugestellten:

SELECT bla FROM bla WHERE eins = "j" AND zwei != "j" LIMIT 1

bei der Auswahl kann es sein das mehrere Datensätze den Anforderungen entsprechen.
Würde jetzt zufällig ein Datensatz gewählt? Oder gibt das einen Error?
Im Moment läuft es bei mir so (es geht, aber nach dem eine id übersprungen wurd ist es leider nicht mehr so optimal):

SELECT bla FROM bla WHERE eins = "j" AND id > $JetztID LIMIT 1

Hinweis:
Es sind nicht viele Datensätze vorhanden, später werden es auch nicht mehr als max. 100 sein, und die Auswahl eines Datensatzes kann ruhig willkürlich sein, aber es muss immer eins = "j" und zwei darf nie "j" sein (ist immer nur ein Datensatz in der Tabelle, falls ein weiterer j wird, wird der ältere gelöscht.).
Ich frage nur, weil ich es jetzt nicht mehr testen kann, weil die Seite im Betrieb ist.

MFG
 
Wenn Sie Werte in Anführungszeichen angeben, setzen Sie Datenbank-, Tabellen-, Spalten- und Routinenamen als Bezeichner in
Backticks (‘`’). Host- und Benutzernamen sowie Passwörter werden als Strings in einfache Anführungszeichen (‘'’) gesetzt.

Die macht phpMyAdmin immer mit rein, im php bedeuten sie aber wieder was anderes.

Deine Abfrage, bzw. was du damit bezwecken willst versteh ich nicht so ganz.
 
Danke,

Zu der Abfrage:
Die geht eigentlich, aber hat halt ein kleines Manko: es werden nur noch Datensätze mit id > myid ausgewählt...
Also es soll nach einer php Seiten Abfrage ein Datensatz ausgewählt werden, welcher bestätigt wurde (eins = "j") und welcher noch NICHT vorher ausgewählt wurde (zwei != "j", zwei wird auf j gesetzt wenn der Datensatz ausgewählt wird).
Wenn die beiden Bedingungen erfüllt sind, kann der Datensatz genommen werden, theoretisch ist die ID egal...nur wichtig ist das nur ein Datensatz ausgewählt wird obwohl theoretisch mehrere die Kriterien erfüllen würden, daher das LIMIT 1.

Ich versuche es jetzt einfach mal mit der Abfrage...
 
BTW: Gibts eigentlich einen gut lesbaren, serifenlosen, monospace Font, den man verwenden kann? Suche schon länger nach sowas...

Ein bisschen ist das auch eine Frage der persönlichen Vorliebe...

Hier ist mal ein Artikel zu dem Thema: Hivelogic - Top 10 Programming Fonts
(In den Kommentaren werden noch mehr Fonts genannt.)

Ich selbst benutze gerne die Deja Vu Sans Mono (in dem Artikel auf Platz 3), weil man da neben 0 und O auch gut zwischen l und 1 (kleines L und Eins) unterscheiden kann.
 
Oben