• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mysql_result() funktioniert nicht

Status
Für weitere Antworten geschlossen.

Devil

Neues Mitglied
Tach zusammen,
hoffe das ich hier richtig bin, mein Problem ist folgender.
Ich hab einen Skript, der eigentlich funktioniert, sobald ich den aber das zweite mal aufrufe funktioniert der Befehl mysql_result(); nicht mehr.

Was sich zwischen den Skript und den vorherigen Skript unterscheidet, der
aufgerufen wird ist diese Zeile hier:
erster auf ruf:
Code:
$sql=mysql_query("SELECT * FROM duisburg LIMIT 0,4");
zweiter auf ruf:
Code:
$sql=mysql_query("SELECT * FROM duisburg LIMIT 4,8");
Wieso??? Was muss ich ändern????
PHP:
<?php
//die Connect Befehle
include 'php/connect.php';
//Auswahl der Tabelle mit einer Beschränkung
$tabelle=$_GET['section'];
$sql=mysql_query("SELECT * FROM duisburg LIMIT 4,8");

echo "<div>
    <h1>".$tabelle."</h1>
    <center>
    <table>";
while($daten=mysql_fetch_object($sql))
{
$info=getimagesize($daten->g_link);
    echo "<tr>
        <td>
        <a href='".$daten->g_link."'>
        <img src='".$daten->k_link."' alt='".$daten->alt."'/>
        </a>
        </td>
        <td style='width: 160px' align='center'>".$daten->alt."
            <br/>Bilderbreite:".$info[0]."px<br/>
            Bilderhöhe:".$info[1]."px <br/>
            <a href='".$daten->g_link."'>Vergrößern</a>
        </td>
        </tr>";
    
}
echo "</table></center></div>";

echo "<div>";

$sql=mysql_query("SELECT COUNT(*) FROM ".$tabelle."");
$anzahl = mysql_result($sql,0);

if ($anzahl>4)
{
    $seiten_anzahl=ceil($anzahl/4);
    
    echo "<a href='javascript:history.back()'><<</a>";
    for($i=1; $i<=$seiten_anzahl; $i++)
        {
        echo "<a href='index.php?section=".$tabelle."_".$i."'>".$i."</a>&nbsp;";
        }    
    echo "<a href='index.php?section=".$tabelle."_".$w=$i-1 ."'>>></a>";
}

echo"</div>";
?>
Angeblich soll diese Zeile den Fehler erzeugen, wenn ich diesen Skript zum zweiten mal aufrufe
PHP:
$anzahl = mysql_result($sql,0);
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Homepage\devilismynick.de.funpic.de\desgin\php\function\bilder\bilder_2.php on line 34
Duisburg_2
 
Ohne des weiteren deinen ganzen Code 30mal durchzuschauen nach Fehlern, habe ich dir folgendes Zitat:

www.php.net schrieb:
Aufrufe von mysql_result() sollten nicht mit Aufrufen anderer Funktionen verschachtelt werden, die auch auf das Ergebnis zugreifen.
Ich hoffe das kann dir helfen ;)

edit:
Nach weiterem ansehen auf php.net sah ich, wenn du weitere Aufrufe zur DB hast, solltest du nach der Ausgabe von mysql_result() die Verbindung abbrechen und dann erneut aufbauen. Also einfach in deinem Script mysql_close(); nach der Ausgabe von der Query, sollte dann gehen.



LG ;)
 
Zuletzt bearbeitet:
Also da steht es doch, was daran falsch ist. Die Variable $sql enthält keine gültige SQL-Resourcen-ID, sprich das SQL-Querie ist in die Hose gegangen.

Gruß thuemmy
 
Danke, dennoch kann ich mit der Hilfe nicht wirklich weiter kommen,
ich hab jetzt die alternativen ausprobiert, um die anzahl der Zeilen in der Tabelle zu berechnen, wie es mysql_result macht.

Ich habe diese Funktion mysql_result() auch nur von einer Seite empfohlen bekommen, da bekamm ich leicht die Rechnung für die Seitenzahl heraus ^^
und nun wie du mir sagst, kann man diese Funktion nicht verschachteln bzw mehrmals mit der gleichen Variablenwerten füttern xD.

Hmm.... mit den von php.net alternativen konnte ich bisher nicht wirklich mein Ziel etwas näher kommen -.-.
 
Alles noch vor die füsse legen?
PHP:
<?php
// Code

