# PHP Script



## phpScriptFalsch (21. Apr 2012)

Hey, ich weiß das hier ist ein Java Forum aber ich wollte mich nicht in irgendeinem PHP Forum registrieren nur für diese eine Frage und da hier ja in der Regel schnell geantwortet wird, hoffe ich ihr könnt mir hier weiterhelfen.

Habe das folgende Skript:

```
<?php
$con = mysql_connect("host","user","pw");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

 $name = $_GET['name'];
 print("$name");


mysql_select_db("sql_db", $con);
$sql = "CREATE TABLE $name (
  'routeID' int(11) NOT NULL AUTO_INCREMENT,
  'Longitude' float NOT NULL,
  'Latitude' float NOT NULL,
  'Altitude' float NOT NULL,
  PRIMARY KEY ('routeID')
) ENGINE=MyISAM DEFAULT CHARSET=utf8";

mysql_query($sql,$con);

mysql_close($con);
?>
```

Könnt ihr mir sagen warum die Tabelle nicht in meiner DB erzeugt wird ? Bzw. wie ich mein phpScript ändern muss damit es klappt ?

Danke !


----------



## Gast2 (21. Apr 2012)

PHP: mysql_error - Manual


----------



## Tobse (21. Apr 2012)

Ohjeohje, *MYSQL-INJECTIOn GEFAHR!* in Zeile 13 (Btw das ist auchnoch unschöner Programmierstil)
Und es kann gut sein, dass die Tabelle bereits besteht. Ansonsten poste einfach mal den Fehler.


----------



## phpScriptFehler (21. Apr 2012)

Die Verbindung klappt glaube ich. Wenn ich das folgende script nehme funktioniert es:

```
CREATE TABLE $name (
<?php
$con = mysql_connect("host","user","pw");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

 $name = $_GET['name'];
 print("$name");


mysql_select_db("sql_db", $con);
$sql = "CREATE TABLE $name 
(
personID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(personID),
FirstName varchar(15),
LastName varchar(15),
Age int
)";

mysql_query($sql,$con);

mysql_close($con);
?>
```

Das heißt es muss wohl irgendwie an meinem SQL Statement liegen, weil das das einzige ist was ich verändert habe.


----------



## Gast2 (21. Apr 2012)

Ja dann lass dir doch mal den Fehler ausgeben und poste die Fehlermeldung :rtfm:


----------



## PhpScriptFalsch (21. Apr 2012)

Fehlermeldung:

```
1064: 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 ''routeID' int(11) NOT NULL AUTO_INCREMENT, 'Longitude' float NOT NULL, 'Lati' at line 2
```


----------



## Gast2 (21. Apr 2012)

Joa, da haste den Fehler. Du nutzt die falschen hochkommata. Die kannst du übrigens auch einfach weglassen.


----------



## phpScriptFalsch (21. Apr 2012)

Jo, alles klar nun klappts.
Danke


----------



## phpScriptFalsch (24. Apr 2012)

Hm, habe meinen Code nun etwas ausgebaut, bekomme nun aber folgenden Error:


```
43434230: 1064: 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 7 0: 0:
```

Mein Code bis jetzt:

```
<?php

$con = mysql_connect("host","user","pw"); 
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
 }

//SQL Injection verhindern

$id = mysql_real_escape_string($_GET['id']);
print("$id");

$latitude = mysql_real_escape_string($_GET['latitude']);
print("$latitude");

$longitude = mysql_real_escape_string($_GET['longitude']);
print("$longitude");

$altitude = mysql_real_escape_string($_GET['altitude']);
print("$altitude");



mysql_select_db("sql_db", $con);
$sql = "CREATE TABLE IF NOT EXISTS Trackpoint (
  routeID int,
  Longitude float NOT NULL,
  Latitude float NOT NULL,
  Altitude float NOT NULL,
  DateTime DATETIME,
)";

$sqlTwo = "CREATE TABLE IF NOT EXISTS Track (
  ID int,
  DateTime DATETIME,
  PRIMARY KEY (ID)
)";



mysql_query($sqlTwo,$con);
echo mysql_errno($con) . ": " . mysql_error($con) . "\n";

mysql_query($sql,$con);
echo mysql_errno($con) . ": " . mysql_error($con) . "\n";


$idQuery = "SELECT * FROM Track WHERE ID = $id";
$result = mysql_query($idQuery) or die ("MySQL-Fehler: " . mysql_error());  
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
print("Id besteht bereits");
}

else {
$insertSQLTwo = "INSERT INTO Track(ID, DateTime)
VALUES ($id,NOW())";
mysql_query($insertSQLTwo,$con);
echo mysql_errno($con) . ": " . mysql_error($con) . "\n";

}

if(isset($latitude) && isset($longitude) && isset($altitude) && isset($id)) {
$insertSQL = "INSERT INTO Trackpoint(routeID, Longitude, Latitude, Altitude, DateTime)
VALUES ($id, $longitude,$latitude,$altitude,NOW())";
mysql_query($insertSQL,$con);
echo mysql_errno($con) . ": " . mysql_error($con) . "\n";

}

mysql_close($con);
?>
```

die 43434230 sind id = 4, longitude = 34, latitude = 34 23 = altitude... danach kommt der Error, angeblich in Zeile 7 ?! was sollte denn da falsch sein...

Danke für eure Hilfe !


----------



## Gast2 (24. Apr 2012)

Das einzige Statement mit 7 Zeilen ist dein create Statement. Was könnte bei der ) Klammer wohl falsch sein... ?


----------



## phpScriptFalsch (24. Apr 2012)

Danke, das Komma muss weg ;-)
Dachte das bezieht sich auf Zeile 7 und nicht das Statement mit 7 Zeilen.


----------



## Gast2 (24. Apr 2012)

Woher soll deine MySQL Datenbank was über das PHP Skript wissen? Das macht keinen Sinn


----------



## chalkbag (26. Apr 2012)

Kleiner Schlaumaiertipp, du kannst die SQL - Statements auch direkt im Tool deiner MySQL ausführen, haben eigentlich alle gängigen Datenbanken sogar eine Weboberfläche hierfür. Oder eben extra Tools wie SQL Developer verwenden.
So solltest du deine SQL Fehler schneller finden und musst auch nicht überlegen, ob dein Script eventuell falsch ist.


----------



## cmrudolph (1. Mai 2012)

Bei MySQL kann ich MySQL Workbench empfehlen. Dass die Datenbanken eine eigene Weboberfläche mitbringen wäre mir aber neu. Meinst du vielleicht die gängigen Administrationsoberflächen phpMyAdmin oder phpPgAdmin? Oder bezieht sich das eher auf kommerzielle Datenbanksysteme?


----------



## chalkbag (2. Mai 2012)

Oracle hat z.B. eine schöne Oberfläche in der XE Edition, hier kann man sich sogar die Anfragen zusammen klicken. Kannst ja mal die Express Edition installieren und dann ist es glaub ich standardmäßig localhost:8080 oder localhost:8000. Ich nutze momentan nur noch SQL Developer, weil ich hier leicht unterschiedliche Datenbanken verwalten kann.


----------

