SELECT FROM WHERE probleem

Status
Niet open voor verdere reacties.

hansvdm

Nieuwe gebruiker
Lid geworden
1 dec 2007
Berichten
2
Hallo
Ik ben een beginneling in PHP.
ik probeer met de volgende code data uit een record te halen maar dit lukt mij niet . Iemand enig idee wat er mis kan zijn?

$result = mysql_query("SELECT deTekst FROM Teksten WHERE titel= bio") ;
echo mysql_result($result)


de tabel is Teksten , hierin de records deTekst en titel. Ik wil dus de data uit deTekst halen waar de data uit titel bio is.
 
probeer volgende eens:
Code:
<?php 
  $dbhost="localhost";
  $dbuser="JouGebruikersnaam";
  $dbpass="JouPaswoord";
  $db="JouDatabase";
  $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
  $sql="SELECT deTekst FROM Teksten WHERE titel='bio'";
  $res=mysql_db_query("$db","$sql",$mysql_id);
  $aantal_lijnen=mysql_num_rows($res);
  for($i=0;$i<$aantal_lijnen;$i++)
    {$row=mysql_fetch_row($res);
     echo $row[0] . "<br>";}
  mysql_close($mysql_id);
?>
ik ga ervan uit dat er meerdere records kunnen gevonden worden met titel='bio'
zoniet, dan mag je de $aantal_lijnen= ... end de for(... weglaten
Let ook op de enkele aanhalingstekens rond bio

Groetjes,
JHx.
 
trouwens... misschien werkt jou code ook wel, als je die bio tussen enkele aanhalingstekens plaatst!

$result = mysql_query("SELECT deTekst FROM Teksten WHERE titel= 'bio' ") ;
 
Bedankt , dit werkt inderdaad.
Ik hab echter maar 1 record met titel='bio'.
Is er dan geen eenvoudiger manier om de data te verkrijgen?
ik had ook die 'bio' willen veranderen in een variabele maar dit lijkt me ook niet te lukken.
 
Je kan de eerste 5 regels (waar je connetie maakt met de database) en de laatste regel (waar je de connectie afsluit) in een ".inc"-bestandje plaatsen.
De uiteindelijke code ziet er dan zo uit:

test.php
Code:
<?php 
  include("Openen.inc");

  $sql="SELECT deTekst FROM Teksten WHERE titel='bio'";
  $res=mysql_db_query("$db","$sql",$mysql_id);
  $row=mysql_fetch_row($res);
  echo $row[0] . "<br>";

  include("Sluiten.inc");
?>

Openen.inc:
Code:
<?php
  $dbhost="localhost";
  $dbuser="JouGebruikersnaam";
  $dbpass="JouPaswoord";
  $db="JouDatabase";
  $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
?>

Sluiten.inc:
Code:
<?php
  mysql_close($mysql_id);
?>

Dat ZIET er eenvoudiger en overzichtelijker uit maar IS uiteindelijk identiek hetzelfde.
De "Sluiten.inc" is misschien wat overdreven omdat je 1 regel vervangt door 1 regel, maar theoretisch kunnen er nadien nog een aantal andere opdrachten bij geplaats worden.

Verder denk ik dat je hoe dan ook moet gebruik maken van een connectie ($mysql_id=mysql_connect...), die je dan gebruikt om een query te maken ($res=mysql_db_query...), waaruit je dan de records kan ophalen ($row=mysql_fetch_row...). De velden in die record kan je benaderen met $row[0], $row[1], $row[2], ... (=respectievelijk eerste veld, tweede veld, derde veld, ...)
 
PHP:
<?php
// MySQL gegevens
$server = "localhost";
$user = "";
$password = "";
$database = "";

$connection = mysql_connect($server, $user, $password) or die("Error: Geen verbinding met de server");
mysql_select_db($database);
// eind MySQL gegevens

$titel = "bio";

$tekstQuery = "SELECT deTekst FROM Teksten WHERE titel = '". $titel ."'";
$tekstResult = mysql_query($tekstQuery) or die(mysql_error());
while($tekstRow = mysql_fetch_array($tekstResult)) {
  echo $tekstRow['deTekst'] .'<br />';
}

mysql_close($connection);
?>
Makkelijker kan het haast niet, deze werkt zoals je ziet met een variabele voor titel.

@JHx: Je weet dat je .inc bestanden gewoon uit kan lezen? Dus als ik direct naar die pagina surf zie ik alle PHP code :)
 
Laatst bewerkt:
@Tha Devil: Mooi! Ik ben zelf ook maar een beginner in PHP; ken iets meer van ASP...
Ik ben er ondertussen wel van overtuigd dat PHP "beter" is dan ASP :thumb:

De 'while'-lus die jij gebruikt vind ik veel mooier dan mijn 'teller'-lus... alleen... ik begrijp hem niet goed :o
hoe 'weet' die lus wanneer hij aan het einde van de recordset zit?

En verder... hoe krijg je die kleurtjes in je code-voorbeeldjes? moet je dat allemaal apart selecteren en dan een text-kleur meegeven of copieer je de code uit jou editor. De editor die ik gebruik (EditPad Pro) geeft ook alles in kleurtjes weer, maar als ik er iets uit copieer naar hier zijn die weg...
 
Gelukkig heeft dit forum speciaal
PHP:
...
tags :)

De WHILE gaat net zo lang door totdat hij geen records meer heeft. Wanneer je het letterlijk vertaalt staat er: Zolang $tekstRow iets heeft voer ... uit.

Overigens heb jij het iets makkelijk bij een melding voor geen records omdat jouw FOR-lus gebaseerd is op mysql_num_rows().

Wil je dat bij een WHILE doen dan moet je eerst een IF doen.
PHP:
if(mysql_num_rows($tekstResult) > 0) {
  while($tekstRow = mysql_fetch_array($tekstResult)) {
    echo $tekstRow['deTekst'] .'<br />';
  }
} else {
  echo 'Geen resultaten gevonden!';
}
 
Jep! nu zie ik het...
Ik had (foutievelijk) gezien:
PHP:
  while($tekstRow == mysql_fetch_array($tekstResult)) { 
    echo $tekstRow['deTekst'] .'<br />'; 
  }
(let op het dubbele 'is-gelijk-aan'-teken) en redeneerde dus iets als volgt:
zolang de vorige gelijk is aan de volgende: doe....
en dat begreep ik natuurlijk HELEMAAL niet

overigens, jou code blijft nog steeds beter hoor. Als ik een "geen resultaat"-melding wil geven, moet ik ook een IF doen:

PHP:
  $aantal_lijnen=mysql_num_rows($res);
  if($aantal_lijnen==0){
    echo "Geen records gevonden";
  }else{
    for($i=0;$i<$aantal_lijnen;$i++)
      {$row=mysql_fetch_row($res);
       echo $row[0] . "<br>";}
  }
of zie ik ook hier iets over het hoofd?

En tenslotte: HEERLIJK die
PHP:
...
:love:
 
Nee, je hebt inderdaad gelijk. Jij moet dan ook een IF-statement doen.

Laten we eens afwachten wat de TS nog te melden heeft :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan