Niklas: Warum kommt da nichts?!?

Hi!
Habe da ein Script, das mir Probleme bereitet. Wenn ich die Datei formular.php aufrufe, bleibt der Bildschirm weiß. Hier die Datei:

  
<?php require_once('Connections/localhost.php'); ?>  
<?php  
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")  
{  
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;  
  
  switch ($theType) {  
    case "text":  
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";  
      break;  
    case "long":  
    case "int":  
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";  
      break;  
    case "double":  
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";  
      break;  
    case "date":  
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";  
      break;  
    case "defined":  
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;  
      break;  
  }  
  return $theValue;  
}  
  
$editFormAction = $_SERVER['PHP_SELF'];  
if (isset($_SERVER['QUERY_STRING'])) {  
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);  
}  
  
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {  
  $insertSQL = sprintf("INSERT INTO namen (order, klasse, anzahl, komplett, reihe4, reihe3, reihe2, reihe1, missing) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",  
                       GetSQLValueString($_POST['order'], "int"  
                       GetSQLValueString($_POST['klasse'], "text"),  
                       GetSQLValueString($_POST['anzahl'], "text"),  
                       GetSQLValueString($_POST['komplett'], "text"),  
                       GetSQLValueString($_POST['reihe4'], "text"),  
                       GetSQLValueString($_POST['reihe3'], "text"),  
                       GetSQLValueString($_POST['reihe2'], "text"),  
                       GetSQLValueString($_POST['reihe1'], "text"),  
                       GetSQLValueString($_POST['missing'], "text"));  
  
  mysql_select_db($database_localhost, $localhost);  
  $Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());  
  
  $insertGoTo = "erfolgreich.htm";  
  if (isset($_SERVER['QUERY_STRING'])) {  
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";  
    $insertGoTo .= $_SERVER['QUERY_STRING'];  
  }  
  header(sprintf("Location: %s", $insertGoTo));  
}  
?>  
<!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=iso-8859-1" />  
<title>Jahrbuchfotos 2006 - Klasse 10b - SMTX</title>  
</head>  
  
<body>  
 <A HREF="index.html">zur&uuml;ck zur Hauptseite</A>  
  <H1>Klasse 10b</H1>  
  <H2><KBD>SMTX</KBD></H2>  
   <FORM METHOD="post" NAME="form1" ACTION="<?php echo $editFormAction; ?>">  
    <FIELDSET>  
     <LEGEND><B>Ausgew&auml;hltes Foto</B></LEGEND>  
      <IMG SRC="file:///C:/klassenfotos05/bilder/10b.png" ALT="Dieses Bild fehlt noch oder wurde nicht richtig abgespeichert" WIDTH="50%">  
    </FIELDSET>  
    <FIELDSET>  
     <LEGEND><B>Allgemeine Informationen</B></LEGEND>  
      <INPUT NAME="order" TYPE="hidden" VALUE="34">  
      <INPUT NAME="klasse" TYPE="hidden" VALUE="10b">  
      <INPUT NAME="anzahl" TYPE="hidden" VALUE="25">  
     Sind alle Sch&uuml;ler abgebildet?  
     <P>  
      <INPUT TYPE="radio" NAME="komplett" VALUE="ja"> ja<BR>  
      <INPUT TYPE="radio" NAME="komplett" VALUE="nein"> nein  
     </P>  
    </FIELDSET>  
    <FIELDSET>  
     <LEGEND><B>Eingabe der Namen der Sch&uuml;ler</B></LEGEND>  
      Bitte geben Sie f&uuml;r jede Reihe die Namen der Sch&uuml;ler, jeweils durch Komma getrennt, ein!<BR>  
      Vergessen Sie nicht sich selbst!  
      <P>  
       Dar&uuml;ber stehen:<BR>  
       <I>Wenn sich Ihre Sch&uuml;ler nur auf 3 Reihen verteilen, kennzeichnen Sie dies durch ein "-" im Feld unten!</I><BR>  
       <INPUT NAME="reihe4" TYPE="text" SIZE="150">  
      </P>  
      <P>  
       Dar&uuml;ber stehen:<BR>  
       <I>Wenn sich Ihre Sch&uuml;ler nur auf 2 Reihen verteilen, kennzeichnen Sie dies durch ein "-" im Feld unten!</I><BR>  
       <INPUT NAME="reihe3" TYPE="text" SIZE="150">  
      </P>  
      <P>  
       Dar&uuml;ber stehen:<BR>  
       <INPUT NAME="reihe2" TYPE="text" SIZE="150">  
      </P>  
      <P>  
       Unten stehen:<BR>  
       <INPUT NAME="reihe1" TYPE="text" SIZE="150">  
      </P>  
      <P>  
       <FONT COLOR="red">Nicht abgebildet:<BR>  
       <I>Wenn alle Sch&uuml;ler da waren, setzen Sie bitte hier ein "-"</I><BR></FONT>  
       <INPUT NAME="missing" TYPE="text" SIZE="150">  
      </P>  
    </FIELDSET>  
    <BR><input type="submit" value=" Ich habe die Daten &uuml;berpr&uuml;ft, bin mir sicher, dass alles richtig ist und m&ouml;chte sie nun &uuml;bertragen ">  
     <input type="hidden" name="MM_insert" value="form1">  
   </FORM>  
   <A HREF="index.html">zur&uuml;ck zur Hauptseite</A>  
</body>  
</html>  

  1. Habe da ein Script, das mir Probleme bereitet. Wenn ich die Datei formular.php aufrufe, bleibt der Bildschirm weiß. Hier die Datei:

    Mein Tipp: Es gibt einen Fehler, aber Dir wird keine Fehlermeldung angezeigt. Versuche es mal mit:
    <?php error_reporting (E_ERROR | E_WARNING | E_PARSE); ?>
    ganz am Anfang der Seite, vielleicht siehst Du dann eine Fehlermeldung.

    • Bugfix
    1. Da tut sich nichts. Habe hier mal noch die andere Datei namens /Connections/localhost.php angehängt (Daten stimmen im Original)

        
      <?php  
      # FileName="Connection_php_mysql.htm"  
      # Type="MYSQL"  
      # HTTP="true"  
      $hostname_localhost = "localhost";  
      $database_localhost = "XXX";  
      $username_localhost = "YYY";  
      $password_localhost = "ZZZ";  
      $localhost = mysql_pconnect($hostname_localhost, $username_localhost, $password_localhost) or trigger_error(mysql_error(),E_USER_ERROR);  
      ?>  
      
      

      Hab echt keine Ahnung, wo da der Fehler liegt...

      Und dann hab ich da noch ne Datei, die mir Inhalte aus der Datenbank (ich habe einen Datensatz probehalber eingegeben) anzeigen soll, doch auch die meldet Fehler:
      test.php

        
      <?php require_once('Connections/localhost.php'); ?>  
      <?php  
      $maxRows_Recordset1 = 10;  
      $pageNum_Recordset1 = 0;  
      if (isset($_GET['pageNum_Recordset1'])) {  
        $pageNum_Recordset1 = $_GET['pageNum_Recordset1'];  
      }  
      $startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;  
        
      mysql_select_db($database_localhost, $localhost);  
      $query_Recordset1 = "SELECT * FROM namen ORDER BY order ASC";  
      $query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);  
      $Recordset1 = mysql_query($query_limit_Recordset1, $localhost) or die(mysql_error());  
      $row_Recordset1 = mysql_fetch_assoc($Recordset1);  
        
      if (isset($_GET['totalRows_Recordset1'])) {  
        $totalRows_Recordset1 = $_GET['totalRows_Recordset1'];  
      } else {  
        $all_Recordset1 = mysql_query($query_Recordset1);  
        $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);  
      }  
      $totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;  
      ?>  
      <!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=iso-8859-1" />  
      <title>Jahrbuchfotos 2006 - &Uuml;bersicht</title>  
      </head>  
        
      <body>  
      <table width="100%" border="0">  
        <tr>  
          <TD>Klasse/Kurs</TD>  
          <td>Anzahl der Sch&uuml;ler</td>  
          <td>Alle da?</td>  
          <td>4. Reihe</td>  
          <td>3. Reihe</td>  
          <td>2. Reihe</td>  
          <td>1. Reihe</td>  
          <td>Es fehlen</td>  
        </tr>  
        <?php do { ?>  
        <tr>  
          <td><?php echo $row_Recordset1['klasse']; ?></td>  
          <td><?php echo $row_Recordset1['anzahl']; ?></td>  
          <td><?php echo $row_Recordset1['komplett']; ?></td>  
          <td><?php echo $row_Recordset1['reihe4']; ?></td>  
          <td><?php echo $row_Recordset1['reihe3']; ?></td>  
          <td><?php echo $row_Recordset1['reihe2']; ?></td>  
          <td><?php echo $row_Recordset1['reihe1']; ?></td>  
          <td><?php echo $row_Recordset1['missing']; ?></td>  
        </tr>  
        <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>  
      </table>  
      </body>  
      </html>  
      <?php  
      mysql_free_result($Recordset1);  
      ?>  
      
      

      Wäre echt nett, wenn ihr mir dabei etwas behilflich sein könntet

      THX

      1. Hallo Niklas,

        Und dann hab ich da noch ne Datei, die mir Inhalte aus der Datenbank (ich habe einen Datensatz probehalber eingegeben) anzeigen soll, doch auch die meldet Fehler:

        Welchen bitte?

        $query_Recordset1 = "SELECT * FROM namen ORDER BY order ASC";
        $query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1,

        Ist Dir klar, dass das SQL-Statement, das in $query_limit_Recordset1 steht, mindestens einen Fehler enthält?

        SELECT  
          *  
        FROM namen  
        ORDER BY order    -- der Fehler ist doch gar nicht zu übersehen.  
                          -- siehe [link:http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html@title=Liste reservierter Wörter]  
                          -- übrigens: Standardsortierung ist aufsteigend :-)  
        
        

        $startRow_Recordset1, $maxRows_Recordset1);

        $Recordset1 = mysql_query($query_limit_Recordset1, $localhost) or die(mysql_error());

        Hier sollte mysql_error() ausgegeben werden. Wird hier etwas ausgegeben? Wenn ja, was? Warum gibst Du Dein SQL-Statement nicht mit aus?

        Dein Doctype

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

        und die folgende

        <TD>Klasse/Kurs</TD>

        Zeile stehen zueinander im Widerspruch. Bitte validiere den generierten Code.

        Freundliche Grüße

        Vinzenz

  2. Hallo Niklas,

    hast Du schon einmal von mysql_real_escape_string() gehört?

    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
    {
      $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

    ... offensichtlich nicht. Im Archiv gibt es dazu einiges zu finden, z.B. folgendes Posting von Sven Rautenberg.

    $insertSQL = sprintf("INSERT INTO namen (order, klasse, anzahl, komplett, reihe4, reihe3, reihe2, reihe1, missing) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",

    $insertSQL enthält ein fehlerhaftes SQL-Statement, siehe mein anderes Posting.

    $Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());

    Hier "stirbt das Skript" und sollte eine Fehlermeldung ausgeben. Der Rest wird nicht mehr ausgeführt, aber auch hier beißen sich Deine Doctype-Deklaration

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    und die folgenden Zeilen, vergleiche dazu SELFHTML, Unterschiede zwischen HTML und XHTML:

    <A HREF="index.html">zur&uuml;ck zur Hauptseite</A>

    [...]

    <FONT COLOR="red">Nicht abgebildet:<BR>

    Warum verwendest Du <font>? Muss das wirklich sein?

    <input type="hidden" name="MM_insert" value="form1">

    Sollte etwa M(acro)M(edia) am ungültigen Code schuld sein?

    Fragende Grüße

    Vinzenz