Forum: PC-Programmierung Hilfe bei einem php Skript und Fehlersuche


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von dummy (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes php Skript programmiert und es funktioniert nicht wie 
es soll....allerdings finde ich den Fehler nicht und frage euch darum um 
Hilfe:
<?php require_once('settings.inc.php');


function bool_check_entryexistintable($entry, $tablecolumn, $table, $databaselink)
{
        $query = "SELECT COUNT(" .$tablecolumn. ") AS cnt FROM " .$table. " WHERE " .$tablecolumn. "=" .$entry;
        $result = mysqli_query($databaselink,$query);
        echo (bool) mysqli_num_rows($result, 0);
        }

function ressource_connect_database($databasehost, $databaseuser, $databasepassword, $database)
{
        $link = mysqli_connect($databasehost, $databaseuser, $databasepassword, $database);
        if (mysqli_connect_errno()) {
                                        $message['error'] = 'Datenbankverbindung fehlgeschlagen: ' . $mysqli->connect_error;
                            } else{
                        return $link;
         }
                }


$link = ressource_connect_database(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
if ( !bool_check_entryexistintable("1", "ID", "user",$link) )
{
  echo "exist";



Ich habe die queries einzeln im phpmyadmin gecheckt und die stimmen aber 
das skript funktioniert nicht....wo ist der Fehler?

von Kaj (Gast)


Bewertung
0 lesenswert
nicht lesenswert
dummy schrieb:
> das skript funktioniert nicht....wo ist der Fehler?
WAS funktioniert denn nicht?

von Michael L. (tempusertempuser)


Bewertung
0 lesenswert
nicht lesenswert
Es wird immer "exist" angezeigt egal ob oder ob nicht dier Eintrag 
vorhanden ist in der Datenbank....

von NurEinGast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
bool_check_entryexistintable liefert keinen Rückgabewert.

von Karl Käfer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
dummy schrieb:
>
> function bool_check_entryexistintable($entry, $tablecolumn, $table, 
> $databaselink)
> {
>         $query = "SELECT COUNT(" .$tablecolumn. ") AS cnt FROM " 
> .$table. " WHERE " .$tablecolumn. "=" .$entry;
>         $result = mysqli_query($databaselink,$query);
>         echo (bool) mysqli_num_rows($result, 0);
>         }
> 

Habe glücklicherweise ewig kein PHP mehr machen müssen, aber fehlt in 
"bool_check_entryexistintable()" nicht irgendwo ein return?

von Funker Fritz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wie wird $result an den Aufrufer zurückgegeben?

von micha54 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also bei mir liefert phpmyadmin bei der Abfrage immer 1,
warum sollte also mysqli_num_rows() was anderes als 1 liefern ?

Gruß,
Michael

von NurEinGast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn der gesuchte Wert nicht in der Tabelle ist, sollte 
mysqli_num_rows() 0 zurückliefern.

Ist aber eh egal - weil der Wert von mysqli_num_rows() nicht zur 
aufrufenden Funktion zurückgeliefert wird.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
NurEinGast schrieb:
> Wenn der gesuchte Wert nicht in der Tabelle ist, sollte
> mysqli_num_rows() 0 zurückliefern.

nein, die Anzahl der Zeilen ist immer 1 - man muss schon der Wert 
abfragen.

von NurEinGast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> nein, die Anzahl der Zeilen ist immer 1 - man muss schon der
> Wert abfragen.

Ok gewonnen :-)


    $row_cnt = $result->num_rows;

Das müsste dann aber trotzdem noch zurückgegeben werden.

von NurEinGast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
nein, doch nicht gewonnen. Hab nochmal nachgeschaut.

Der Aufruf von  mysqli_num_rows($result); sollte 0 zurückgeben wenn das 
"select" keinen passenden Eintrag in der Tabelle gefunden hat.

von Frank M. (ukw) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
NurEinGast schrieb:
> Der Aufruf von  mysqli_num_rows($result); sollte 0 zurückgeben wenn das
> "select" keinen passenden Eintrag in der Tabelle gefunden hat.

Ein "select count(*)...." liefert immer genau einen Eintrag zurück - 
egal, ob die Tabelle leer oder gefüllt ist.

von Daniel F. (df311)


Bewertung
0 lesenswert
nicht lesenswert
unabhängig vom sql:
function bool_check_entryexistintable($entry, $tablecolumn, $table, $databaselink)
{
        $query = "SELECT COUNT(" .$tablecolumn. ") AS cnt FROM " .$table. " WHERE " .$tablecolumn. "=" .$entry;
        $result = mysqli_query($databaselink,$query);
        echo (bool) mysqli_num_rows($result, 0);
}
hat immer noch kein return statement.

weg mit dem echo und cast, return und vergleichsoperation her, dann 
nochmal probieren

von micha54 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also hat der TO jetzt den Unterscheid von 1 row und dem Wert 0 in der 
einen row verstanden oder nicht ?
Das mysql_num_rows ist hier völlig fehl am Platz.

Gruß,
Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.