PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Suchfunktion bringt Fehlermeldung mit sich (http://www.selfphp.de/forum/showthread.php?t=11241)

hoschy 23.08.2005 12:52:06

Suchfunktion bringt Fehlermeldung mit sich
 
Hallo,

ich bin dabei mir ein privates db-orientiertes Telefonbuch zu basteln, welches eine Suchfunktion beinhaltet.

Doch leider funktioniert die Suchfunktion nicht so, wie ich es gerne hätte.
Sobald ich die Seite aufrufe, erscheinen folgende Fehlermeldungen :
Zitat:


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /members_only/telefon_suche.php on line 27

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /members_only/telefon_suche.php on line 43
in zeile 27 steht folgendes:
Zitat:

$anz = mysql_num_rows($res);
und in zeile 43:
Zitat:

$anz2 = mysql_num_rows($res2);

damit man den ganzen zusammenhang sieht poste ich noch den Quelltext der Suchfunktion:

PHP-Code:

<?php 
require('../db.php');

function 
getUser($suchfeld$page)
{    
    
$page = (int) $page;
   if (
$page <= 0$page=1;
     
    if(!empty(
$suchfeld)) {
        
$suchfeld trim($suchfeld);
        
$suchfeld str_replace(" ","%",$suchfeld);
        
$suchfeld "%".$suchfeld."%";
         
        
$suche "    SELECT
                        id, name, nummer, strasse, datum
                    FROM
                        "
.$table_prefix."telefon
                    WHERE
                        name  LIKE '$suchfeld' OR
                        nummer LIKE '$suchfeld'"
;
    } else {
        
$suche " SELECT
                        id, name, nummer, strasse, datum
                    FROM
                        "
.$table_prefix."telefon";
    }
    
    
$res mysql_query($suche);
    
$anz mysql_num_rows($res);
    
    
$itperpage 3;
       
$maxpages_int = (int) ($anz/$itperpage);
    
$maxpages_float $anz/$itperpage;
       
    if ( 
$maxpages_float $maxpages_int ) {
        
$maxpages = (int)(($anz/$itperpage)+1);
    } else {
        
$maxpages = (int)(($anz/$itperpage));    
    }

    if (
$page $maxpages$page $maxpages;
    
    
$suche2 $suche." ORDER BY id ASC limit ".(($page-1)*$itperpage).",$itperpage";
    
$res2 mysql_query($suche2);
    
$anz2 mysql_num_rows($res2);
    
    if(
$anz 0) {
    
        if(empty(
$suchfeld)) {
        
            
$head "
                <table width='500' border='0' cellspacing='1' cellpadding='1' align='center'><tr>
                <td><strong>$anz User in der Datenbank. Pro Seite werden $itperpage User
                angezeigt.</strong></td></tr></table>"
;
    
        } else {

            if(
$anz 1) { $wortlaut "wurden"; } else { $wortlaut "wurde"; }
        
            
$head "
                <table width='500' border='0' cellspacing='1' cellpadding='1' ><tr>
                <td><strong>Mit Ihrer Suchabfrage $wortlaut $anz Treffer
                gelandet.</strong></td></tr></table>"
;
    
        }
        
        
$i               0;    
        
$navi_left       "";
        
$navi_right      "";
        
$telefonliste       ""
        
$show_navi       "";

        
        
// Start der WHILE Schleife
        
while ($row mysql_fetch_array($res2MYSQL_ASSOC)) {
            
            
// Hier wird die Zeilenhintergrundfarbe für jeden Datensatz festgelegt,
            // dies dient der Übersicht            
            
if($i%2==0) { $trcolor "#FFFFFF"; } else { $trcolor "#DADADA"; }
            
            if (
$page 1){
                
$navi_left "<strong><input type=button value=\"&laquo;\"
                onClick=\"pageset($page-1)\" style=\"WIDTH:25px\"></strong>"
;
            }    
        
            if (
$page $maxpages){ 
                
$navi_right "<strong><input type=button value=\"&raquo;\"
                onClick=\"pageset($page+1)\" style=\"WIDTH:25px\"></strong>"
;
            }
            
            if(isset(
$_POST['suchfeld']) && !empty($_POST['suchfeld'])) {
                
$val_suchfeld $_POST['suchfeld'];
            } else {
                
$val_suchfeld "";
            }
            
            
$show_navi =
                
"
                    <form name='form1' method='post' action='?action=telefon_suche' style='margin:0px;padding:0px'>
                    <table width='500' border='0' cellspacing='1' cellpadding='1' align='center'>
                    <tr>
                    <td width='50%'>
                        <input type=button value=\"Seite\" style=\"WIDTH:50px\" onClick=\"pageset2()\">
                        <input name='page' type='text' id='page' value='$page' style=\"WIDTH:60px\">
                        von $maxpages $navi_left$navi_right
                    </td>
                    <td width='60%'><div align = 'right'>
                        Suchen: <input name='suchfeld' type='text' id='suchfeld' value = '$val_suchfeld'
                        style=\"WIDTH:120px;HEIGHT:16px\">
                        <input type=submit value=\"Finden\" style=\"WIDTH:45px\">
                        <input type=hidden name=page_no value=\"$page\">
                    </div></td>
                    </tr>
                    </table>
                    </form>
                "
;
                
                
$telefonliste $telefonliste .
                                        
"
                                        <tr bgcolor = '$trcolor'>
                                            <td width='100'><div align='center'>$row[id]</div></td>
                                         <td width='100'><div align='left'>$row[name]</div></td>
                                         <td width='100'><div align='left'>$row[nummer]</div></td>
                                         <td width='100'><div align='left'>$row[strasse]</div></td>
                                         <td width='100'><div align='left'>$row[datum]</div></td>
                                     </tr>
                                        "
;
            
$i++; // Zählschleife um 1 erhöhen
        
}// WHILE Schleife abschließen
    
    
} else {
        
        
$telefonliste "
                        <tr>
                      <td colspan='5'><div align='center'>Keine Ergebnisse fuer Ihre Suche!<br><br>
                            <a href='?action=telefon'>Zurck zur Userliste</a></div>
                            </td>
                    </tr>"
;        
    }
    
    
$fertig "
                <table width='500' border='0' cellspacing='1' cellpadding='1' align='center'>
             <tr bgcolor='#36698A'>
                 <td width='100'><div align='center'><strong>ID</strong></div></td>
                 <td width='100'><div align='center'><strong>Name</strong></div></td>
                    <td width='100'><div align='center'><strong>Nummer</strong></div></td>
                    <td width='100'><div align='center'><strong>Strasse / Ort</strong></div></td>
                    <td width='100'><div align='center'><strong>Datum</strong></div></td>
                </tr>
             $userliste
                </table>
                "
;
    
    return 
$head.$show_navi.$fertig;
    
// Funktion schließen – FERTIG





?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Translation//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="Type" con; charset=UTF-8" >
<TITLE>Blaetterfunktion mit Navigator und Suchfunktion</TITLE>
<script language="JavaScript" type="text/javascript">
function pageset(wert)
{
    document.form1.page_no.value = wert;
    document.form1.submit();        
}
function pageset2()
{
    document.form1.page_no.value = document.form1.page.value;
    document.form1.submit();        
}
</script>
</head>
<body>
<?
    // Aufruf der Funktion getUser() mit Suchbegriff und Seitennummer
    echo $show = getUser($_POST['suchfeld'],$_POST['page_no']);
?>
</body>
</html>


leider scheine ich taub auf den augen zu sein, da ich den fehler nicht finde.

Die verbindungsdaten kommen aus der db.php sowie auch die variable $table_prefix.

Vielleicht findet einer von euch den fehler.

Danke schon mal im vorraus

feuervogel 23.08.2005 13:30:23

AW: Suchfunktion bringt Fehlermeldung mit sich
 
du hast mit ziemlicher sicherheit syntax-fehler bei deiner sql-abfrage.

ich empfehle als lektüre ja immer wieder das hier:

http://www.selfphp.com/forum/showthread.php?t=8195

hilfreich ist vor allem erst mal ein echo $sql und ein mysql_query( $sql ) or die( mysql_error() );

das würde dir sehr wahrscheinlich sagen, dass es die tabelle nicht gibt, die du dort ansprichst, weil innerhalb der funktion $table_prefix nicht definiert sein dürfte.

xabbuh 23.08.2005 13:34:11

AW: Suchfunktion bringt Fehlermeldung mit sich
 
Wenn mysql_num_rows() bzw. mysql_fetch_*() einen solche Fehlermeldung liefern, bedeutet dies, dass keine gültige MySQL Resource als Argument an die Funktion übergeben wurde, was meistens immer dann der Fall ist, wenn die zugehörige MySQL-Abfrage syntaktisch fehlerhaft war. Diesen Fehler kannst du mit der Funktion mysql_error() ermitteln:
PHP-Code:

<?php
    $res 
mysql_query($suche) or die(mysql_error());
?>

EDIT: Da war ich wohl zu langsam...

hoschy 23.08.2005 16:20:52

AW: Suchfunktion bringt Fehlermeldung mit sich
 
Fehler gefunden :(

es liegt an der auswahl der Datenbank. laut db.php weise ich der variablen $table_prefix den wert portal_ zu.

nur aus irgendeinem Grund wird die variable neu gefüttert und er nimmt den Namen der Datenbank und nicht den der benötigten Tabelle.

heddesheimer 23.08.2005 16:58:19

AW: Suchfunktion bringt Fehlermeldung mit sich
 
$table_prefix ist vermutlich innerhalb deiner Funktion nicht bekannt. Jedenfalls wird es nicht als Parameter übergeben.

Da bin ich früher auch schon oft reingefallen ;)

Füge in deiner Funktion am Anfang ein:
PHP-Code:

global $table_prefix

ein, falls $table_prefix außerhalb der Funktion definiert wurde.

Besser wäre vielleicht, den Präfix als Konstante zu definieren, da ist der dann überall im Skript bekannt.

Gruß Marian

feuervogel 23.08.2005 17:02:24

AW: Suchfunktion bringt Fehlermeldung mit sich
 
Zitat:

Zitat von heddesheimer
$table_prefix ist vermutlich innerhalb deiner Funktion nicht bekannt. Jedenfalls wird es nicht als Parameter übergeben.

Da bin ich früher auch schon oft reingefallen ;)

Füge in deiner Funktion am Anfang ein:
PHP-Code:

global $table_prefix

ein, falls $table_prefix außerhalb der Funktion definiert wurde.

Besser wäre vielleicht, den Präfix als Konstante zu definieren, da ist der dann überall im Skript bekannt.

Gruß Marian

beide lösungen sind in meinen augen ziemlich unsauber. am saubersten (aus meiner sicht) wäre es, den praefix mitzuübergeben.

hoschy 23.08.2005 18:55:41

AW: Suchfunktion bringt Fehlermeldung mit sich
 
Aber der Prefix ist doch als konstante in der db.php eingetragen, da erhält er ja auch seinen zu benutzenden wert.

Weil sonst funzt das in allen funktionen die ich in meiner seite benutze. Nur halt da nicht.

Nachtrag:

mit global $table_prefix; funzt es.

Danke noch mal an alle für die Hilfe

xabbuh 23.08.2005 19:06:17

AW: Suchfunktion bringt Fehlermeldung mit sich
 
In deinem Script steht $table_prefix und das ist eine Variable, keine Konstante.


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

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.