kostenloser Webspace werbefrei: lima-city


Code funktioniert nicht ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    n************1

    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>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. lokalbook schrieb:
    while($row = mysql_fetch_array($sql)) {
    $title = $row['title'];


    die letzte Klammer muss raus. array($sql))

    Gruß


    schwachsinn, die letzte klammer gehört zum while...

    @topic:
    mach einmal
    echo mysql_error();

    nach der zeile
    $sql=...

    eventuell hast du einen tippfehler in der query.

    mfg
  4. 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
  5. Autor dieses Themas

    n************1

    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>
  6. nilsbierwirth1 schrieb:
    ... Parse error: syntax error, unexpected $end on line 39 ...
    in der zeile 29 hast du das:
    }else{
    und genau der letzte {-klammer wird nicht zugemacht.
  7. 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
  8. promohit schrieb:
    ... und bitte am Ende des Scripts die Datenbank wieder schließen: mysql_close()
    und warum? tutorials lesen: php:mysql-close (da steht:)
    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?)
  9. Autor dieses Themas

    n************1

    Perfekt, jetzt funktioniert alles.
    Danke für die Hilfe
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!