[PHP & MySQL] 2 Fehler - "mysql_num_rows()" und "Cannot modify header"

TS7

Well-known member
ID: 251056
L
22 September 2006
374
20
Hi,
Ich habe mir ein LoginScript mit Sessions besorgt, was ich jetzt auch benutzen möchte.
Leider gibt er mir, wenn ich einloggen möchte folgende Fehler:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/virtual/Domain/login.php on line 20

Warning: Cannot modify header information - headers already sent by (output started at /var/www/virtual/Domain/NEU/login.php:20) in /var/www/virtual/Domain/login.php on line 35
Hier der Code von der Datei (login.php)

PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include 'mysql.php';
if (mysql_select_db ("Mitglieder", $connectionid))
{ 
  die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT Nick, Passwort, Vorname, Nachname ".
  "FROM ".
    "Mitglieder ".
  "WHERE ".
    "(Nick like '".$_REQUEST["name"]."') AND ".
    "(Passwort = '".md5 ($_REQUEST["pwd"])."');";
$result = mysql_query ($sql);

if (mysql_num_rows( $result) > 0)
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["ID"];
  $_SESSION["user_nick"] = $data["Nick"];
  $_SESSION["user_vorname"] = $data["Vorname"];
  $_SESSION["user_nachname"] = $data["Nachname"];
  
  header ("Location: intern.php");
}
else
{
  header ("Location: formular.php?fehler=1"); 
}
?>
Es wäre furchbar nett, wenn einer mir helfen könnte.
 
Der zweite Fehler kommt, weil die erste Fehlermeldung kommt. Wenn du die erste Fehlermeldung los wirst, dann ist die zweite automatisch auch verschwunden (zumindest in der Theorie).

Der erste Fehler liegt am SQL-Befehl, aber woran genau kann ich auch nicht sagen. Sieht auf den ersten Blick alles ok aus.

Wenn du sagst, du hast dir das Login-Script besorgt, gibt es dann da irgendwelche Tabellen, die in der DB angelegt werden müssen? Hast du das gemacht? Stimmen die Namen der Spalten mit denen in der Abfrage überein.

Ansonsten versuch das, was im ersten Link von theHacker steht.
 
ja Datenbanken alle vorhanden.
ich habe noch ein "!" ein gebaut.

PHP:
// Datenbankverbindung aufbauen 
include ('mysql.php');

if (!mysql_select_db ($dbName, $connectionid))
{ 
die ("Keine Verbindung zur Datenbank");
}
  $sql = "SELECT Nick, Passwort, Vorname, Nachname ".
  "FROM ".
    "Mitglieder ".
  "WHERE ".
    "(Nick like '".$_REQUEST["name"]."') AND ".
    "(Passwort = '".md5 ($_REQUEST["pwd"])."');";
  $result = mysql_query ($sql);
  if (mysql_num_rows ($result) > 0)
{
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);

jetzt kommt nur noch die Meldung "Keine Verbindung zur Datenbank".
 
Hast du zur Datenbank konnektiert und ist das Verbindungshandle gültig ?
 
Zeig mal bitte den Code der mysql.php
Wenn da irgendwelche Passwörter oder Benutzernamen drinstehen, dann bitte durch xxx erstetzen!
 
Muss am Ende der MySQL Anweisung nicht das ; weg?

Aber eine Verbindung zur Datenbank sollte schon bestehen, wie Sebbo bereits sagte, die mysql.php müsstest du mal zeigen.
 
Hier meine mysql.php

PHP:
<?
//Hier den MySQL-Host angeben:
$dbHost="localhost";
//Hier den Usernamen zum Einloggen in den Datenbankserver eingeben:
$dbUser="61_Mitglieder";
//Hier das Passwort der MySQL-Datenbank angeben:
$dbPass="XXX";
//Hier den Namen der MySQL-Datenbank angeben
$dbName="61_MitgliederDaten";
##################################
//Ab hier nichts mehr ändern, wenn man keine Ahnung hat !

$connectionid = mysql_connect($dbhost, $dbuser, $dbpw);

?>
 
Zuletzt bearbeitet:
So jetzt habe ich etwas verändert
Ich poste mal 3 Dateien, weil ich jetzt komischer weiste ein der datei formular.php einen Fehler habe.

formular.php
PHP:
<?php 
session_start(); ?>
<html> 
<head> 
  <title>Login</title> 
</head> 

<body> 
<?php
if (isset ($_REQUEST["fehler"])) 
{ 
  echo "Die Zugangsdaten waren ungültig."; 
} 
?>
<form action="login.php" method="post">
  <table width="200" border="0">
      <tr>
        <td width="70">Nick: </td>
        <td width="120"><input type="text" name="name" size="20"></td>
      </tr>
      <tr>
        <td>Passwort:</td>
        <td><input type="password" name="pwd" size="20"></td>
      </tr>
      <tr>
        <td><input type="submit" value="Login"></td>
        <td> </td>
      </tr>
    </table> 
  </form> 
</body> 
</html>
Fehler:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/virtual/Domain/formular.php:1) in /var/www/virtual/Domain/formular.php on line 2


login.php
PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include ('mysql.php');

if (mysql_select_db ($dbname, $connectionid))
{ 
die ("Keine Verbindung zur Datenbank");
}
  $sql = "SELECT Nick, Passwort, Vorname, Nachname ".
  "FROM ".
    "Mitglieder ".
  "WHERE ".
    "(Nick like '".$_REQUEST["name"]."') AND ".
    "(Passwort = '".md5 ($_REQUEST["pwd"])."');";
  $result = mysql_query ($sql) or die(mysql_error());
  if (mysql_num_rows ($result) > 0)
{
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["ID"];
  $_SESSION["user_nick"] = $data["Nick"];
  $_SESSION["user_vorname"] = $data["Vorname"];
  $_SESSION["user_nachname"] = $data["Nachname"];
  
  header ("Location: intern.php");
}
else
{
  header ("Location: formular.php?fehler=1"); 
}
?>
Beim Klicken auf submit button (formular.php) kommt nur:
Keine Verbindung zur Datenbank


mysql.php
PHP:
<?
//Hier den MySQL-Host angeben:
$dbhost="localhost";
//Hier den Usernamen zum Einloggen in den Datenbankserver eingeben:
$dbuser="61_Mitglieder";
//Hier das Passwort der MySQL-Datenbank angeben:
$dbpw="xxx";
//Hier den Namen der MySQL-Datenbank angeben
$dbname="61_MitgliederDaten";
##################################
//Ab hier nichts mehr ändern, wenn man keine Ahnung hat !

$connectionid = mysql_connect($dbhost, $dbuser, $dbpw);
?>
Es wäre wunderbar, wenn jemand mir sagen könnte, wie ich das Problem beheben kann.
 
Zuletzt bearbeitet:
Ist die formular.php genauso wie du sie oben geposted hast? Weil in der ersten Zeile der Datei müsste eine Ausgabe sein (Lücke, neue Zeile, ... zählen auch als Ausgabe!)
 
danke für deine Antwort.
Aber leider klappt das auch nicht
PHP:
<?php
session_start();?>
 
Die Lücke nach dem session_start meinte ich auch nicht, weil die ja innerhalb von dem PHP Teil ist.
Aber wenn vor dem <?php wirklich keine Lücke oder so ist, wundert mich die Fehlermeldung... denn die besagt, dass dort eine Ausgabe statt findet in der ersten Zeile der Datei formular.php
 
Die Fehlermeldung is eindeutig: In Zeile 2 sollte ein Header gesendet werden, obwohl in Zeile 1 wegen Ausgabe die Header schon rausgehauen wurden.

Vor dem <?php-Tag steht also mindestens ein Byte, was da nicht hingehört.
 
schon wäre es, dass es dieser Fehler gewesen wäre :(
Dann wäre es immerhin behoben.
Aber ich finde Kein leerzeichen davor...
Ich arbeite mit Dramweaver. Liegt es villt. daran?
 
Ein Fehler ist gehoben.

Ich habe den Quelltext aus Dreamweaver in ein Textdokument kopiert und dann als formular.php gespeichert.

Jetzt ist der Fehler weg. Juhu :mrgreen:

Leider habe ich noch einen Fehler in meinen 11# Post
Das ich leider keine Verbindung aufnehmen kann.
 
Mach mal aus:
PHP:
$connectionid = mysql_connect($dbhost, $dbuser, $dbpw);
folgendes:
PHP:
$connectionid = mysql_connect($dbhost, $dbuser, $dbpw) OR die("Konnte keine Verbindung zum MySQL Server herstellen.");