Tabelle wird nicht erzeugt?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgeben
bettler
code
datenbank
datum
fehler
fehlermeldung
gespeichert code
hergestellt rohstoff
komma
masse
not
re
rohstoff
spalten
tabelle
transporter
verbindung
volumen
zeile
-
Hi ich benutze folgenden ref="/tag/code">Code ohne Fehlermeldung:
$Rohstoff=$_POST['Rohstoff']; $Volumen=$_POST['Volumen']; $Masse=$_POST['Masse']; $db=mysql_connect("mysql.lima-city.de","USER121635","******"); mysql_select_db("db_121635_2"); mysql_query("CREATE TABLE Rohstoffe(Rohstoff char(256), Volumen int, Masse int)"); mysql_query("INSERT INTO Rohstoffe (Rohstoff, Volumen, Masse), ($Rohstoffe, $Volumen, $Masse)"); echo "Verbindung zur Datenbank hergestellt. $Rohstoff mit dem Volumen $Volumen und der Masse $Masse gespeichert!";
Aber phpMyAdmin stellt fest, dass keine Tabellen in meiner Datenbank vorhanden sind. Ich seh keinen Grund warum es nicht klappt.
Beitrag geändert: 7.10.2008 11:36:21 von transporter -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1) vorallem bei INSERT INTo und CREATE immer ein "or die (mysql_error()); hinzufügen
(((
2) wenn es sagt, dass keine Tabellen vorhanden sind. Dann erstell erstmal eine Datenbank db_121635_2 und schreib da eine Tabelle irgendeines Namens rein.
3) warum erstellst du die Tabelle denn mit PHP und nicht einfach voreingestellt. Wäre doch dort wirklich sinnvoller oder?
((4) mach mal vor das mysql_query ein "$result = "))
))) -
Keiner dieser vier Punkte hat nur im Geringsten damit zu tun
das 'or die' sorgt dafür, dass das gesamte Programm bei misslingen der Query beendet wird
das ist nich immer gewollt. Und den Fehler kann man auch anders ausgeben!
Es ist tatsächlich ratsam, die Tabelle in phpmyadmin zu erstellen
dazu gehst du einfach auf mysql.lima-city.de und loggst dich mit deinen Daten ein und dann kannst du die Datenbank bearbeiten.
aber es spicht nichts dagegen, das anders zu machen.
Das $result = macht nur dann Sinn, wenn man das Resultat auch wirklich braucht, was bei INSERT und CREATE TABLE eigentlich nicht der Fall ist
Hier gibt es fünf Fehler:
Der erste ist, dass CHAR maximal eine Länge von 255 haben kann. Dadurch kann die Tabelle schonmal nicht erstellt werden.
der zweite ist folgender:
die richtige Syntax für INSERT INTO lautet:
INSERT INTO `table` (`Spalte1`, `Spalte2`, ...) VALUES ('Value1', 'Value2', ...)
Du hast das VALUES vergessen, bzw. durch ein komma ersetzt.
Was man mit dem Komma macht, ist mehrere Datensätze gleichzeitig einfügen:
INSERT INTO `table` (`Spalte1`, `Spalte2`, ...) VALUES ('Satz1Value1', 'Satz1Value2', ...), ('Satz2Value1', 'Satz2Value2', ...)
Der dritte Fehler ist, dass die Werte (zumindest bei CHAR) zwischen Hochkommas ('') stehen müssen. Man sollte sie allerdings immer setzen aus dem Grund, den du gleich lesen wirst:
Der vierte Fehler ist nämlich, dass du anstelle von $Rohstoff $Rohstoffe geschrieben hast. Das führ automatisch zu einem Syntax Fehler wenn die Hochkommas fehlen, da dann einfach nichts zwischen den beiden kommas steht.
Der fünfte hängt mit dem MySQL zusammen, das man benutzt. Bei manchen Versionen ist es verlangt, dass die Tabellen und Spaltennamen zwischen `` (rechts neben ß min Shift) stehen.
Somit wäre die in jedem Fall sicherste Variante:
<?php $Rohstoff = $_POST['Rohstoff']; $Volumen = $_POST['Volumen']; $Masse = $_POST['Masse']; $db = mysql_connect("mysql.lima-city.de","USER121635","******"); mysql_select_db("db_121635_2"); mysql_query("CREATE TABLE `Rohstoffe` (`Rohstoff` char(255), `Volumen` int, `Masse` int)"); mysql_query("INSERT INTO `Rohstoffe` (`Rohstoff`, `Volumen`, `Masse`) VALUES ('$Rohstoff', '$Volumen', '$Masse')"); echo "Verbindung zur Datenbank hergestellt. $Rohstoff mit dem Volumen $Volumen und der Masse $Masse gespeichert!"; ?>
viele Grüße.
xelax90
Beitrag geändert: 7.10.2008 12:30:49 von xelax90 -
Erstmal danke für den Tipp mit mysql_error, dadurch hab ich rausgefunden das char(256) nicht geht 255 ist das Maximum.
Also habe ich meinen Code mit deinen Tipps und den Fehlermeldungen umgebaut:
$Rohstoff=$_POST['Rohstoff']; $Volumen=$_POST['Volumen']; $Masse=$_POST['Masse']; mysql_connect("mysql.lima-city.de","USER121635","Re2209ne"); mysql_select_db("db_121635_2"); mysql_query("CREATE TABLE IF NOT EXISTS Rohstoffe(Rohstoff char(128), Volumen int, Masse int)") or die(mysql_error()); mysql_query("INSERT INTO Rohstoffe (Rohstoff, Volumen, Masse),("$Rohstoff", "$Volumen", "$Masse")") or die (mysql_error()); echo "Verbindung zur Datenbank hergestellt. $Rohstoff mit dem Volumen $Volumen und der Masse $Masse gespeichert!";
Nun bekomme ich den Fehler gemeldet unerwarterte T_Variabel in der Skriptzeile 9. ich sehe nicht was da unerwartet ist, habe alle Semikolons richtig gesetzt und auch die " stimmen. -
Hi Bettler,
hab deinen Beitrag zu spät gesehen, man möge mir daher das doppelt Posting nachsehen.
So wie du es beschrieben hast geht es nun auch Bettler.
Beiden vielen Dank -
Bitte^^
Der Fehler mit der T_Variable kommt übrigens davon, dass du Anführungszeichen und keine Hochkommas verwendet hast.
dadurch wurde der String unterbrochen.
Das kannst du sofort sehen, wenn du einen Editor mit Syntaxhervorhebung (zum Beispiel Phase5) benutzt.
ich zeig dir das mal hier im Code:
<?php $Rohstoff=$_POST['Rohstoff']; $Volumen=$_POST['Volumen']; $Masse=$_POST['Masse']; mysql_connect("mysql.lima-city.de","USER121635","*******"); mysql_select_db("db_121635_2"); mysql_query("CREATE TABLE IF NOT EXISTS Rohstoffe(Rohstoff char(128), Volumen int, Masse int)") or die(mysql_error()); mysql_query("INSERT INTO Rohstoffe (Rohstoff, Volumen, Masse),("$Rohstoff", "$Volumen", "$Masse")") or die (mysql_error()); echo "Verbindung zur Datenbank hergestellt. $Rohstoff mit dem Volumen $Volumen und der Masse $Masse gespeichert!"; ?>
Außerdem heiß ich nicht Bettler, sondern xelax90 :P
lg,
xelax90
Beitrag geändert: 7.10.2008 14:50:49 von xelax90 -
Oh Mann, sry Bettler dachte schon wer nennt sich den so....
Nun habe ich noch ein neues Problem. Ich habe einige Daten in die Rohstofftabelle eingetragen und nun möchte ich diese als Tabelle ausgeben.
mysql_connect("mysql.lima-city.de","USER121635","?"); mysql_select_db("db_121635_2"); $result=mysql_list_fields("db_121635_2","Rohstoffe"); $Spalten=mysql_num_fields($result); $resultDaten=mysql_query("SELECT * FROM Rrohstoffe"); $n=0; echo "<table width=42%>"; echo "<tr>"; do { $Ergebnis=mysql_field_name($result,$n); echo "<th width=33%>$Ergebnis</th>"; $n++; } while($n<$Spalten); echo "</tr>"; $Zeilen=mysql_num_rows($resultDaten); do { echo "<tr>"; $n=0; do { $Erg=mysql_result($resultDaten,$n); echo "<td></td>"; $n++; } while($n<$Spalten); echo "</tr>"; $i++; } while($i<$Zeilen); echo "</table>"
Also, dass mit den Spaltennamen gelingt gut. Wenn ich dann versuch mit Select * FROM Rohstoffe mir die Daten ausgeben, bekomme ich eine Fehlermeldung in der Zeile:
$Zeilen=mysql_num_rows($resultDaten);
$resultDaten keine Zulässiges Argument für mysql_num_rows ist.
PS: Wie kriegst du es hin, dass PHP mit Highlight angezeigt wird?
Beitrag geändert: 7.10.2008 14:16:23 von transporter
Beitrag geändert: 7.10.2008 14:52:14 von transporter -
indem ich <?php an den Anfang und ?> ans Ende setze^^
ich find den Ansatz, den du gemacht hast nicht so ganz richtig.
deswegen werd ich einfach mal alles korrigieren^^
<?php $verbindung = mysql_connect("mysql.lima-city.de","USER121635","*******"); mysql_select_db("db_121635_2", $verbindung); echo "<table width=42%>"; $fields = array(); $res = mysql_query("SHOW COLUMNS FROM `Rrohstoffe`", $verbindung); echo "<tr>"; while($val = mysql_fetch_object($res)){ echo "<th width=33%>$val->Field</th>"; $fields[] = $val->Field; } echo "</tr>"; $res = mysql_query("SELECT * FROM `Rohstoffe`", $verbindung); while($val = mysql_fetch_assoc($res)){ echo "<tr>"; foreach($fields as $field){ echo "<td>".$val[$field]."</td>"; } echo "</tr>"; } echo "</table>"; ?>
Ich mach das zumindest immer so^^
Den Befehl mysql_list_fields benutze ich nie, ich geh lieber über die in MySQL vorhandene Funktion LIST COLUMNS FROM
Dann habe ich mysql_fetch_assoc benutzt, weil ich ja nicht geau weiß, welche Spalten darin vorkommen.
also ein kleiner Trick meinerseits ;)
und ein kleiner Tipp:
Maskier deine Passwörter :P
gruß
xelax90
Beitrag geändert: 7.10.2008 14:50:11 von xelax90 -
Dank dir, so gehts....!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage