Data uit MySQL database halen

Status
Niet open voor verdere reacties.

the_dannyboy

Gebruiker
Lid geworden
2 jan 2002
Berichten
968
Hey iedereen !

Ik ben net begonnen met php en mysql, nu wil ik data uit een database halen en deze laten zien op een website. Alleen lukt dit me dus niet!
Ik heb een database met daarin een table genaamd Teksten en een Record genaamd Nieuws.

Waarschijnlijk ergens een fout in de php code:

PHP:
<?
$dbh=mysql_connect ("localhost", xxx, xxx) or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db (xxx); 

$XX = "No Record Found, to search again please close this window"; 

$query = mysql_query("SELECT * FROM Teksten WHERE 1 AND `Page` LIKE \'nieuws\' LIMIT 0, 30"); 
while ($row = @mysql_fetch_array($query)) 
{ 
$variable1=$row["Text"];

print ("<tr>");
print ("<td>$variable1</td>"); 
print ("</tr>"); 
}

if (!$variable1)
{ 
print ("$XX");
} 
?>

Ik krijg dus steeds die melding: No Record Found, to search again please close this window.
Iemand enig enig idee wat er allemaal fout is?
 
Probeer deze code es:
PHP:
<?
$connect = mysql_connect ("localhost","xxx","xxx") or die ("Kon geen verbinding met MySQL Server tot stand brengen. MySQL error: " . mysql_error());
mysql_select_db("databasenaam",$connect) or die("Kon geen verbinding maken met database. MySQL error: " . mysql_error());

$query = "SELECT * FROM Teksten WHERE Page LIKE '%nieuws%' LIMIT 0,30";
$result = mysql_query($query) or die("Kon query niet uitvoeren: " . mysql_error());
  if(mysql_num_rows($result) == 0)
  {
  echo "No Record Found, to search again please close this window";
  }
  else
  {
    while ($row = mysql_fetch_object($result)) 
    { 
    echo "<tr>";
    echo "<td>" . $row->Text . "</td>";
    echo "</tr>";
    }
  }
?>
Een paar verbeteringen:
- Verbinding maken met database kán fout gaan, als de databasenaam fout gespeld is ofzo. Indien dat zo is krijg je nu een melding.
- In je query stond achter WHERE '1 AND' ... Wat dat daar doet ... geen idee, en dus weggehaald.
- Wederom in je query stond "LIKE 'nieuws'", ik denk dat je "LIKE '%nieuws%'" bedoeld, zodat alle rijen uit de database worden geselecteerd waar de kolom 'Page' het woordje 'nieuws' bevat (er mogen letters voor en na komen, zolang de kolom maar 'nieuws' bevat)
- mysql_fetch_array() vervangen door mysql_fetch_object(). mysql_fetch_array() is de langzaamste manier van fetchen (fetchen = rijen ophalen uit de database), doordat het zowel de associatieve als numerieke waarden in een array stopt (associatief => kolomnamen, numeriek => nummer voor elke kolom, de eerste kolom heeft nummer 0, tweede kolom nummer 1, derde nummer 2, etc, etc). Dit neemt tijd in beslag, weinig tijd, maar wel tijd ;). mysql_fetch_object() is ook niet de snelste manier, maar als je handigheid en snelheid combineert kom je op die uit :).
- Het fetchen van de waarden uit de database gaat zélden fout. Als je weet dat de query goed gaat, en je weet dat de query rijen selecteert dan gaat het fetchen 99,9% ook goed. En áls het fout zou gaan, dan geeft het uit zichzelf geen error (je moet hem een error laten geven ;)). Waar ik op doel, die @ voor de functie is overbodig.
- $variable1 = $row["Text"]; is overbodig, je voert er geen bewerkingen op uit of zo (althans, niet in het stukje code dat je gaf :p), dus je hoeft hier niet speciaal een variabele voor aan te maken. Dit neemt namelijk weer 0,01% geheugen in van de server enzo, waardoor het script weer langzamer wordt ;).
- if(!$variable1) weggehaald, ik heb nu de functie mysql_num_rows() toegevoegd, deze telt het aantal rijen dat de query heeft opgehaald. Ik kijk of het aantal rijen gelijk is aan 0, zo ja, dan geeft hij de error "No Record Found, blablabla".

Btw, als dit jouw eerste script is, dan ben je zéér snel op weg :8-0:
Ik had in 't begin al moeite met een for() lus :rolleyes:

Succes verder :thumb:
 
Laatst bewerkt:
Geplaatst door JPeetje
Ik had in 't begin al moeite met een for() lus :rolleyes:

Erm.. :eek: Wat is 'n for() lus? :D. Dat wat er nu weergeven word kan ik zo langzamerhand wel dromen :p :roll: (Bedankt JP :love: )
 
Dit was een van m'n eerste codes, maar het grootste gedeelte had ik van internet afgeplukt :p

De code die JP gaf werkte iig, dus daarvoor hartstikke bedankt!
Ik had nog we een vraagje: Waarvoor zijn die punten bij:
PHP:
echo "<td>" . $row->Text . "</td>";
 
Die puntjes zijn ter scheiding tussen variabelen/functies en strings... is wat netter dan wat jij postte ;)
Het schijnt trouwens dat
PHP:
echo "<td>{$row->Text}</td>";
ietsjes sneller is dan wat ik in mijn vorige post postte ... maar dan heeft de variabele geen mooi apart kleurtje :(
 
Ach, zo'n klein beetje snelheid maakt niets uit.

Maar hij werkt nu dus perfect!
TNX!!

(nu nog ff zien of ik ook data naar de database toe kan schrijven :rolleyes: )
 
mhuahaha :evil:

Dat weet ik :D

dat moet met INSERT ;)

Voorbeeld:

Code:
$query = "INSERT INTO [b][tabelnaam][/b] ([b]kolom1,kolom2,kolom3[/b]) VALUES ('[b]waarde1','waarde2','waarde3[/b]')";

Zoiets :rolleyes: :p
 
Ik krijg steeds een error als ik dit invoer:
PHP:
$log = $_POST['log'];

$query = "INSERT INTO Teksten (nieuws) VALUES ($log)";
mysql_query($query) or die(mysql_error());
 
Oh, w8 ff...ik moet updaten, niet inserten :eek:

Iemand een code daarvoor?:p
 
Laatst bewerkt:
Ok mensen, ik ben al een heel eind gekomen.

Ik heb nu deze code:
PHP:
$log = $_POST['log'];

$query = "UPDATE Teksten SET Page='$log' WHERE Page='Nieuws'";
mysql_query($query) or die(mysql_error());

Hij geeft geen fouten, alleen heb ik nu in de database bij Nieuws helemaal geen tekst meer :confused:
 
Ha, foutje alweer ontdekt !

Ik ben echt lekker bezig vandaag :p

Dit moet 'm zijn:
PHP:
$query = "UPDATE Teksten SET Text='".$log."' WHERE Page='Nieuws'";
 
Geplaatst door the_dannyboy
PHP:
$query = "UPDATE Teksten SET Text='".$log."' WHERE Page='Nieuws'";

PHP:
$query = "UPDATE teksten SET text='" . $log . "' WHERE page = 'Nieuws'";

Zo is ie netter :eek: :p
 
Trouwens, waarom doe je $log = $_POST['log'] ?

Je kan in de query zelf ook :

PHP:
$query = "UPDATE teksten SET text='" . $_POST['log'] . "' WHERE page = 'Nieuws'";

Doen..

Trouwens, als je dingen uit een $_POST haalt wat uiteraard ingevoerd is in een formulier zou ik gebruik maken van addslashes en htmlspecialchars anders kan iemand je script zo vern**ken.
 
jup,

met htmlspecialchars() word

<noscript>

'uitgeschakeld'. de < en > worden door een speciaal tekencombinatie verplaatst zodat het onschadelijk is.

addslashes()

Zorgt ervoor dat ', " en \ omgezet worden naar \', \" en \\. Escapen heet dat. Als je dat niet doet bestaat de kans dat je query er mee stopt en een error geeft :)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan