# Prüfen, ob Eintrag in DB steht



## Godstyle (30. Januar 2010)

Hallo,

ich habe mir ein kleines Script gebastellt, aber es macht nicht was es soll.

Es soll prüfen ob ein Wert in der Datenbank auch vorhanden ist. Und danach die auswahl treffen.

Der Wert ist nicht vorhanden 


```
<?php
  $abfrage = "SELECT id, user_id  FROM village WHERE user_id LIKE '".$_SESSION['ID']."'";
  $result = mysql_query($abfrage);
if (mysql_num_rows($result) == 0)
 {
  echo 'keine Einträge vorhanden';
 }
 else
 {
  echo 'Einträge vorhanden';

}
?>
```


db ist angelegt und zugriff funktioniert auch.

Hier mal die fehlermeldung:


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\game2\drogen\server1\game.php on line 19
keine Einträge vorhanden 


Die Ausgabe macht er, aber wie bekomme ich die Fehlermeldung raus?

lg


----------



## Sven Mintel (30. Januar 2010)

Moin,



Godstyle hat gesagt.:


> Die Ausgabe macht er, aber wie bekomme ich die Fehlermeldung raus?



Indem du den Fehler analysierst(bspw. per mysql_error() ) und ihn ausbügelst.

Dein Query ist fehlerhaft(ein fehlerfreies SELECT liefert in jedem Fall "_a valid MySQL result resource_", egal ob es Ergebnisse hervorbrachte oder nicht)

....dies besagt die Fehlermeldung, und mysql_error() sagt dir, was falsch am Query ist.


----------



## tombe (30. Januar 2010)

Der Fehler deutet eigentlich auf eine fehlerhafte SQL-Abfrage hin, aber das was du schreibst sieht in Ordnung aus. Außer einer der Feldnamen oder der Name der Tabelle wäre falsch geschrieben.

Wenn das aber das ganze Skript ist, dann fehlt am Anfang "session_start()". Sonst kannst du nicht auf die Session Variable prüfen. Außerdem finde ich es komisch wenn du die Überprüfung mit LIKE vornimmst. Sollte hier keine exakte Übereinstimmung sein !!

Gruß Thomas


----------



## Godstyle (30. Januar 2010)

Ich habe noch einmal genau geprüft ob:

a )  der Tabellen Name stimmt
und
b ) der Datenbankname.


beide waren richtig.

Ja Session start ist vorhanden und wie es sich gehört in der ersten Zeile:


```
<?php
 session_start();
 include("../ink/db.php");
?>
```

lg

bei all errors on erhalte ich auch nur die selbe Meldung.

Hier mal alle script:

db.php


```
<?php
$conn = mysql_connect("localhost", "*****", "*******") OR die(mysql_error()); 
mysql_select_db(game2) OR die (mysql_error());
?>
```


script datei:


```
<?php
 session_start();
 include("../ink/db.php");
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="../style/game.css" rel="stylesheet" type="text/css">
</head>

<body>

<div id="haupt">
<?php
  $abfrage = "SELECT id, user_id  FROM villages WHERE user_id LIKE '".$_SESSION['ID']."'";
  $result = mysql_query($abfrage); 
if (mysql_num_rows($result) == 0)
 {
 
 
 
  echo 'keine Einträge vorhanden';
 }
 else
 {
  echo 'Einträge vorhanden';

}
?>
	<div id="right">
    	<div id="truppen"> 
        <font size="-1">
<table width="240" border="1">
  <tr>
    <td  colspan="4"><font size="+1">Angestellte:</font></td>
  </tr>
  <tr>
    <td>Job:</td>
    <td>Eigene:</td>
    <td>Fremde:</td>
    <td>Unterwegs:</td>
  </tr>
  <tr>
    <td>Dealer:</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
  </tr>
  <tr>
    <td>Mafiosy:</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
  </tr>
  <tr>
    <td>Gangster:</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
  </tr>
  <tr>
    <td>Polizei:</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
  </tr>
  <tr>
    <td>Nutten:</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
  </tr>
 
</table>
</font>
</div>
    	<div id="bewegungen"><font size="-1">
        <table width="240" border="1">
  <tr>
    <td colspan="2"><font size="+1">Bewegungen:</font></td>
  </tr>
  <tr>
    <td width="60px:">Befehl:</td>
    <td>Stadt:</td>
  </tr>
</table>
</font>
        </div>
        
        </div></div>
</body>
</html>
```


und hier die sql datei:


```
-- phpMyAdmin SQL Dump
-- version 3.1.3.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 30. Januar 2010 um 14:52
-- Server Version: 5.1.33
-- PHP-Version: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Datenbank: `game2`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `villages`
--

CREATE TABLE IF NOT EXISTS `villages` (
  `id` int(15) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `user_id` varchar(15) NOT NULL,
  `stadtname` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Daten für Tabelle `villages`
--
```

wenn ich die session Id ausgeben lasse, so ist sie auch belegt und das mit dem richtigen Wert.


----------



## Sven Mintel (30. Januar 2010)

Schön, du hast alles gemacht...ausser das Vorgeschlagene 


```
$result = mysql_query($abfrage) or die(mysql_error());
```


----------



## Godstyle (30. Januar 2010)

```
$abfrage = "SELECT id, user_id  FROM villages WHERE user_id LIKE '".$_SESSION['ID']."'";
  $result = mysql_query($abfrage) or die(mysql_error());
if (mysql_num_rows($result) == 0)
```

ist eingebaut, erhalte den selben Warnhinweis.

Sry Sven das ich es nicht beim ersten Mal berücksichtigt habe.


----------



## Sven Mintel (30. Januar 2010)

Godstyle hat gesagt.:


> ist eingebaut, erhalte den selben Warnhinweis.



Das glaube ich nicht


----------



## Godstyle (30. Januar 2010)

wie kann ich es dir beweisen?


----------



## DarkGerry (30. Januar 2010)

Versuchs mal anders:

```
<?php 
$abfrage = "SELECT id, user_id  FROM village WHERE user_id LIKE '".$_SESSION['ID']."'"; 
if($result = mysql_query($abfrage))
{ 
  echo 'keine Einträge vorhanden'; 
} 
else 
{ 
  echo 'Einträge vorhanden'; 
} 
?>
```
Wenn die Abfrage keine Treffer hat wird keine gültige ressource erstellt und Du kannst die Anzahl nicht mit mysql_num_rows abfragen.


----------



## tombe (30. Januar 2010)

@DarkGerry
Ist mir neu das wenn die Abfrage keine Daten liefert mysql_num_rows nicht verwendet werden kann. Normalerweise bekommt man dann 0 zurück !!

@Godstyle
Lass dir die SQL-Abfrage mal per echo am Bildschirm ausgeben und kopiere sie dann in myAdmin oder so. Mal sehen was dann rauskommt!!

Außerdem hast du beim ersten Beitrag als Tabellennamen "village" und nicht "villages" (man beachte das S am Ende) geschrieben. Nicht das es daran liegt !!


----------



## Godstyle (30. Januar 2010)

Das war mir auch aufgefallen, lag daran, das ich zwischenzeitlich die tabelle umbenannt habe um auszuschliesen das er nach der falschen tabelle sucht.

Das Problem ist nun gelöst, ich kann euch leider nicht sagen woran es lag, musste wegen einem update von windows den rechner neustarten und danach lief es auf anhieb.

Nur jetzt ist ein anderes kleines problem aufgetreten,


```
<?php
  $abfrage = "SELECT id, user_id  FROM villages WHERE user_id LIKE '".$_SESSION['ID']."'";
  $result = mysql_query($abfrage) or die(mysql_error());
if (mysql_num_rows($result) == 0)
 {
 $nick = $_SESSION['ID'];
 $sql = "INSERT villages (user_id) VALUES ('$nick')";  
     $result = mysql_query($sql) OR              
    die("Query: <pre>".$sql."</pre>\n".                  
    "Antwoertchen: ".mysql_error()); 
	echo '<meta http-equiv="refresh" content="5;url=game.php">';
    echo "Neue Stadt eingetragen. Sie werden weiter geleitet.";

 }
 else
 {
  echo 'Einträge vorhanden';

}
?>
```

an dieser stelle trägt er den richtigen Wert nicht ein. Er setzt die user_id auf 0 und dadurch gerät er in eine endlos schleife. meine db freut sich

lasse mir nach dem script die user Id anzeigen mit:


```
<?php
				$nickid = $_SESSION['ID'];
		echo "W&auml;hle eine Spielwelt ".$nickid."!";
		?>
```

Dort gibt er sie richtig an, nur beim eintrag bevorzugt er die ID als 0 zu deklarieren.


----------



## tombe (30. Januar 2010)

```
('$nick')
```

In einfachen Anführungszeichen wird die Variable auch nicht übersetzt und wenn das Feld z.B. vom Typ Integer ist, kann er keinen Textwert in die DB eintraqgen.

Schreib doch lieber

```
...) VALUES ('" .$nick ."')";
```


----------



## Godstyle (30. Januar 2010)

ich habe es bei meinen registrie formular auch so gemacht und es funktioniert dort.
Habe es aber nun geändert und er kommt denoch nicht aus der refresh aktion raus.
Die Einträge bleiben weiterhin bei 0.


----------



## tombe (30. Januar 2010)

Liegt es daran das er die ID mit 0 einträgt oder liegt es daran das er immer in die IF-Abfrage einsteigt weil die Abfrage weiter oben keinen Datensatz zurückliefert

In diesem Fall liegt es daran das das Feld user_id nur eine Länge von 15 Zeichen hat und die (eigentliche) Session ID länger ist.


----------



## Godstyle (30. Januar 2010)

die user_id hat ebenfalls max 15 zeichen, sie wird an anderer stelle vergeben:


```
$_SESSION['ID'] = $rows['id'];
```

erfolgt sobald er Passwort und Username verglichen hat. Dann nimmt er wo beides Übereinstimmt die ID in meinem Falle 3.

Jetzt wird es Merkwürdig:

So sollte es meines Wissen nach sein:

```
$nickid = $_SESSION['ID'];
 $sql = "INSERT INTO villages (user_id) VALUES ('$nickid')";
```

funktioniert aber nicht.

Ich habe es nun so geändert:


```
$nickid = $_SESSION['ID'];
 $sql = "INSERT INTO villages (user_id) VALUES ($nickid)";
```

und siehe da, in der DB steht wie gewünscht meine Id also 3.

Aktualisiere ich jetzt aber trägt er weiterhin alles mit 3 ein.

Ich bin echt am verzweifeln grade.


```
<?php
  $abfrage = "SELECT id, user_id  FROM villages WHERE user_id LIKE ".$_SESSION['ID']."";
  $result = mysql_query($abfrage) or die(mysql_error());
if (mysql_num_rows($result) == 0)
 {
$nickid = $_SESSION['ID'];
 $sql = "INSERT INTO villages (user_id) VALUES (".$_SESSION['ID'].")";  
 echo $nickid ;

     $result = mysql_query($sql) OR              
    die("Query: <pre>".$sql."</pre>\n".                  
    "Antwoertchen: ".mysql_error()); 

 }
 else
 {
  echo 'Einträge vorhanden';

}
?>
```


auf diese art funktioniert das script. kann mir jemand sagen weshalb? Eigentlich ist es doch so falsch oder nicht?
Meiner Meinung nach fehlen da ein Paar ' .

lg


----------



## Dr Dau (31. Januar 2010)

Hallo!


```
mysql_select_db(game2) OR die (mysql_error());
```
.....sollte Dir zumindest eine "Notice" wegen der undefinierten Konstante raushauen.

Gruss Dr Dau


----------

