(PHP) MySQL-Befehle werden nicht ausgeführt - Warum
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfangen
adresse
aktion
artikel
bearbeiten
code
dank
datei
eintragen
erstellen
fehler
formular
header
helfen
inhalt
kategorie
konfiguration
string
unbedingt url
url
-
Hallo!
Ich habe eine Datei für mein CMS, mit der man einen Artikel/eine Seite erstellen kann.
Ich poste erst einmal den Code, danach schreibe ich was dazu:
HTML (erstellen.php):
<!DOCTYPE html> <html> <head> <title>Administration • ILG-CMS</title> <link rel="stylesheet" type="text/css" href="style/style.css"> </head> <body> <div id="menu"> <table id="menu" border="0"> <tr> <td><a href="index.php">Start</a></td> <td><a href="bearbeiten.php">Bearbeiten</a></td> <td><a href="erstellen.php">Erstellen</a></td> <td><a href="loeschen.php">Löschen</a></td> <td><a href="logout.php">Ausloggen</a></td> </tr> </table> </div> <div id="content"> <h1 id="titel"> Einen neuen Artikel schreiben: </h1> <form name="erstellen" action="erstellen-aktion.php" method="post"> <p>Titel des Artikels: <input type="text" name="titel" id="titel"></p> <p>Adresse (Vom Installationsverzeichnis und Kategorie aus): <input type="text" name="url" id="url"></p> <p>Kategorie des Artikels: <input type="text" name="url" id="url"</p> <p>Inhalt</p> <textarea name="artikel" id="artikel"></textarea> <input type="submit" value="Speichern"> </form> </div> </body> </html>
Und die Aktion in PHP (erstellen-aktion.php):
<?php $titel = $_POST["titel"]; $adresse = $_POST["url"]; $kategorie = $_POST["kategorie"]; $inhalt = $_POST["artikel"]; if(!empty($kategorie)) { $eintragen = mysql_query("INSERT INTO cms_artikel (url, titel, artikel, kategorie) VALUES ('$adresse', '$titel', '$inhalt', '$kategorie')"); } else { $eintragen = mysql_query("INSERT INTO cms_artikel (url, titel, artikel) VALUES ('$adresse', '$titel', '$inhalt')"); } if ($eintragen) { header("Location: index.php?id=erstellt"); exit; } ?>
Ich weiß echt nicht, was ich falsch gemacht habe...
Ich bekomme danach einfach eine weiße Seite mit der URL [...]erstellen-aktion.php
Ich hoffe, ihr könnt mir helfen!
MfG. Simon D. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Eine weiße Seite bedeuted erfahrungsgemäß, dass du einen Fehler hast, aber display_errors deaktiviert ist.
Spontan fällt mir an deinem Code auf, dass du keine Connection aufbaust (oder geschieht das in einer anderen PHP-Datei?) -
julianhabib schrieb:
welchen php? in welche datei? das ist hier kein ratespiel. da versucht man zu helfen.
Versuche den PHP ersteinmal direkt in die Datei zu schreiben
simon-d schrieb:
fange diese datei (und andere fehlerbefallene dateien) einfach so an
... Und die Aktion in PHP (erstellen-aktion.php):
<?php $titel = $_POST["titel"]; $adresse = $_POST["url"]; $kategorie = $_POST["kategorie"]; $inhalt = $_POST["artikel"]; if(!empty($kategorie)) { $eintragen = mysql_query("INSERT INTO cms_artikel (url, titel, artikel, kategorie) VALUES ('$adresse', '$titel', '$inhalt', '$kategorie')"); } else { $eintragen = mysql_query("INSERT INTO cms_artikel (url, titel, artikel) VALUES ('$adresse', '$titel', '$inhalt')"); } if ($eintragen) { header("Location: index.php?id=erstellt"); exit; } ?>
... Ich bekomme danach einfach eine weiße Seite mit der URL [...]erstellen-aktion.php<?php ini_set('display_errors', '1'); error_reporting(E_ALL | E_STRICT);
(die 2 zeilen kannst jeder zeit wieder auskommentieren.)
wenn jetzt alles gut geht, bekommst meldungen von php. -
Danke, ich habe die Lösung bereits gefunden; der Thread kann geschlossen werden...
-
Woran lag dein Problem? Übrigens: Du solltest immer die Rückgabewerte von mysql_query abfangen um eventuelle Fehler abzufangen.
-
Hallo!
Zum Einen bestand der Fehler darin, dass ich wirklich vergessen hatte, mich zu verbinden, zum Anderen darin, dass beim Formular als Wert bei der Kategorie beim
noch "url" eingegeben war... Vom kopieren :/name="..."
Jetzt funktioniert also das Erstellen, aber (solange ich auch nach Fehlern suche) das Löschen und bearbeiten nicht...
Ich zeigs mal am Beispiel LÖSCHEN:
Formular:
<?php include('auth.php'); require_once "../konfiguration/zugangsdaten.php"; mysql_connect($server, $user, $passwort) or die("Keine Verbindung möglich: " . mysql_error()); mysql_select_db($datenbank); $result = mysql_query("SELECT titel, url, kategorie, id FROM cms_artikel ORDER BY id DESC"); ?> <!DOCTYPE html> <html> <head> <title>Administration • ILG-CMS</title> <link rel="stylesheet" type="text/css" href="style/style.css"> </head> <body> <div id="menu"> <table id="menu" border="0"> <tr> <td><a href="index.php">Start</a></td> <td><a href="bearbeiten.php">Bearbeiten</a></td> <td><a href="erstellen.php">Erstellen</a></td> <td><a href="loeschen.php">Löschen</a></td> <td><a href="logout.php">Ausloggen</a></td> </tr> </table> </div> <div id="content"> <h1 id="titel"> Einen Artikel löschen: </h1> <table> <tr> <th>Titel</th> <th>Kategorie</th> <th>ID</th> <tr> <?php while ($row = mysql_fetch_array($result, MYSQL_BOTH)) { printf ("<tr><td><a href='loeschen-aktion.php?titel=%s'>%s</a></td><td>%s</td><td>%s</td></tr>", $row["url"], $row["titel"], $row["kategorie"], $row["id"]); } mysql_free_result($result); ?> </table> </div> </body> </html>
Und die Verarbeitung:
<?php ini_set('display_errors', '1'); error_reporting(E_ALL | E_STRICT); include('auth.php'); require_once "../konfiguration/zugangsdaten.php"; mysql_connect($server, $user, $passwort) or die("Keine Verbindung möglich: " . mysql_error()); mysql_select_db($datenbank) or die("Datenbankfehler: " . mysql_error()); $titel = $_GET["titel"]; $loesch = mysql_query("DELETE * FROM cms_artikel WHERE url = '$titel';"); if ($loesch) { header("Location: loeschen.php"); exit; } ?>
Ich weiß echt nicht weiter...
MfG. Simon D. -
Du hast ein
am Ende des DELETE-Statements, das gehört dort aber nicht hin. Außerdem ist dein Code gegen SQL-Injection anfällig, du solltest unbedingt mysql_real_escape_string() benutzen!;
-
hackyourlife schrieb:
Außerdem ist dein Code gegen SQL-Injection anfällig, du solltest unbedingt mysql_real_escape_string() benutzen!
Danke für den Hinweis, endlich sagt das hier mal jemand!
Genau diese Lücken meinte ich in meinem Beitrag zum CMS als ich von den eklatanten Sicherheitslücken schrieb. Insgesamt bietet das Script keinen Schutz gegen Eingriffe von außen, oder anders gesagt kann jeder, auch ein nicht angemeldeter Gast Daten speichern oder Seiten löschen.
Mit freundlichen Grüßen. -
Und die Fehler werden leider auch immer noch nicht abfangen. Hätte er ein gescheites Error-Handling realisiert
(if(isset($_POST['name'])) { } else { die("BAM!"); }
bzw.$res = mysql_query("bla bla"); if(!$res) { die(mysql_error()); }
häte er kein Problem, die Fehler zu finden. -
simon-d schrieb:
ich schließe mich an ;)
Ich weiß echt nicht weiter...
simon! wo du uns sagst dein formular zu zeigen, ist kein <form ...> drin!? bitte um berichtigung, sonst kann nicht geholfen werden :(
(ein bisschen mehr über das fehlverhalten würde auch nicht schaden.) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage