zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Fehler in PHP-Code

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 27.12.2015, 00:26
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard Fehler in PHP-Code

Hallo,
ich habe folgenden Code:
Code:
<html>
<head>
<title>Daten aus einer Datenbank abrufen</title>
</head>
<body>

<ul>

<?php
// Verbindung zum Datenbankserver
mysql_connect("localhost", "username", "password") or die (mysql_error ());

// Datenbank auswählen
mysql_select_db("name_of_db") or die(mysql_error());

// SQL-Query
$strSQL = "SELECT * FROM DBTest ORDER BY vorname DESC";

// Query ausführen (die Datensatzgruppe $rs enthält das Ergebnis)
$rs = mysql_query($strSQL);

// Schleifendurchlauf durch $rs
while($row = mysql_fetch_array($rs)) {

   // Name der Person
  $strName = $row['vorname'] . " " . $row['nachname'];

   // Erstelle einen Link zu person.php mit dem id-Wert in der URL
   $strLink = "<a href = 'person.php?id = " . $row['id'] . "'>" . $strNavn . "</a>";

    // Link in der Liste
   echo "<li>" . $strLink . "</li>";

  }

// Schließt die Datenbankverbindung
mysql_close();
?>

</ul>
</body>
</html>

Leider werden mir beim Ausführen des Codes nur fünf <li>'s gezeigt (die Datenbank enthält fünf Einträge), nicht jedoch die Namen, die ja geladen und verlinkt werden sollen.

Wo liegt mein Fehler?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 27.12.2015, 12:14
Benutzer
neuer user
 
Registriert seit: 30.09.2015
Beiträge: 32
mitchm befindet sich auf einem aufstrebenden Ast
Standard

Kann es sein dass du dich vertippt hast??? Jetzt auf die schnelle sehe ich nicht wo du dein $strName verwendest... Bzw. Woher du den $strNavn in <a> nimmst.. Glaube strNavn soll strName sein?!
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 27.12.2015, 21:27
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard Noch ein fehlerhafter Code!

Zitat:
Zitat von mitchm Beitrag anzeigen
Kann es sein dass du dich vertippt hast??? Jetzt auf die schnelle sehe ich nicht wo du dein $strName verwendest... Bzw. Woher du den $strNavn in <a> nimmst.. Glaube strNavn soll strName sein?!
Genau das war das Problem. Vielen Dank für deinen Tipp.

Ich habe da noch ein Problem mit folgenden Code:

Code:
<html>
<head>
<title>Daten aus einer Datenbank abrufen</title>
</head>
<body>

<dl>

<?php
// Verbindung zum Datenbankserver
mysql_connect("localhost", "username", "password") or die (mysql_error ());

// Datenbank auswählen
mysql_select_db("db_name") or die(mysql_error());

// Daten aus der Datenbank abrufen, wobei der Wert von id aus in der URL berücksichtigt wird
$strSQL = "SELECT * FROM DBTest WHERE id=" . $_GET["id"];
$rs = mysql_query($strSQL);

// Schleifendurchlauf durch $rs
while($row = mysql_fetch_array($rs));

// Schreibe die Daten der Person
echo "<dt>Name:</dt><dd>" . $row["vorname"] . " " . $row["nachname"] . "</dd>";
echo "<dt>Straße und Hausnummer:</dt><dd>" . $row["adresse_HN"] . "</dd>";
echo "<dt>PLZ:</dt><dd>" . $row["plz"] . "</dd>";


// Schließt die Datenbankverbindung
mysql_close();
?>

</dl>
<p><a href="list.php">Zurück zur Liste</a></p>

</body>

</html>

Ich erhalte folgenden Fehler:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /var/www/html/person.php on line 21

Kannst du mir vielleicht auch hierbei helfen?

Vile Grüße,
David.
Mit Zitat antworten
  #4 (permalink)  
Alt 28.12.2015, 12:08
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.887
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Der Code enthält eine Reihe Probleme.

1. kein DOCTYPE
2. du verwendest das veraltete und bald nicht mehr existierende mysql Erweiterung
3. Dein Code ist anfällig für sql-injection

Die Fehlermeldung besagt, dass der Inhalt der Variabel $rs keine gültige Resource ist, d.h. bei dem Aufruf von mysql_query ist etwas schief gegangen, da du dort aber keine Fehler prüfst weißt du nicht was.
Mit Zitat antworten
  #5 (permalink)  
Alt 01.01.2016, 22:57
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 748
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Zitat:
2. du verwendest das veraltete und bald nicht mehr existierende mysql Erweiterung
Das heißt: Du solltest auf mysqli oder PDO umsatteln, um dich mit MySQL-Datenbanken zu verbinden.

- PHP: MySQLi - Manual (sehr ähnlich zur mysql-Extension)
- PHP: PDO - Manual (allgemeines Interface zur Arbeit mit diversen Datenbanksystemen)

Zudem solltest du auch noch den Kontextwechsel nach HTML beachten (htmlspecialchars) und optimalerweise auch noch das EVA-Printip.

- Programmiertechnik/Kontextwechsel
- EVA Prinzip - PHP Forum: phpforum.de

Hier eine Idee:

(Wobei man wirklich sagen muss, dass das filter-Zeug so kompliziert zu verwenden ist und so schlecht dokumentiert ist, dass man fast wahnsinnig damit wird. Könnte man doch vielleicht anders schreiben.)

PHP-Code:
<?php

/**
 * @param mysqli $mysqli
 * @param int $id
 * @return array
 */
function getDataById(mysqli $mysqli$id)
{
    if (!
is_int($id)) {
        throw new 
Exception();
    }

    
$q "SELECT vorname, nachname, addresse_HN, plz FROM DBTest WHERE id=" . (int)$id;

    
$res $mysqli->query($q);

    
$data = array();

    while (
$row $res->fetch_assoc()) {
        
$data[] = $row;
    }

    return 
$data;
}

/**
 * @param string $s
 * @return string
 */
function e($s)
{
    return 
htmlspecialchars($sENT_QUOTES'UTF-8');
}



$id filter_input(INPUT_GET'id'FILTER_VALIDATE_INT, array(
    
'options' => array('min_range' => 1'max_range' => PHP_INT_MAX)
));

if (!
is_int($id)) {
    throw new 
Exception();
}

$mysqli = new mysqli('localhost''username''password''db_name');

$data getDataById($mysqli$id);

header('Content-Type: text/html; charset=UTF-8');

?><!doctype html>
<html>
<head>
<title>Daten aus einer Datenbank abrufen</title>
</head>
<body>

<?php if (count($data) === 0) : ?>

<p>Keine Daten</p>

<?php else : ?>

<dl>

    <?php foreach ($data as $d) : ?>

    <dt>Name:</dt>
    <dd><?=e($d['vorname'] . ' ' $d['nachname'])?></dd>

    <dt>Straße und Hausnummer:</dt>
    <dd><?=e($d['adresse_HN'])?></dd>

    <dt>PLZ:</dt>
    <dd><?=e($d['plz'])?></dd>

    <?php endforeach; ?>

</dl>

<?php endif; ?>

<p><a href="list.php">Zurück zur Liste</a></p>

</body>

</html>
Mit Zitat antworten
  #6 (permalink)  
Alt 16.01.2016, 20:53
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank!
Mit Zitat antworten
  #7 (permalink)  
Alt 25.02.2018, 19:34
Neuer Benutzer
neuer user
 
Registriert seit: 25.02.2018
Beiträge: 7
bidu2 befindet sich auf einem aufstrebenden Ast
Standard

Hallo David1997
Ich möchte fragen ob das Script mit Mysqli bei dir Funktioniert. Bei mir geht es nämlich nicht.
Fehler: Fatal error: Uncaught Exception in index.php:47 Stack trace: #0 {main} thrown in index.php on line 47
Mit Zitat antworten
  #8 (permalink)  
Alt 25.02.2018, 19:37
Neuer Benutzer
neuer user
 
Registriert seit: 25.02.2018
Beiträge: 7
bidu2 befindet sich auf einem aufstrebenden Ast
Standard

Und mit einer Url und Id Beispiel domain.de/index.php?=id3 erhalte ich Fehler:
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in index.php:24 Stack trace: #0 index.php(52): getDataById(Object(mysqli), 3) #1 {main} thrown in index.php on line 24
Villeicht hat jemand eine Idee dazu?
Mit Zitat antworten
  #9 (permalink)  
Alt 26.02.2018, 09:23
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bidu2 Beitrag anzeigen
Und mit einer Url und Id Beispiel domain.de/index.php?=id3 erhalte ich Fehler:
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in index.php:24 Stack trace: #0 index.php(52): getDataById(Object(mysqli), 3) #1 {main} thrown in index.php on line 24
Villeicht hat jemand eine Idee dazu?
Kannst du mal deinen Code hier posten?

Grüße,
David.
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 26.02.2018, 20:10
Neuer Benutzer
neuer user
 
Registriert seit: 25.02.2018
Beiträge: 7
bidu2 befindet sich auf einem aufstrebenden Ast
Standard

Hallo David
Hier den Code, wie bereits hier gepostet:
<?php

/**
* @param mysqli $mysqli
* @param int $id
* @return array
*/
function getDataById(mysqli $mysqli, $id)
{
if (!is_int($id)) {
throw new Exception();
}

$q = "SELECT vorname, nachname, addresse_HN, plz FROM DBTest WHERE id=" . (int)$id;

$res = $mysqli->query($q);

$data = array();

while ($row = $res->fetch_assoc()) {
$data[] = $row;
}

return $data;
}

/**
* @param string $s
* @return string
*/
function e($s)
{
return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}



$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array(
'options' => array('min_range' => 1, 'max_range' => PHP_INT_MAX)
));

if (!is_int($id)) {
throw new Exception();
}

$mysqli = new mysqli('localhost', 'username', 'password', 'db_name');

$data = getDataById($mysqli, $id);

header('Content-Type: text/html; charset=UTF-8');

?><!doctype html>
<html>
<head>
<title>Daten aus einer Datenbank abrufen</title>
</head>
<body>

<?php if (count($data) === 0) : ?>

<p>Keine Daten</p>

<?php else : ?>

<dl>

<?php foreach ($data as $d) : ?>

<dt>Name:</dt>
<dd><?=e($d['vorname'] . ' ' . $d['nachname'])?></dd>

<dt>Straße und Hausnummer:</dt>
<dd><?=e($d['adresse_HN'])?></dd>

<dt>PLZ:</dt>
<dd><?=e($d['plz'])?></dd>

<?php endforeach; ?>

</dl>

<?php endif; ?>

<p><a href="list.php">Zurück zur Liste</a></p>

</body>

</html>
Gruss Beat
Mit Zitat antworten
Sponsored Links
Antwort

Stichwörter
html, php

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fehler im Code oder doch nicht? Star_Scream CSS 1 09.07.2008 16:10
Fehler im Code die Formatierungen werden nicht angezeigt Basicline334ak CSS 8 09.07.2008 15:08
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09
PHP Code aus einer Datenbank beziehen und ausführen? Zen5656 Serveradministration und serverseitige Scripte 3 03.09.2006 17:20


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:12 Uhr.