Hallo PHP_ers, ik ben begonnen met een beetje OOP en heb twee klassen gemaakt. Hat is de bedoeling dat er verbinding wordt gemaakt met een database en dat in het ene geval alle records worden uigelezen en uitgevoerd naar het scherm en in het andere geval een twwetal waarde worden weggeschreven naar de database.

Op zich lukt dit wel maar defunctie show() wordt een oneinding aantal keer uitgevoerd waardoor e.a.a. vast loopt. Hoe kan ik ervoor zorgen dat deze functie slechts eenmaal wordt uitgevoerd?

Hieronder de code.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>

<form method="post" action="<? echo $php_self ?>" >
<table style="background-color:orange;">
<tr><td><input name="crypto" style="font-family:arial black;" type="text"><p style="font-family:impact;">Geef een crypto</p></input>
<tr><td><input name="oplossing" style="font-family:arial black;" type="text"><p style="font-family:impact;">Geef de oplossing</p></input>
<tr><td><input name="send" type="submit">
</table>
</form>
<?

error_reporting(E_ALL);

class connection
{

var $host;
var $user;
var $password;
var $db_name;
var $connection;
var $db_select;
var $query;
var $aantal;

function connect()
{

$connection=mysql_connect($this->host,$this->user,$this->password) or die("kan geen verbinding maken");
$db_select=mysql_select_db($this->db_name, $connection) or die("kan geen verbnding maken");

$result=mysql_query($this->query, $connection);

}

function show()
{

while($row=mysql_fetch_array(mysql_query($this->query))){
echo $row["oplossing"];
}

}






}


$connection_1=new connection;
$connection_1->host="localhost";
$connection_1->user="root";
$connection_1->password="";
$connection_1->db_name="crypto";
$connection_1->query="SELECT * FROM omschrijvingen";



$connection_2=new connection;
$connection_2->host="localhost";
$connection_2->user="root";
$connection_2->password="";
$connection_2->db_name="crypto";
$connection_2->query="INSERT INTO omschrijvingen(crypto,oplossing) VALUES('".$_POST['crypto']."', '".$_POST['oplossing']."')";

$connection_2->connect();
$connection_1->connect();
$connection_1->show(); deze functie wordt dus een oneidig aantal x uitgevoerd.


?>
</body>
</html>
hmm, wat je in ieder geval kunt doen om een while loop te beƫindigen is het break statement gebruiken. Ik kan zo niet precies zien waarom hij oneindig is..
<?php
$row=mysql_fetch_array(mysql_query($this->query))
?>
Dit is de while conditie dus..... hier gaat het mis.

Ik zou zelf zeggen zet die mysql_query even buiten die fetch functie dus zo:

<?php
$result = mysql_query($this->query);
while ($row=mysql_fetch_array($result)) {
//bla bla
}
?>

Ik weet niet of dit verschil maakt maar jouw variatie kon ik nog niet en misschien zit daar het probleem.
gebruik pdo.

[php]pdo[/php]
@Jaws: Jouw idee klopt.

Bij de while (mysql_fetch_array(mysql_query()) wordt de query bij elke iteratie opnieuw uitgevoerd. Je krijgt dan een oneindig aantal keren het eerste record. Zit je denk ik niet op te wachten ;-)
Beste mensen, bedankt voor jullie PHP_hulp. Zoals jullie kunnen zien, heb ik die $result naar voren gehaald zodat hij niet iedere keer wordt meegenomen in de while-loop. Beetje stom maar goed.

Nu lukt het aardig maar als ik zoek in het oplossingen veld, gaat het goed maar als ik in de omschrijvingen ga zoeken, doet hij niets. Verder krijg ik de melding undefined index. Wat kan dat betekenen?

Nogmaals, bedankt voor jullie hulp.

Vr. Gr.,
Frank

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>

<!-- de formulieren voor het invoegen en opzoeken -->

<form method="post" action="<? echo $php_self ?>" >
<table style="background-color:orange;">
<tr><td><input name="omschrijving" style="font-family:arial black;" type="text"><p style="font-family:impact;">Geef een crypto</p></input>
<tr><td><input name="oplossing" style="font-family:arial black;" type="text"><p style="font-family:impact;">Geef de oplossing</p></input>
<tr><td><input name="send" type="submit">
</table>
</form>

<form method="post" action="<? echo $php_self ?>" >
<input name="zoekwoord" type="text">Zoekwoord</input>
<input name="omschr" type="checkbox">In de omschrijvingen</input>
<input name="opl" type="checkbox">In de oplossingen</input>
<input name="zoek" type="submit">
</form>




<?

error_reporting(E_ALL);

// de klasse om te verbinden en de query weer te geven

class connection
{

var $host;
var $user;
var $password;
var $db_name;
var $connection;
var $db_select;
var $query;
var $result;
var $zoek;

function connect()
{

$connection=mysql_connect($this->host,$this->user,$this->password) or die("kan geen verbinding maken");
$db_select=mysql_select_db($this->db_name, $connection) or die("kan geen verbnding maken");

$result=mysql_query($this->query, $connection);

}

function show()
{
$result=mysql_query($this->query);

echo $this->query;
echo "<table style='font-family:arial;font-size:10px;'>";

while($row=mysql_fetch_array($result)){
echo "<tr><td>".$row["omschrijving"]."<td>".$row["oplossing"]."</tr>";
}
echo"</table>";

}

}

// wanneer er in de oplossing wordt gezocht

if($_POST["zoek"] && $_POST["opl"])
{
$zoek=$_POST["zoekwoord"];
$connection_3=new connection;
$connection_3->host="localhost";
$connection_3->user="root";
$connection_3->password="";
$connection_3->db_name="crypto";
$connection_3->query="SELECT * FROM omschrijvingen WHERE oplossing='$zoek'";

$connection_3->connect();
$connection_3->show();

}

// wanneer er in de omschrijving wondt gezocht

elseif($_POST["zoek"] && $_POST["omschr"])
{

$zoek=$_POST["zoekwoord"];
$connection_3=new connection;
$connection_3->host="localhost";
$connection_3->user="root";
$connection_3->password="";
$connection_3->db_name="crypto";
$connection_3->query="SELECT * FROM omschrijvingen WHERE omschrijving='$zoek'";

$connection_3->connect();
$connection_3->show();

}

//wanneer er een crypto wordt toegevoegd

elseif($_POST["send"])

{

$connection_1=new connection;
$connection_1->host="localhost";
$connection_1->user="root";
$connection_1->password="";
$connection_1->db_name="crypto";
$connection_1->query="SELECT * FROM omschrijvingen";

$connection_2=new connection;
$connection_2->host="localhost";
$connection_2->user="root";
$connection_2->password="";
$connection_2->db_name="crypto";
$connection_2->query="INSERT INTO omschrijvingen(omschrijving,oplossing) VALUES('".$_POST['omschrijving']."', '".$_POST['oplossing']."')";

$connection_2->connect();
$connection_1->connect();
$connection_1->show();

}
?>
</body>
</html>
Als je bijvoorbeeld $_POST["zoek"] ergens in je code gebruikt, en er is geen post-variabele "zoek", krijg je een undefined index foutmelding.

Je kan dan ook het best bovenin je code iets opnemen als

if (!isset($_POST["zoek"])) { $_POST["zoek"] = ''; }

en dat dan voor alle post-variabelen die je in je code gebruikt.
Hallo Willem, bedankt voor je reactie. Het probleem is opgelost. Snap nu de logica achter 'undefined index'.

Groet,
Frank

Reageren