<?php $servername = "localhost"; $server_username = "root"; $server_password = ""; $dbName = "cardpacks"; $card = ""; $cards = ""; $ehto = true; //Make connection $conn = new mysqli($servername, $server_username, $server_password, $dbName); //Check Connection if(!$conn){ die("Connection Failed. " . mysql_connect_error()); } $i = 0; while($i < 7){ RandomCard(); $sql = "SELECT id FROM cardpacks WHERE cardpack1 = '".$card."' "; $result = mysqli_query($conn, $sql); while($ehto){ //Get the result if(mysqli_num_rows($result) > 0){ //Tieto löytyi tietokannasta echo "Tieto löytyi tietokannasta"; $i--; continue; }else{ //Kortti on uusi echo "Kortti on uusi"; $cards = $cards . $card . ":"; $ehto = false; continue; } } $i++; } echo $cards; function RandomCard(){ for($i = 0; $i < 7; $i++) { $card = rand(2,14); switch($card) { case 14: $card = "A"; break; case 13: $card = "K"; break; case 12: $card = "Q"; break; case 11: $card = "J"; break; case 10: $card = "T"; break; case 9: $card = 9; break; case 8: $card = 8; break; case 7: $card = 7; break; case 6: $card = 6; break; case 5: $card = 5; break; case 4: $card = 4; break; case 3: $card = 3; break; case 2: $card = 2; break; } $card = $card . rand(1,4); return $card; } } ?>
Tuossa on koodi ja tälläinen varoitus tulee:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\Poker\Table.php on line 27
Mitä tuo tarkoittaa. Saa myös huomauttaa jos olen koodissa tehnyt virheen. Tarkoituksena olisi että tietokannassa olisi pakka kortteja ja joka kerta kun korttia ei ole tietokannassa tämä tallenetaan $cards muuttujaan. Kun $cards muuttujassa on 7 korttia se ilmestyy näytölle.
Huomasin että tein tällähetkellä väärin päin sen tarkistusjutun. Nyt se on siten että joka kerta kun kortti löytyy pakasta se etsii uuden vaikka se pitäisi olla toisin päin.
Kiitos kaikille jotka viitsivät vastata.
Lisäys: Lisäksi ongelmana on se että tietoa ei muka löydy tietokannasta.
Onkohan jokin syy, miksi et käytä PDO:ta ?
https://www.ohjelmointiputka.net/oppaat/opas.
Varsinainen ongelma:
Käytät $card-muuttujaa, joka on RandomCard:n sisäinen, joten pääohjelmassa $card="", joten sql-hakusi etsii ''-arvoja riippumatta RandomCard:n määrittelemistä arvoista.
Tuossa funktiossa RandomCard() on for-silmukka täysin turhaan, koska ensimmäisen kierroksen jälkeen palautetaan arvottu aakkosnumeerinen merkki ja satunnaisluku 1-4 yhdistettynä. Switch-rakenne luettelee myös ihan turhaan välin 2-9, mutta siitä pääsee halutessaan myös kokonaan eroon näin.
function RandomCard() { $values = Array(14 => "A", 13 => "K", 12 => "Q", 11 => "J", 10 => "T"); $card = rand(2, 14); if ($card >= 10) { $card = $values[$card]; } $card = $card . rand(1,4); return $card; }
Muun koodin toimintaa en jaksa tarkemmin pohtia, mutta alla oleva saattaa toimia kuten ehkä tarkoitat.
<?php $servername = "localhost"; $server_username = "root"; $server_password = ""; $dbName = "cardpacks"; $card = ""; $cards = Array(); $conn = new mysqli($servername, $server_username, $server_password, $dbName); if (!$conn) { die("Connection Failed. " . mysql_connect_error()); } while (count($cards) < 7){ $card = RandomCard(); $sql = "SELECT id FROM cardpacks WHERE cardpack1 = '{$card}'"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) == 0) { $cards[] = $card; } } var_dump($cards); function RandomCard() { $values = Array(14 => "A", 13 => "K", 12 => "Q", 11 => "J", 10 => "T"); $card = rand(2, 14); if ($card >= 10) { $card = $values[$card]; } $card = $card . rand(1,4); return $card; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.