Zur Navigation

Wieder Probleme mit PHP-Versions-Änderung?

1 Peter

Moin, moin,

habe Probleme mit folgener Seite [habe zur Übersicht eine eigende Testseite erstellt, da die anderen betroffenen Seiten sehr langen Code haben] :

http://www.windeko.de/test.php

Wenn man die Änderung sendet, bekomme ich ein "Interner Serverfehler", vor der Umstellung haben die Seiten funktioniert.

Wo muß ich den Fehler suchen?
<html>

<head>
<style>
table {
float:left;
width:300px;
}
</style>
<style type="text/css">
table { background-color: #EEEEEE; border: 3px; border-spacing: 15px;}
td {color: #000000; background-color: #00000; padding: 2px; text-align: center; vertical-align: middle;
border: solid 1px; border-color: #ff9900;}
span {color: #000000;}
</style>
<?php
   if (isset($_POST["gesendet"]))
   {
    include "connect.inc.php";
    $res = mysql_fetch_query("select * from testtab");
    while ($dsatz = mysql_fetch_assoc($res))
    {
      $sqlab = "insert plissee1";
      $sqlab .= "(breite, preis1, preis2, preis3, preis4) values ";
      $sqlab .= "('" . $_POST["breite"] . "', ";
      $sqlab .= $_POST["preis1"] . ", ";
      $sqlab .= $_POST["preis2"] . ", ";
      $sqlab .= $_POST["preis3"] . ", ";
      $sqlab .= "'" . $_POST["preis4"] . "')";
      mysql_query($sqlab);
      $num = mysql_affected_rows();
      if ($num>0)
      {
         echo "<font color='#00aa00'>";
         echo "Es wurde 1 Datensatz hinzugefügt<p>";
         echo "</font>";
      }
      else
      {
         echo "<font color='#ff0000'>";
         echo "Es ist ein Fehler aufgetreten, ";
         echo "es wurde kein Datensatz hinzugefügt<p>";
         echo "</font>";
      }
     }
   }
 ?>
</head>

<body>
		Geben Sie einen vollst&auml;ndigen Datensatz ein und senden Sie das Formular ab:
		<form action = "http://www.windeko.de/test.php" method = "post">
			<div align="center">
				Testtabelle <br>
        Breite&nbsp;<input name="breite"><font color="black"></font>
				<table width="1236" border="1" cellspacing="2" cellpadding="0">
					<tr>
						<td></td>
						<td><font color="#ff9900"><b>preis1</b></font></td>
						<td><font color="#ff9900"><b>preis2</b></font></td>
						<td><font color="#ff9900"><b>preis3</b></font></td>
						<td><font color="#ff9900"><b>preis4</b></font></td>
					</tr>
					<tr>
						<td><font color="#cc3300">PG</font></td>
						<td><font color="#cc3300"><input name="preis1" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis2" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis3" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis4" size="6"></font></td>
					</tr>

  			</table>
			</div>
			<p><input type="submit" name="gesendet">
    <input type="reset"></p>
		</form>
		

Alle Datensätze <a href="http://www.windeko.de/test_all.php">anzeigen</a>
</body>
</html>

Vielen Dank im voraus.
Viele Grüße
Peter

15.06.2008 18:41

2 Jörg Kruse

Die Funktion mysql_fetch_query() musst du vor der Verwendung definieren:

Zitat von Testseite
Fatal error: Call to undefined function mysql_fetch_query() in /var/www/vhosts/windeko.de/httpdocs/test.php on line 20

15.06.2008 21:21 | geändert: 15.06.2008 21:22

3 Peter

Hallo Jörg,

danke für die Info.

Wieso bekommts Du diese Info über den Fatal error?
Bei mir zeigt der IE nur die "500"er Fehlermeldung.

15.06.2008 21:52

4 Jörg Kruse

Firefox und Opera zeigen den Fehler an (und vermutlich auch andere Browser).

Wenn die Größe der Fehlerausgabe des Servers eine bestimmte Bytezahl unterschreitet, ersetzt der IE diese durch eine eigene Fehlerseite.

15.06.2008 22:02 | geändert: 15.06.2008 22:02

5 Peter

Alles klar ;-)


welche Funktion kann ich den anstatt der jetzigen einsetzen?

Wenn ich "mysql_query()" einsetze werden keine Daten eingetragen.

15.06.2008 22:29

6 Jörg Kruse

Lass dir mit "echo mysql_error();" nach den beiden Queries etwaige Fehler ausgeben.

Dann würde ich überprüfen, wieviele Datensätze die erste Abfrage ausgibt - davon hängt ja wohl auch die zweite ab (auch wenn ich den Zusammenhang nicht ganz verstehe, da $dsatz nicht weiter verwendet wird)

Ich würde die in $_POST übermittelten Variablen übrigens nicht ungefiltert in die Abfrage einbauen, da dies eine SQL-Injection ermöglicht. Die betreffenden Strings sollten mit mysql_real_escape_string() behandelt werden

PS:
$sqlab = "insert plissee1";
Da würde ich noch ein "into" und am Ende ein Leerzeichen einfügen
$sqlab = "insert into plissee1 ";

15.06.2008 23:11

7 Peter

Habe jetzt den Code geändert, leider wird nichts mehr eingetragen.

Edit: habe den neuen Code eingesetzt [23:30][16.06.08]
<html>

<head>
<style>
table {
float:left;
width:300px;
}
</style>
<style type="text/css">
table { background-color: #EEEEEE; border: 3px; border-spacing: 15px;}
td {color: #000000; background-color: #00000; padding: 2px; text-align: center; vertical-align: middle;
border: solid 1px; border-color: #ff9900;}
span {color: #000000;}
</style>

<?php
if (isset($_POST['breite'])
    && isset($_POST['preis1'])
    && isset($_POST['preis2'])
    && isset($_POST['preis3'])
    && isset($_POST['preis4'])) {
// Verbinden mit der Datenbank
//
//
//  connect.inc.php =
//
// 
//   error_reporting(E_ALL);
//   mysql_connect("host","user","password");
//   mysql_select_db("windeko_preis");
//   $db_link = mysql_connect("host","user","password");
//    
//      if($db_link) {
//         echo "Verbindung wurde aufgebaut<br />\n";
//         echo "<pre>\n"; 
//         var_dump($db_link);
//         echo "</pre>\n";
//         } else {
//         echo "Es konnte keine Verbindung aufgebaut werden";
//         }
//     echo "<br>";  
//
//
    include "connect.inc.php";
    $link = mysql_connect;
    $select = mysql_select_db;
    if(!is_resource($link)) {
        
        echo "Verbindung zum Server fehlgeschlagen\n";
     // ... den Fehler loggen

    } else {

     // Die Auswirkungen von magic_quotes_gpc/magic_quotes_sybase zurücksetzen,
     // sofern die Option auf ON gesetzt ist

        if(get_magic_quotes_gpc()) {
            $breite = stripslashes($_POST['breite']);
            $preis1 = stripslashes($_POST['preis1']);
            $preis2 = stripslashes($_POST['preis2']);
            $preis3 = stripslashes($_POST['preis3']);
            $preis4 = stripslashes($_POST['preis4']);
        } else {
            $breite = $_POST['breite'];
            $preis1 = $_POST['preis1'];
            $preis2 = $_POST['preis2'];
            $preis3 = $_POST['preis3'];
            $preis4 = $_POST['preis4'];
        }

     // einen sicheren Query zusammenstellen
        $query = sprintf("INSERT INTO testtab ('breite', 'preis1', 'preis2', 'preis3', 'preis4') VALUES ('%s', '%s', %d)",
                    mysql_real_escape_string($breite, $link),
                    mysql_real_escape_string($preis1, $link),
                    mysql_real_escape_string($preis2, $link),
                    mysql_real_escape_string($preis3, $link),
                    mysql_real_escape_string($preis4, $link));

        mysql_query($query, $link);

        if (mysql_affected_rows($link) > 0) {
            echo "Produkt eingefuegt\n";
        }
    }
} else {
    echo "Fuellen Sie das Formular korrekt aus.\n";
}
?> 



</head>

<body>
		<br>Geben Sie einen vollst&auml;ndigen Datensatz ein und senden Sie das Formular ab:
		<form action = "http://www.windeko.de/test.php" method = "post">
			<div align="center">
				Testtabelle <br>
        Breite&nbsp;<input name="breite"><font color="black"></font>
				<table width="1236" border="1" cellspacing="2" cellpadding="0">
					<tr>
						<td></td>
						<td><font color="#ff9900"><b>preis1</b></font></td>
						<td><font color="#ff9900"><b>preis2</b></font></td>
						<td><font color="#ff9900"><b>preis3</b></font></td>
						<td><font color="#ff9900"><b>preis4</b></font></td>
					</tr>
					<tr>
						<td><font color="#cc3300">PG</font></td>
						<td><font color="#cc3300"><input name="preis1" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis2" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis3" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis4" size="6"></font></td>
					</tr>

  			</table>
			</div>
			<p><input type="submit" name="gesendet">
    <input type="reset"></p>
		</form>
		

Alle Datensätze <a href="http://www.windeko.de/test_all.php">anzeigen</a>
</body>
</html>

16.06.2008 21:39 | geändert: 16.06.2008 23:31

8 Jörg Kruse

Und mysql_error() sagt nichts zu den Abfragen?

Diese Bezeichnungen...:
if (isset($_POST['testtab_breite'])
    && isset($_POST['testtab_preis1'])
    && isset($_POST['testtab_preis2'])
    && isset($_POST['testtab_preis3'])
    && isset($_POST['testtab_preis4'])) {
... heißen im Formular anders:
<td><font color="#cc3300"><input name="preis1" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis2" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis3" size="6"></font></td>
						<td><font color="#cc3300"><input name="preis4" size="6"></font></td>

16.06.2008 23:09

9 Peter

"testtab" ist die Tabelle in der Datenbank "windeko_preis"
Da sie nicht in der Verbindung eingetragen ist, habe ich es den Feldern vorangestellt, war wohl nicht richtig.
Fehlerreport:
Notice: Use of undefined constant mysql_connect - assumed 'mysql_connect' in /var/www/vhosts/windeko.de/httpdocs/test.php on line 46

Notice: Use of undefined constant mysql_select_db - assumed 'mysql_select_db' in /var/www/vhosts/windeko.de/httpdocs/test.php on line 47

Betroffende Zeilen 46 und 47
$link = mysql_connect;
$select = mysql_select_db;

Es wird keine Verbindung aufgebaut, warscheinlich liegt das Problem in der Auslagerung der Anmeldedaten.
Habe oben den "Neuen Code" eingetragen[ Beitrag +p7]

16.06.2008 23:27 | geändert: 16.06.2008 23:33

10 Jörg Kruse

Ohne Klammern () sieht PHP die beiden Ausdrücke nicht als Funktionsaufrufe sondern als Konstanten an. Dann fehlen aber auch noch die Argumente der Funktionen - so wie hier im Beispiel aufgeführt:

http://de.php.net/mysql_select_db

16.06.2008 23:57