[PHP] Komme nicht weiter...

Pilly

Lt. Commander
Registriert
Juli 2004
Beiträge
1.269
Wenn ich das Skript aufrufe, erhalte ich ein paar Fehlermeldungen.

1. Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in...
PHP:
$anmeldungen=mysql_num_rows($result1);
echo "Es liegen insgesamt $anmeldungen vor.";

2. Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in...
PHP:
while($row=mysql_fetch_assoc($result1)) {
echo "<tr>";
//Code geht weiter
}

Wo liegen da die Fehler? Ich habe den entsprechenden Code Teil mal hinzugefügt.
Hoffe, dass mir jemand helfen kann.

Pilly
 
Das deutet auf eine fehlerhafte SQL-Abfrage oder ein DB-Verbindungsproblem/ Verbindungskennung.
Auf jedenfall haben diese Funktionen nichts zum Verarbeiten. ;)

Gehen denn andere Scripte?
Poste mal etwas mehr von diesem script.
 
genau!

wie du sieht liegt es an $result1

gib mal den code davon an, oder am besten direkt mehr von dem skript!
 
Hier ist auch ein Fehler:

PHP:
echo "Es liegen insgesamt $anmeldungen vor.";

Du solltest die Variable nicht in Anführungzeichen schreiben:

PHP:
echo "Es liegen insgesamt " . $anmeldungen . " vor.";

Sonst wird es keine richtige Ausgabe geben.
 
@Rul3R: Nicht ganz richtig! Bei doppelten Anführungszeichen wird die ausgabe funktionieren, bei einfachen, also 'Es liegen insgesamt $anmeldungen vor', würde die ausgabe nicht funktionieren.. und dann stäne halt "Es liegen insgesamt $anmeldungen vor" als ausgabe dar!
 
Mh. Stimmt. Hab ich noch nie so gesehen. Ich find aber die Lösung mit den Punkten trotzdem noch etwas übersichtlicher.
 
So, da hier ja das komplette Skript gefordert wurde, stelle ich dies mal ein.

PHP:
<?php
  //SQL Daten einbinden
  include("mysql_zugriff.php");
  //SQL Abfrage erstellen
  $sql1="SELECT * FROM spiel";
  $result1=mysql_query($sql1);
  $anmeldungen=mysql_num_rows($result1);
  echo "Es liegen insgesamt $anmeldungen vor.";
  
  //Tabelle wird erstellt
  echo "<table>";
  echo "<tr><th>Name</th><th>E-Mail Adresse</th><th>Alter</th><th>Sonstiges</th>";
  
  while($row=mysql_fetch_assoc($result1)) {
  echo "<tr>";
  
    foreach ($row as $key => $value) {
    echo "<td>$value&nbsp;</tr>";
    }
  echo "</tr>";
  }
  echo "</table>";
  mysql_close($sql1);

  echo "<table>";
    if (isset($_POST['name'])) {
      
      //Sind die Pflichtangaben ausgefuellt?
      if(empty($_POST['name']) || empty($_POST['mail'])) {
      echo "<tr><td bgcolor='#FF0000'><b>Leider fehlt eine der Pflichangaben!</b></td></tr>";
      }
      else {
      
      
      //Auf richtige Mail-Adresse pruefen
      $rightmail="/^[a-zA-Z0-9-_.äöüÄÖÜéèÉÈ]+@[[a-zA-Z0-9-_.äöüÄÖÜéèÉÈ]+\.[a-zA-Z]{2,5}$/";
      if(preg_match($rightmail, $_POST['mail'])==0) {
      echo "<tr><td bgcolor='#FF0000'><b>Die E-Mail Adresse ist nicht g&uuml;ltig</b>
            </td></tr>";
      }
      else {
      
      //mailbody bauen
      $mailbody=$_POST['name'] . " mit der E-Mail Adresse " .  $_POST['mail'] . " moechte  
                mitfahren.
                 Alter:" .  $_POST['alter'] . " Au&szlig;erdem gibt es folgende Notiz:"
                 . $_POST['text'];
      
      //mail()-Funktion nutzen
      if(@mail("mail@adresse.de", "Kartenwunsch VfL", $mailbody,
               $_POST['mail'])) {
      echo "<tr><td bgcolor='#00CC00'><b>Danke, die Daten wurden &uuml;bermittelt. 
            Du erh&auml;lst bald per E-Mail
            weitere Infos.
            </td></tr></b>";
      // Preis berechnen mit switch-Abfrage
      switch($_POST['alter']) {
      case"13":
      echo "<tr><td bgcolor='#00CC00'><b>Bitte 4€ zahlen f&uuml;r die Karte!</b></td></tr>";
      break;
      case"14":
      echo "<tr><td bgcolor='#00CC00'><b>Bitte 4€ zahlen f&uuml;r die Karte!</b></td></tr>";
      break;
      case"15":
      echo "<tr><td bgcolor='#00CC00'><b>Bitte 6,50€ zahlen f&uuml;r die Karte!
            </b></td></tr>";
      break;
      case"16":
      echo "<tr><td bgcolor='#00CC00'><b>Bitte 6,50€ zahlen f&uuml;r die Karte!
            </b></td></tr>";
      break;
      }
      }
      else {
      echo "<tr><td bgcolor='#FF0000'><b>Leider trat ein Fehler auf.
            Bitte versuche es nochmal oder schreib mir eine
            Mail an (Mail-Adresse)</b></td></tr>";
      }
      }
      }
    
    }
echo "</table>"; 
   ?>

Hoffe mal, dass euch das weiter hilft. Bin noch PHP Anfänger und kann das alles noch nicht so gut...
 