$sql=mysql_query("SELECT COUNT(*) FROM ".$tabelle."");
$anzahl = mysql_result($sql,0); // Hier hast du ja die funktion die hängt

if ($anzahl>4)
{
    $seiten_anzahl=ceil($anzahl/4);
    
    echo "<a href='javascript:history.back()'><<</a>";
    for($i=1; $i<=$seiten_anzahl; $i++)
        {
        echo "<a rel='nofollow' href='index.php?section=".$tabelle."_".$i."'>".$i."</a>&nbsp;";
        }    
    echo "<a rel='nofollow' href='index.php?section=".$tabelle."_".$w=$i-1 ."'>>></a>";
}

echo"</div>";
mysql_close(); // Schliesst die Verbindung
?>
Jetzt schliesst es die Verbindung und bei zweitaufrufen muss es die DB erneut verbinden und macht somit keinen Fehler...

Logisch, oder?
 
Tach zusammen,
das mit dem Schlissen der DB funktioniert nicht wirklich *heul*
Die Seite ist auch noch garnicht online, bisher mach ich das alles über localhost.

Und den nächsten tipp werd ich mir auch gleich zu Brust nehmen, mit dem PHP: mysql_real_escape_string - Manual.

Hoffe sehr das es damit klappt.
 
Hab noch ein Fehler gefunden, nämlich ist in der Zeile 6
PHP:
$tabelle=$_GET['section'];
die Zuweisung der Variable section zu $tabelle,
die wiederum an dem nächsten Skript weiter über geben wird und damit
eine falsche Wert übergibt, in dem Fall duisburg_2, die 2 kommt von der Variable $i die hochgezählt wurde und die Seiten Zahl angibt.
PHP:
if ($anzahl>4)
{
    $seiten_anzahl=ceil($anzahl/4);
    
    echo "<a href='javascript:history.back()'><<</a>";
    for($i=1; $i<=$seiten_anzahl; $i++)
        {
        echo "<a href='index.php?section=".$tabelle."_".$i."'>".$i."</a>&nbsp;";
        }    
    echo "<a href='index.php?section=".$tabelle."_".$w=$i-1 ."'>>></a>";
}
Nun muss ich irgendwie eine Variable erstellen, die die Werte von $i nicht mit eingebunden wird bzw. nicht mit übergibt.
Zumindest glaub ich das. xD

Falls irgendwelche Fehler wieder sind, sagt es mir bitte ^^
Danke ^^
 
So hab jetzt die Fehler behoben und es läuft ^^
Zumindest soweit ich getestet habe xD
Der Code sieht jetzt so aus:
PHP:
<?php
//die Connect Befehle

include 'php/connect.php';
//Auswahl der Tabelle mit einer Beschränkung
$tabelle=$_GET['section'];
$tabelle_len=strlen($tabelle);
$tabelle=substr($tabelle,0,$tabelle_len-2);
$sql=mysql_query("SELECT * FROM ".$tabelle." LIMIT 4,8")or die(mysql_error());

echo "<div>
    <h1>".$tabelle."</h1>
    <center>
    <table>";
while($daten=mysql_fetch_object($sql))
{
$info=getimagesize($daten->g_link);
    echo "<tr>
        <td>
        <a href='".$daten->g_link."'>
        <img src='".$daten->k_link."' alt='".$daten->alt."'/>
        </a>
        </td>
        <td style='width: 160px' align='center'>".$daten->alt."
            <br/>Bilderbreite:".$info[0]."px<br/>
            Bilderhöhe:".$info[1]."px <br/>
            <a href='".$daten->g_link."'>Vergrößern</a>
        </td>
        </tr>";
    
}
echo "</table></center></div>";

echo "<div>";

$sql=mysql_query("SELECT COUNT(*) FROM ".$tabelle."")or die(mysql_error());
$anzahl = mysql_result($sql,0); // Hier hast du ja die funktion die hängt

if ($anzahl>4)
{
    $seiten_anzahl=ceil($anzahl/4);
    
    echo "<a href='javascript:history.back()'><<</a>";
    for($i=1; $i<=$seiten_anzahl; $i++)
        {
        echo "<a rel='nofollow' href='index.php?section=".$tabelle."_".$i."'>".$i."</a>&nbsp;";
        }    
    echo "<a rel='nofollow' href='index.php?section=".$tabelle."_".$w=$i-1 ."'>>></a>";
}

