Ik haal uit een tabel in de database enkele velden en print deze voor alle records op het scherm. k wil nu uit deze tabel een record kiezen (aanklikken) en van dit record alle velden opeen nieuwe pagina afdrukken. Ik weet niet hoe ik dat aanmoet pakken en kan het ook nergens vinden. Kan iemand me helpen?

vriendelijke groet,

jacques jansen.
Dit is gewoon slordig programmeren:
<?php
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
?>
Variabelen horen niet tussen quotes. Alle quotes op bovenstaande regel moeten gewoon weg.

<?php
$result = mysql_query "(SELECT * FROM leden WHERE id='$_GET['record_id'] '');
?>
Van deze quotes klopt helemaal niets. Wees netjes en consequent:
<?php
$result = mysql_query('SELECT * FROM leden WHERE id='.$_GET['record_id']);
?>

En hier mis je een aantal quotes:
<?php
echo '<table border=1 celpadding=2 width="90%" class="letter">';
?>
Moet zijn:
<?php
echo '<table border="1" celpadding="2" width="90%" class="letter">';
?>
Donny van Grondelle Ik heb je code op de volgende manier in het scirpt gebracht:
<?php
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$result1 = mysql_query ("SELECT * FROM main_page WHERE id=1");
$row1 = mysql_fetch_assoc($result1);

echo $row1['titel']. "<br />";
echo $row1['main_tekst'];

$result = mysql_query ('SELECT  * FROM leden WHERE id='.$_GET['record_id']);


$res=mysql_db_query("$db","$sql",$mysql_id);
    
    $fout=mysql_errno($mysql_id);
        if ($fout != 0) {
        $fout=mysql_error($mysql_id);
        echo '<font color="#FF2306">' . $fout . '</font>';
        mysql_close($mysql_id);
        echo '</body></html>';
        exit;
        }
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);

echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";	
   
    echo"<tr>";
    
    	
    	echo  "<td class='letter'>$row[1]<td>";
	    echo  "<td class='letter'>$row[2]<td>";
	    echo  "<td class='letter'>$row[3]<td>";
	    echo "</tr>";
	    
    
    
    
echo "</table>";
?>

Dit script leidt tot de volgende fout melding:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/vhosts/logerosaalba.nl/httpdocs/lid.php on line 13

Daar onder staat overigens: queri was empty. Blijkbaar is het nog niet gelukt om de juiste variabele van de ene naar de andere pagina te brengen.

Wat betreft de opmerkingen van Erwin H, Dat gewone slordig programmeren is over genomen van het leerboekje "PHP 5 in 10 minuten" geschreven door Serge Terryn 2006 En wat slordigheid betreft, juist om zoveel mogelijk fouten te voorkomen probeer ik zoveel mogelijk code te kopiƫren. Dat heb ik ook gedaan met je 2e opmerking betreffende de $_GET['record_id'] zoals je hierboven in het script kunt zien. Het resultaat is echter de boodschap "Query was empty" Ik ben dus nog niet veel opgeschoten

Vriendelijke groet,

Jacques Jansen
Jacques jansen op 13/12/2012 23:16:52
Wat betreft de opmerkingen van Erwin H, Dat gewone slordig programmeren is over genomen van het leerboekje "PHP 5 in 10 minuten" geschreven door Serge Terryn 2006

Daar komt dus al die onzin vandaan om variabelen tussen quotes te zetten. Geen probleem dat je het eerst uit een boekje haalt, maar dan mag je nu leren dat niet meer te doen. Een variabele alleen tussen quotes zetten dient geen enkel doel, het is slordig, kost je meer tijd en meer karakters en levert je in de meeste normale programmeertalen direct een foutmelding op. Afleren dus. Wil je het toch blijven doen, probeer jezelf dan eens uit te leggen waarom je het doet, welk doel het dient.

Dan verder met het echte probleem. Als er iets niet gebeurt dan kan je dat natuurlijk hier uiteenzetten, beter is om gewoon even te gaan debuggen. Een paar simpele stappen lossen vaak al een groot deel van het probleem op.
Stap 1: komt de executie van het script wel op de plaatsen die je wilt. Om dat te testen kan je op het punt waar het om gaat even zetten:
<?php
echo 'hier ben ik'; exit;
?>
Het script stopt direct na de exit, maar het gaan erom dat je die tekst ziet. Zo ja, dan ben je waar je wezen moet. Zie je het niet dan gaat er daarvoor al iets fout. Zo loop je door je hele script heen (blok voor blok, of regel voor regel als het nodig is) en controleer je dus snel en simpel of de hele executie loopt zoals jij denkt dat het zou moeten.

Stap 2: ben je dan nog niet uit de problemen dan ga je variabelen echo'en. Zo kan je controleren of je wel in de variabelen hebt zitten wat je verwacht. Op de punten waar het fout gaat echo je dus gewoon die variabelen die blijkbaar niet correct zijn. In jouw geval zou ik direct aan het begin al beginnen met de inhoud van $_GET eens te printen, dus:
<?php
print_r($_GET); exit;
?>
De exit gooit je er direct weer uit, maar krijg je dan te zien wat je denkt? Krijg je dat record_id te zien?

Ik denk het niet. En wel om de doodeenvoudige reden van het slordig omgaan met quotes:
<?php
echo "<td class='letter'><a href=lid.php?record_id' . $row[id] . '>Kies lid </a><td>";
?>
Hier komt namelijk niet uit wat jij denkt en daarmee krijg je niet de gegevens uit de database. Leer dus correct te quoten.
Jacq,

Er is mij geleerd om tijdens een echo bijna altijd single quote ' te gebruiken. Ook i.v.m. HTML die je tussendoor gebruikt. Kijk naar de kleuren in onderstaand voorbeeld.

<?php
//Jouw code:
echo "<td class='letter'><a href=lid.php?record_id' . $row[id] . '>Kies lid </a><td>";

// Mijn code
echo '<td class="letter"><a href="lid.php?record_id=' . $row['id'] . '">Kies lid </a><td>';
?>

Als ik jouw code simpel in een PHP bestand gooi word mijn link:
http://localhost/porto/lid.php?record_id'; (hierachter mis je een ID, daarom weet de GET niet wat hij moet gebruiken)

Nu doe ik mijn code en krijg ik:
http://localhost/porto/lid.php?record_id=50 (mijn code weet dat hij ID 50 moet gebruiken)

Vergeet ook de = teken niet. Die staat ook niet in je code anders krijg je: http://localhost/porto/lid.php?record_id50

Als je mijn codes gebruikt, zal het wel lukken. Kopieer en plak het niet als je niet begrijpt wat de code betekend. Heb ik ook erg vaak voor op mijn kop gehad. Ja gemakzucht is fijn, maar je hebt meer trots als je van je eigen succes geniet :)


EDIT: Had een foutje in mijn code
Dat van de singlequote is idd handig als je tussendoor ook html gebruikt. de code van Jacq kan ook correct zijn mits onderstaande notatie:

<?php
//Jouw code:
echo "<td class='letter'><a href='lid.php?record_id={$row['id']}'>Kies lid </a><td>";
?>

php parsed namelijk de string tussen double quotes op zoek naar variabelen (in dit geval $row['id']). de brackets vertellen php het begin en einde van de variabele.

Overigens zou ik hier mysql_real_escape gebruiken ivm mysql injection:

<?php
//Jouw code:
$row['id'] = mysql_real_escape_string($row['id']);
echo "<td class='letter'><a href='lid.php?record_id={$row['id']}'>Kies lid </a><td>";
?>
@Henze
Die HTML van jou is nog steeds fout, want je dient dubbele quotes te gebruiken voor HTML attributen, geen enkele.
Daarnaast gebruik je mysql_real_escape_string bij het invoeren van een query, niet bij data die je net uit de database haalt. Hoe kan je nu SQL injectie hebben bij data die uit de database komt??
Erwin H op 14/12/2012 10:10:07

@Henze
Die HTML van jou is nog steeds fout, want je dient dubbele quotes te gebruiken voor HTML attributen, geen enkele.
Daarnaast gebruik je mysql_real_escape_string bij het invoeren van een query, niet bij data die je net uit de database haalt. Hoe kan je nu SQL injectie hebben bij data die uit de database komt??


je hebt gelijk...was er met mijn hoofd niet bij. je moet htmlentities of iets in die richting gebruiken voor bescherming tegen een andere aanval ;)

over die singlequotes: ja, maar geen enkele browser struikelt er over. desnoods doe je \" op plaatsen waar het html betreft

Htmlentities is eventueel inderdaad wel zinvol.

Over het quote gebruik, al die relaxte regels zijn nu juist zo funest. Daardoor gaan bijna alle beginners de fout in met het quoten (en zie je dat hier dagelijks). Daarom kan het misschien wel, maar blijf ik het in elk geval verstandig vinden om standaarden aan te houden. Krijgen we morgen dan een browser die er wel over struikelt hoef je in elk geval niet al je scripts langs te lopen om het correct te zetten.
Henze Berkheij op 14/12/2012 10:23:04

... je moet htmlentities of iets in die richting gebruiken voor bescherming tegen een andere aanval ;)...


Probeer toch goed te beseffen welke functie je waarvoor gebruikt. Gebruik die niet door mekaar.

- mysql_real_escape_string: dit beschermt de integriteit van een SQL string.
bv: <?php mysql_query("SELECT id, username, email FROM users WHERE user='" . mysql_real_escape_string($_POST['username']) . "'"); ?>
-> wat de functie vooral doet, is de ' en " omvormen tot ongevaarlijke tekens.

- htmlentities: dit beschermt de integriteit van van de HTML-structuur.
bv. <?php echo '<div class="email">' . htmlentities($row['email']). '</div>'; ?>
-> HTML-tekens worden omgezet. Tekens als < / > " ' = ...

- casten:
Gaat het om een numerieke waarde? Vergeet dan al die string functies. Gebruik intval() voor int ofwel intfloat() voor niet-gehele getallen.
bv.
<?php echo '<td class="letter"><a href="lid.php?record_id=' . intval($row['id']) . '">Kies lid </a><td>'; ?>
Het ergste wat kan overkomen, is dat een boosaardige waarde wordt omgezet in 0.

- urlencode: dit genereert tekens die ongevaarlijk zijn in een url-balk.
bv. <?php echo '<a href="index.php?page=' . urlencode($page) . '">Home site</a>'; ?>
-> tekens als ? = & ... worden omgezet.


Volledige uitleg van al die functies en betere voorbeelden? zie php.net
@Kris, jaja...ik was alleen nog niet wakker...de koffieautomaat werkte even niet naar behoren ;)

[size=xsmall]Toevoeging op 14/12/2012 11:41:15:[/size]

@Kris, jaja...ik was alleen nog niet wakker...de koffieautomaat werkte even niet naar behoren ;)

Reageren