Code funktioniert nicht ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
anzahl
array
ausgabe
bekommen
code
datei
datenbank
datum
durchlauf
ende
fehler
header
http
login
nummer
ordern
syntax
url
zeile
-
Wieso funktioniert dieser Code nicht ?
Im meinem Browser wird angezeigt:
Here is my Blog
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given on line 15
<?php mysql_connect("localhost", "username", "password"); mysql_select_db("name"); ?> <html> <head> <title>Show Me My Blog</title> </head> <body> Here is my Blog<hr /> <?php $sql = mysql_query("SELECT * FROM blogData ORDER BY id DESC"); while($row = mysql_fetch_array($sql)) { $title = $row['title']; $content = $row['content']; $category = $row['category']; ?> <table border="1"> <tr><td><?php echo $title; ?></td><td><?php echo $category; ?></td></tr> <tr><td colspan='2'><?php echo $conent; ?></td></tr> </table> <?php } ?> </body> </html>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
HAllo
nimm doch besser mysql_fetch_assoc um gleich ein "schönes" Array zu bekommen
$con = mysql_connect("localhost", "username", "password"); mysql_select_db("name"); $sql = "SELECT * FROM blogData ORDER BY id DESC"; $result = mysql_query($sql, $con); $daten = array(); while( $row = mysql_fetch_assocy($result) ) { $daten[] = $row; } mysql_close($con);
Bitte beachte die (leeren) Eckigen Klammern bei $daten[] = $row;
damit erhöht sich der Array-Index bei jedem Durchlauf von while() automatisch um 1
Wenn Du Dir gleich ein Array erstellst, kannst Du die mysql-Verbindung mit mysql_close()
auch gleich wieder schliessen,und hast sie nicht während der Ausgabe noch offen.
So lässt sich eine MySQL-Abfrage auch leicher "auslagern" in eine include-Datei oder Funktion
// ---- jetzt steht Dir ein 2-dimensionales Array zur Verfügung
// ---- Debug Ausgabe ----
echo "<pre>\n";
print_r($daten);
echo "</pre>\n";
/// ---- Ausgabe des Arrays mit foreach() ----
$i = 0; forech($daten as $item) { echo "<br /><u>Nummer: ". ($i+1) ."</u>\n"; echo "<br />".$item['title']."\n"; echo "<br />".$item['content']."\n"; echo "<br />".$item['category']."\n"; $i++; }
wobei $i hier nicht unbedingt notwendig ist, nur zur Nummerierung der Ausgabe
/// ---- Ausgabe des Arrays mit for() ----
$anzahl = count($daten); for ($i=0; $i < $anzahl; $i++) { echo "<br /><u>Nummer: ". ($i+1) ."</u>\n"; echo "<br />$daten[$i]['title']."\n"; echo "<br />$daten[$i]['content']."\n"; echo "<br />$daten[$i]['category']."\n"; }
hier ist das $i wichtig, weil es den Zähler für das Array (in der 1. Dimension) darstellt
ich empfehle foreach() denn da spart man sich das count() und eine Ebene, also weniger Code
aber manchmal braucht man ja die Anzahl vorher ... das ginge auch mit mysql_num_rows()
$rowsanzahl = mysql_num_rows($result);
PS: Fehler abfangen, dann tust Du Dir leichter die Fehler zu finden (Syntax, etc)
if (!$con) {
echo "<br /> Verbindungs Fehler. <br />".mysql_error(); exit;
}
if (!$result) {
echo "<br /> Abfrage Fehler. <br />".mysql_error(); exit;
}
sonst kommt oft gar keine Ausgabe und Du kannst anfangen zu suchen
Beitrag zuletzt geändert: 8.8.2011 22:17:29 von promohit -
ich hab das problem jetzt gelöst mit dem
echo mysql_error();
Jetzt wird nichts mehr angezeigt, da ich wahrscheinlich noch keinen Eintrag in der Tabelle habe,
jetzt hab ich noch ein Fehler ich einer anderen Datei:
Er zeigt das an:
Parse error: syntax error, unexpected $end on line 39
<?php mysql_connect("localhost", "user", "password"); mysql_select_db("name"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Login</title> </head> <body> <?php if(isset($_POST['submit'])) { $name = $_POST['name']; $pass = $_POST['password']; $result = mysql_query("SELECT * FROM users WHERE name='$name' AND pass='$pass'"); $num = mysql_num_rows($result); if($num == 0) { echo "Bad login, go <a href='login.php'>back</a>"; }else{ session_start() ; $_SESSION['name'] = $name; header("Location: admin.php"); } }else{ ?> <form action='login.php' method='post'> Username: <input type="text" name="name" /><br /> Password: <input type="password" name="password" /><br /> <input type="submit" name="submit" value="Login!" /> </form> </body> </html>
-
nilsbierwirth1 schrieb:
in der zeile 29 hast du das:
... Parse error: syntax error, unexpected $end on line 39 ...
und genau der letzte {-klammer wird nicht zugemacht.}else{
-
also so
<?php $con = mysql_connect("localhost", "user", "password");; ... ... ... header("Location: admin.php"); } }else{ ?> <form action='login.php' method='post'> Username: <input type="text" name="name" /><br /> Password: <input type="password" name="password" /><br /> <input type="submit" name="submit" value="Login!" /> </form> <?php mysql_close( $con ); } ?> </body> </html>
aber bitte vernachlässige nicht so ganz die Sicherheit
Stichwort SQL Injection
mach zumindest mysql_real_escape_string ()
$name = mysql_real_escape_string ( $_POST['name'] );
$pass = mysql_real_escape_string ( $_POST['password'] );
und bitte am Ende des Scripts die Datenbank wieder schließen: mysql_close();
siehe Code
Beitrag zuletzt geändert: 11.8.2011 1:28:34 von promohit -
promohit schrieb:
und warum? tutorials lesen: php:mysql-close (da steht:)
... und bitte am Ende des Scripts die Datenbank wieder schließen: mysql_close()Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution. See also freeing resources.
(hat er etwas persistent aufgemacht?) -
Perfekt, jetzt funktioniert alles.
Danke für die Hilfe -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage