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)


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 Michael 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

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]
  • [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.