echo"</div>";
mysql_close(); // Schliesst die Verbindung
?>

Nur noch diesen Skript Dynamisch machen, sodass man nicht 1000... Skripte schreiben muss, wenn neue Bilder(Pfad) hinzu gefügt werden in die DB.

Hat jemand auch für dieses Hindernis ein Tipp oder ein link?
Wär sehr dankbar dafür.
 
So wie Du das geschrieben hast, wird Dein Script in die Hose gehen, in dem Moment, wo Du mehr als 10 Seiten hast, da Du grundsätzlich den String um die letzten beiden Stellen kürzt.

Gruß thuemmy
 
Hast du dir die seite zu der Funktion mysql_real_escape_string überhaupt durchgelesen?
Es ist Ratsam eine Variable wie den namen einer Tabelle nicht einfach ungesichert über einen _GET Parameter übergeben zu lassen, du solltest die namen der Tabellen in einen Array speichern und diesen dan über den Index ansprechen.

deine-seite.de/index.php?tabelle=3

PHP:
$tabellen = array('tabelle1', 'tabelle2', 'tabelle3', 'tabelle4', 'tabelle5');
$tabelle = $tabellen[(isset($_GET['tabelle']) ? (int)$_GET['tabelle'] : 0)];

echo $tabelle; // Ausgabe: tabelle4

Du könntest die Tabellena uch in eine Whitelist eintragen und dann so vergleichen.

deine-seite.de/index.php?tabelle=test
PHP:
$whitelist = array('foo', 'test', 'user', 'admins');
if(isset($_GET['tabelle']) && in_array($_GET['tabelle'], $whitelist)) {
    query("......... FROM {$_GET['tabelle']} WHERE ............");
}
 
klar hab ich sie mir angeschaut, die Seite, nur ich komme nicht wirklich klar mit dem Befehl, es wird überprüft in dem Beispiel, ob der User das Passwort eingegeben hat bzw. ob die Werte zu einander stimmen. So weit hab ich das
ja verstanden, wenn ich das nicht vertausche.
Nur ich weiß nicht, wie der Befehl mir bei meiner Dynamischen Blätter Funktion helfen kann bzw. ka wie ich den Befehl wirklich in meinen Skript einbauen sollte, da ich eine Abfrage mach in einem Menü und dann auf diese Seite komme.
Ich wüsste auch nicht wirklich wie ich mit PHP: mysql_real_escape_string - Manual überprüfen könnte ob der User wirklich was aus meiner liste was ausgewählt hat oder sein eigenen Code da rein gepackt hat. Da das Menü in keiner DB Tabelle ist oder so.
Finde es aber schon super das du mir das jetzt schon sagst, wie das geht ^^ kann ich bestimmt für später gut gebrauchen, weiß aber nicht wie ich das nun in den Skript einbauen soll.
 
So wie Du das geschrieben hast, wird Dein Script in die Hose gehen, in dem Moment, wo Du mehr als 10 Seiten hast, da Du grundsätzlich den String um die letzten beiden Stellen kürzt.

Gruß thuemmy
okay da hast du recht, da muss ich mir was anderes überlegen -.-
 
Zuletzt bearbeitet:
Guck mal nach der Funktoin explode(). Dann hast Du im Element 0 den Rubriken/Sektion-Namen und im Elemt 1 hast Du dann die Seitenzahl, wenn Du die noch für irgendwas brauchst.

Gruß thuemmy
 
Ist doch ganz einfach:
Code:
$string=duisburg_123;
$array = explode("_", $string);
echo $array[0]."<br>";;
echo $array[1];

Ergebniss:
duisburg
123
 
das würde doch bedeuten das ich x-mal in dem array()
Duisburg_1, Duisburg_2 .....,Duisburg_999 eintragen muss oder wie ???
 
Nein... die Zuweisung $string="duisburg_123" war exemplarisch für die Variable die übertragen wurde, ich glaube bei Dir war es per GET. Die Funktion explode() teilt einen String anhand einer Zeichenkette: PHP: explode - Manual

Gruß thuemmy
 
also müsste ich in dem fall $string=$_GET['sesion']; machen oder versteh ich wieder das falsch, langsam drecht sich alles bei mir ;ugl
das mit explode() versteh ich ja nicht, die erklärung ist mir etwas zu hoch :(
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben