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


von dummy (Gast)


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:
1
<?php require_once('settings.inc.php');
2
3
4
function bool_check_entryexistintable($entry, $tablecolumn, $table, $databaselink)
5
{
6
        $query = "SELECT COUNT(" .$tablecolumn. ") AS cnt FROM " .$table. " WHERE " .$tablecolumn. "=" .$entry;
7
        $result = mysqli_query($databaselink,$query);
8
        echo (bool) mysqli_num_rows($result, 0);
9
        }
10
11
function ressource_connect_database($databasehost, $databaseuser, $databasepassword, $database)
12
{
13
        $link = mysqli_connect($databasehost, $databaseuser, $databasepassword, $database);
14
        if (mysqli_connect_errno()) {
15
                                        $message['error'] = 'Datenbankverbindung fehlgeschlagen: ' . $mysqli->connect_error;
16
                            } else{
17
                        return $link;
18
         }
19
                }
20
21
22
$link = ressource_connect_database(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
23
if ( !bool_check_entryexistintable("1", "ID", "user",$link) )
24
{
25
  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)


Lesenswert?

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

von Martin L. (tempusertempuser)


Lesenswert?

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

von NurEinGast (Gast)


Lesenswert?

bool_check_entryexistintable liefert keinen Rückgabewert.

von Karl Käfer (Gast)


Lesenswert?

dummy schrieb:
>
1
> function bool_check_entryexistintable($entry, $tablecolumn, $table, 
2
> $databaselink)
3
> {
4
>         $query = "SELECT COUNT(" .$tablecolumn. ") AS cnt FROM " 
5
> .$table. " WHERE " .$tablecolumn. "=" .$entry;
6
>         $result = mysqli_query($databaselink,$query);
7
>         echo (bool) mysqli_num_rows($result, 0);
8
>         }
9
>

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

von Funker Fritz (Gast)


Lesenswert?

Wie wird $result an den Aufrufer zurückgegeben?

von micha54 (Gast)


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)


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)


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)


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)


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


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)


Lesenswert?

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

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

von micha54 (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.