Es wird wohl ein Fehler in der mysql_zugriff.php vorliegen. Poste die mal. Zensier aber vorher Passwort und so..:freaky:
 
Passwort braucht nicht zensiert werden, da ich das erstmal lokal mit XAMPP ohne PW ausprobiere. Aber hier die Zugangsdaten.

PHP:
<?php
@mysql_connect("localhost", "root", "") or die("MySQL Verbindung fehlgeschlagen!");
@mysql_select_db("tickets") or die("Kein Zugriff auf die Datenbank m&ouml;glich!");
?>
 
Bin ich blöd. Die Tabelle spiel habe ich vergessen zu erstellen... mein (sehr dämlicher) Fehler.
Danke für eure Bemühungen.

Edit: Jetzt gibt es nur noch bei mysql_close eine Fehlermeldung (immer noch die gleiche).
 
Zuletzt bearbeitet:
So, jetzt taucht aber wieder ein Problem auf.

PHP:
<?php
  include("mysql_zugriff.php");
  $gegner_="SELECT Gegner FROM spiel";
  $gegner=mysql_query($gegner_);
  $datum_="SELECT Datum FROM spiel";
  $datum=mysql_query($datum_);
  $uhrzeit_="SELECT Uhrzeit FROM spiel";
  $uhrzeit=mysql_query($uhrzeit_);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>VfL Osnabr&uuml;ck gegen <?php echo $gegner; ?></title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  </head>
  <body>
  <p><h1>Ja, ich will mit gegen <?php echo $gegner; ?>!</h1></p>
  Bitte eintragen, wer mit will beim Spiel:<br />
  <strong>VfL Osnabr&uuml;ck vs. <?php echo $gegner; ?></strong><br />
  Statt findet das Spiel am <strong><?php echo $datum; ?> um <?php echo $uhrzeit; ?> Uhr

Statt der Uhrzeit, dem Datum usw. aus der Tabelle erhalte ich nur "Resource id #4" für "$gegner", "Resource id #5" für "$datum" und "Resource id #6" für "$uhrzeit".

Was kann man da machen?
 
Wie wärs wenn Du die jeweiligen results noch mit mysql_fetch_xxx ausliest ? ;)

zb.:

$sqlstr ="SELECT Gegner FROM spiel";
$rs=mysql_query($sqlstr);

while($r=mysql_fetch_array($rs)) {
echo "<BR>".$r['Gegner'];

}

usw.
 
Zuletzt bearbeitet:
Und den rückgabewert von mysql_query überprüfen:

PHP:
$result = mysql_query($query);

if(!$result) { exit("MySQL Error in query $query, mysql said: ".mysql_error()); }

while($row = mysql_fetch_assoc($result)) {...
 
genau... mach das ganze so:

PHP:
$query = "SELECT * FROM spiel";
$result = mysql_query($query);
if(!$result) { exit("MySQL Error in query $query, mysql said: ".mysql_error()); }

while($row = mysql_fetch_assoc($result)) {
// Hier kommt dann deine Ausgabe hin! z.B.:
echo "<table><tr><td>".$row['Gegner']."</td></tr></table>
}

achja: um die ausgabe etwas einfacher zu gestalten kannste dsa so machen

PHP:
<?php
...
while($row = mysql_fetch_assoc($result)) {
?>
HIER KOMMEN DIE GANZ NORMALEN HTML-TAGS HIN! 
bei einer ausgabe von php werten musste dann so vorgehen wie du es schon gemacht hast, also <?php echo $row['Gegner']; ?>
WEITERE HTML TAGS
<?php
} // ende while
?>
 
Was kann ich hier noch verändern? Im Moment bekomme ich eine Tabelle in der die Werte doppelt aufgeführt sind.

PHP:
$sql2="SELECT * FROM tickets";
  $result2=mysql_query($sql2);
  $anmeldungen=mysql_num_rows($result2);
  
  echo "Es liegen $anmeldungen Anmeldungen vor.<br />";
  echo "Folgende Personen haben sich bereits eingetragen<br />";
  
  //Tabelle wird erstellt
  echo "<table>";
  echo "<tr><th>Name</th><th>E-Mail Adresse</th><th>Alter</th><th>Sonstiges</th>";
  
  while($row2=mysql_fetch_array($result2)) {
  echo "<tr>";
  
    foreach ($row2 as $key => $value) {
    echo "<td>$value&nbsp;</td>";
    }
  echo "</tr>";
  }
  echo "</table>";
 
es wird doch alles doppelt ausgegeben, oder?

dachte das würde dsa problem lösen ;D aber wenn dem nicht der fall ist, dass alles doppelt ausgegeben wird, dann ignorier meinen vorschlag ;D
 
Du könntest je nach Spaltennamen folgendes machen:

PHP:
while($row2=mysql_fetch_array($result2)) {
  echo "<tr>";
  echo "<td>.$row2['name'].</td>";
  echo "<td>.$row2['e-mail'].</td>";
  echo "<td>.$row2['alter'].</td>";
  echo "<td>.$row2['sonstiges'].</td>";
  echo "</tr>";
}
 
Zuletzt bearbeitet:
@cobinja: ich glaube diese ausgabe würde nicht funktionieren.. müsste so lauten..

PHP:
while($row2=mysql_fetch_array($result2)) {
  echo "<tr>";
  echo "<td>".$row2['name']."</td>";
  echo "<td>".$row2['e-mail']."</td>";
  echo "<td>".$row2['alter']."</td>";
  echo "<td>".$row2['sonstiges']."</td>";
  echo "</tr>";
}
 
Zurück
Oben