| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

27-10-2009, 16:04
|
|
Fl0W
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 8
|
|
[gelöst] mysql fetch row Fehler
Ich hab hier ein sehr komisches Problem mit PHP / MySQL. Irgendwie will das angehängte Script nicht funktionieren, obwohl es bei einem anderen Projekt einwandrei funktionierte.
Der Fehler besteht darin, dass er mir als Fehlermeldung folgendes sagt:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in E:\xampplite\htdocs\it-haus24\it-haus24\admin\admin.php on line 26
Wäre nett, wenn ihr mir helfen könntet.
|

27-10-2009, 16:10
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Aus
PHP-Code:
$result = mysql_query('SELECT ...');
mach
PHP-Code:
$sql = 'SELECT ...'; $result = mysql_query($sql) or die(mysql_error() . $sql);
Lies mal unsere sticky Threads (Regeln etc.), da steht noch mehr nützliches Zeug drin.
|

27-10-2009, 18:09
|
|
Scriptfarm
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 20
|
|
Ich verstehe nicht warum Du das so kompliziert machst, die ganze Geschichte könntest Du zusammenfassen !?
Ich würde es zwar selbst ganz anders machen, aber als Anfänger würde ich wenigstens noch so an die Sache gehen !
PHP-Code:
<table border="1" valign="top"> <tr> <td><b>Kundenart</b></td> <td><b>Firma</b></td> <td><b>Anrede</b></td> <td><b>Vorname</b></td> <td><b>Name</b></td> <td><b>Strasse</b></td> <td><b>........</b></td> <td><b>........</b></td> USW.... <?php mysql_connect ("localhost", "USER", "PASSWORT"); mysql_select_db ("DATENBANK"); $abfrage = "SELECT * FROM register WHERE ................"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo" </tr> <tr> <td>$row->kundenart</td> <td>$row->firma</td> <td>$row->anrede</td> <td>$row->vorname</td> <td>$row->vorname</td> <td>$row->name</td> <td>$row->strasse</td> <td>$row->.......</td> <td>$row->.......</td> USW.... </tr> "; } ?> </table>
Auch das hier :
PHP-Code:
$result = mysql_query("SELECT kundenart, firma, anrede, vorname, name, strasse, hausnr, plz, stadt, privattelefon, geschaeftlichtelefon, fax, mobil, email, registrierung FROM register");
warum nicht gleich :
PHP-Code:
$result = mysql_query("SELECT * FROM register");
Geändert von Scriptfarm (27-10-2009 um 18:16 Uhr)
|

27-10-2009, 18:14
|
|
Scriptfarm
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 20
|
|
Sorry, Doppelpost !
|

27-10-2009, 18:23
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
@Scriptfarm
Man sollte kein SELECT * verwenden, sondern genau die Spalten selektieren, die man haben will.
|

27-10-2009, 18:27
|
|
Scriptfarm
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 20
|
|
Ich schätze mal das er alles aus der Tabelle einlesen möchte und daher ich kann er auch ein Wildcard verweden.
|

27-10-2009, 18:29
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von Scriptfarm
Ich schätze mal das er alles aus der Tabelle einlesen möchte und daher ich kann er auch ein Wildcard verweden.
|
Trotzdem ist es sicherer, wenn man alle Spalten angibt.
Was ist, wenn eine Spalte fehlt? Wenn du SELECT * verwendest, wirst du das nicht so schnell bemerken. Wenn du allerdings eine Spalte selektierst, die es nicht gibt, bekommst du sofort eine MySQL Fehlermeldung zurück.
|

27-10-2009, 18:35
|
|
Scriptfarm
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 20
|
|
Das kann man sehen wie man will, durch die Angabe der vielen Spalten kann es auch gerade erst zu unnötigen Fehlern kommen.
Ausserdem wenn es darum geht, würde ich bei seinem Stil erst einmal ganz woanders ansetzen.
|

27-10-2009, 19:04
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Zitat:
Zitat von Scriptfarm
Ich schätze mal das er alles aus der Tabelle einlesen möchte und daher ich kann er auch ein Wildcard verweden.
|
Selbst wenn er aktuell alles haben will, wer schützt ihn vor einer Erweiterung der Tabelle wodurch er auf einmal nicht mehr alles haben will?
Also: Finger Weg von SELECT * all
Zitat:
|
Ausserdem wenn es darum geht, würde ich bei seinem Stil erst einmal ganz woanders ansetzen.
|
H3ll hat aber (imho zurecht) deinen Stil "bemängelt", nicht den des TO.
|

27-10-2009, 19:25
|
|
Scriptfarm
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 20
|
|
Wenn ich als Beispiel die komplette Tabelle einlesen will, nehme ich ein Wildcard und schreibe mir nicht 15 Spaltenamen unnötigerweise rein, denn dafür ist es da.
Selbst wenn er eine Spalte eingefügt wird, geht die Welt auch nicht zu Grunde.
Die Quote das ein Fehler passiert, oder das später was vergessen wird, ist so viel höher.
EDIT :
Und zum Stil, ich habe ich lediglich auf seinem programmiertechnischen Level versucht alles etwas übersichtlicher zu gestalten.
Geändert von Scriptfarm (27-10-2009 um 19:50 Uhr)
|

27-10-2009, 20:09
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
OffTopic: Quote gut und schön. Aber was ist deiner Meinung nach Bedeutender, einen fehler einmalig zu beheben, oder bei jeder Abfrage zusätzliche Performance zum Fenster rauszuschmeißen?
|

27-10-2009, 20:16
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
SELECT * kann man sich evtl. noch in einem Prototypen erlauben.
Aber in einem Forum, wo es alle lesen, zu sagen es wäre gut und richtig so, da muss ein P vor.
|

27-10-2009, 22:34
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Scriptfarm
Selbst wenn er eine Spalte eingefügt wird, geht die Welt auch nicht zu Grunde.
|
[ ] Du weisst, wie sich das bei BLOBs auswirken würde.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

28-10-2009, 16:08
|
|
Fl0W
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 8
|
|
erstmal vielen Dank. Lösung Nr.1 von onemorenerd hat geholfen.
Jetzt habe ich aber ein anderes Problem. Ich wollte in der Tabelle nur Anrede, Vorname, Nachname, Firma, Kundenart und Registrierungsdatum anzeigen lassen. Daneben erscheint auf +. Sobald man da draufdrückt erscheinen die restlichen Informationen zum Kunden dadrunter. Das ganze habe ich mit JavaScript lösen können, aber nur bei einem Datensatz.
Als ich einen zweiten Datensatz in die MySQL Tabelle hinzufügte war Schicht im Schacht. Ich habe bereits ein paar Alternativen getestet, aber irgendwie will das ganze nicht. Wäre nett, wenn jemand drüber schauen könnte und eventuell berichtigen könnte.
PHP-Code:
<html>
<body>
<script type="text/javascript" language="JavaScript1.2"> var angezeigt = false;
function versteckt() { if (angezeigt) { document.getElementById('ghost').style.display = 'none'; angezeigt = false; } else { document.getElementById('ghost').style.display = 'block'; angezeigt = true; } } </script>
<style type="text/css">
table { width: 1000px; border: 1px solid #000; }
.headliner { background-color: #900; color: #FFF; width: 200px; font-weight: bold; text-align: center; }
.inhalt1 { font-weight: bold; text-align: center; }
.inhalt2 { padding-top: 10px; padding-left: 10px; font: 10px Verdana; }
</style>
</body>
<head>
<?php error_reporting(E_ALL); $connID = @mysql_connect('localhost', 'root', ''); mysql_select_db('kunden', $connID); $sql = 'SELECT kundenart, firma, anrede, vorname, nachname, adresse1, adresse2, privattelefon, geschaeftlichtelefon, fax, mobil, email, registrierung FROM register'; $result = mysql_query($sql) or die(mysql_error() . $sql);
echo '<table border="1">';
echo '<tr>'; echo '<td class="headliner">Anrede</td>'; echo '<td class="headliner">Vorname</td>'; echo '<td class="headliner">Name</td>'; echo '<td class="headliner">Firma</td>'; echo '<td class="headliner">Kundenart</td>'; echo '<td class="headliner">Registriert</td>'; echo '<td class="headliner">Details</td>'; echo '</tr>'; while (list($kundenart, $firma, $anrede, $vorname, $name, $adresse1, $adresse2, $privattelefon, $geschaefttelefon, $fax, $mobil, $email, $registrierung) = mysql_fetch_row($result)) { echo '<tr>'; echo '<td class="inhalt1">'; echo $anrede; echo '</td>'; echo '<td class="inhalt1">'; echo $vorname; echo '</td>'; echo '<td class="inhalt1">'; echo $name; echo '</td>'; echo '<td class="inhalt1">'; echo $firma; echo '</td>'; echo '<td class="inhalt1">'; echo $kundenart; echo '</td>'; echo '<td class="inhalt1">'; echo $registrierung; echo '</td>'; echo '<td class="inhalt1">'; echo '<a href="#" onclick="versteckt()">+'; echo '</td>'; echo '</tr>';
echo '<table style="display: none" id="ghost">'; echo '<tr>'; echo '<td class="inhalt2">Strasse / Hausnr. :</td>'; echo '<td class="inhalt2">'; echo $adresse1; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td class="inhalt2">PLZ / Ort :</td>'; echo '<td class="inhalt2">'; echo $adresse2; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td class="inhalt2">Telefon (Privat) :</td>'; echo '<td class="inhalt2">'; echo $privattelefon; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td class="inhalt2">Telefon (geschäftlich) :</td>'; echo '<td class="inhalt2">'; echo $geschaefttelefon; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td class="inhalt2">Fax :</td>'; echo '<td class="inhalt2">'; echo $fax; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td class="inhalt2">Mobil :</td>'; echo '<td class="inhalt2">'; echo $mobil; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td class="inhalt2">E-Mail :</td>'; echo '<td class="inhalt2">'; echo $email; echo '</td>'; echo '</tr>'; } echo '</table>'; ?> </head>
</html>
|

28-10-2009, 16:27
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Prima.
Dein neues Problem postest du aber bitte am Besten noch einmal konkret im JavaScript Forum.
Dort ist dann nämlich der HTML-Code relevant. PHP ist an dieser Stelle schon längst abgearbeitet...
Und vorher behebst du noch schnell den Fehler mit den doppelten IDs. Merke IDs im HTML-Quelltext sind immer einmalig! (wie jede andere ID übrigens auch).
Das hätte dir auch der HTML-Validator gemeldet, wenn er denn genutzt worden wäre.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|