Beste mensen van dit behulpzame forum.

Allereerst bedankt voor de fijne en snelle reacties, waarbij iedereen heel behulpzaam overkomt!

Ik ben bezig om weer eens iets nieuws te proberen in php en mysql waarbij ik alles zelf aan het schrijven ben. Ik probeer mijn vragen wel op internet op te zoeken en meestal vind ik hier een antwoord, maar nu lukt het niet.

Ik probeer in mijn php bestand het id van de ander terug te geven met de volgende code:


<?php

error_reporting(E_ALL);  // geef alle errors weer.

$host =  // locale database
$username =  // de naam van je database
$password =  // het wachtwoord in erin te komen meestal leeg
$database =  // De naam van je databse
$idd = $_GET['idd'];  // de variable die je uit de URL haalt.              
$level = $_GET['level'];  // de variable die je uit de URL haalt.              


// Create connection
$conn = mysqli_connect($host, $username, $password, $database);
// Check connection

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}


$sql = "SELECT * FROM players WHERE 'level' = '$level' AND NOT 'id' = '$idd'";


if ($result=mysqli_query($conn, $sql)) {

while($row = mysqli_fetch_row($result))
{
echo "1|" . $row['id'];
}

} 
else
{
echo "0";
}

mysqli_close($conn);
?>


Waarom id niet gelijk mag zijn aan $idd is omdat je niet tegen dezelfde persoon moet kunnen vechten. (Het is gekoppeld aan een spelletje die ik programmeer. Nu probeer ik met de echo "1|" . $row['id']; het id van de ander terug te sturen, maar het bericht blijft constant leeg.

Als ik
while($row = mysqli_fetch_row($result))
{
echo "1|" . $row['id'];
}
eruit haal en dat verander in
echo "1";
dan krijg ik wel de 1 binnen. De fout zal hem dus zitten in while($row = mysqli_fetch_row($result)) maar ik weet niet wat ik fout doe...

Kan iemand mij helpen, waardoor ik de row van de tabel terug kan sturen?


Groetjes,
Dennis
fetch_row geeft een numeriek array terug. terwijl je de key "id" gebruikt. Dat zal niet werken.

Gebruik fetch_assoc, dat werkt waarschijnlijk beter.

EDIT: je mist ook
<?php
ini_set('display_errors', 'stdout');
?>

error_reporting geeft aan wat voor errors je wilt zien, display_errors geeft aan waar je deze wilt zien, als je een van de twee niet definieert heb je grote kans dat fouten niet (of niet op je scherm, maar elders) worden gemeld.

Als je display_errors toevoegt krijg je waarschijnlijk de foutmelding "notice: undefined index "id" on line xyz".
Dan heb ik dus:


$sql = "SELECT * FROM players WHERE 'level' = '$level' AND NOT 'id' = '$idd'";


if ($result=mysqli_query($conn, $sql)) {

while($row = $result->fetch_assoc()){
echo "1|" . $row['id'];
}

} 
else
{
echo "0";
}


Me berichtje blijft leeg...? Ik ken de functie die jij geeft niet dus misschien doe ik iets fout...


Edit:
Ik heb ook de error toegevoegd maar ik krijg niks te zien:

Link:

http://onlineapp.altervista.org/valaan.php?idd=1&level=1
Uh, weet je zeker dat de query resultaten oplevert? Wat geeft $result->num_rows terug?

De constructie AND NOT 'id' = '$idd' is nogal vreemd?

Zou dit niet AND id <> '$idd' moeten zijn ofzo?
(belangrijk: de KOLOMNAAM moet NIET tussen quotes)
Daarnaast pakt ie de NOT van een niet-lege string, die je vervolgens met een integer vergelijkt, dit zal vrijwel zeker valideren tot "false" en een query met ... AND false ... levert nooit iets op.

Ook controleer je nergens of de query fouten oplevert.

Retourneert $result toevallig false?

EDIT: mijn malware programma blokkeert je website :).
Als ik dit ervan maak:


$sql = "SELECT * FROM players WHERE 'level' = '$level' AND id <> '$idd'";


if ($result=mysqli_query($conn, $sql)) {

$rowcount = $result->num_rows;
echo $rowcount;
}
 
else
{
echo "5";
}


Da krijg ik als echo 0. Dus rowcount is 0...

Screen van me databse:


Edit:
Kort gezegd wat ik wil bereiken is dat het script een id terug stuurt van iemand met hetzelfde level als je binnen krijgt bij de get. Maar het id mag niet hetzelfde zijn als het id dat bij de get binnen komt.

En wat bedoel je hiermee?
Ook controleer je nergens of de query fouten oplevert.


Groetjes,
Dennis
Je maakt bij level dezelfde vergissing. Als je quotes om een kolomnaam zet verander je deze in een string.

met
WHERE '<kolom>' = '<getal>'
vergelijk je de string '<kolom>' met "getal" '<getal>'
Dit levert nooit iets op...

met
WHERE <kolom> = '<getal>'
vergelijk je de tabel-kolom <kolom> met "getal" '<getal>'.

En "getal" is in feite een string met een numerieke waarde...
WHERE 'level' = '$level'

Je vergelijkt de tekst level met de inhoud van $level.
Onwijs bedankt! Nu werkt het helemaal goed! Ik heb alleen nog 1 vraag, nu kiest hij steeds de eerste uit de database, maar dit moet random gebeuren kan dat ook?

Groetjes,
Dennis
Onwijs bedankt! Nu werkt alles helemaal goed! RAND() is weer een nieuwe functie voor mij dus heb hem meteen even opgezocht op internet!

Groetjes,
Dennis

Reageren