Goeiemorgen allemaal,

Ik ben al een tijdje lekker aan het prutsen met een aantal scripts, maar er doet zich een probleem op als ik informatie opvraag uit de database, om te bewerken. Er zit een "exit" functie tussen, maar dan sluit hij ook de rest van de scripts af zodat de pagina maar half laad. Blok ik dezelfde exit-functie door // ervoor te zetten, dan laad hij wel de pagina, maar als ik vervolgens zonder iets op te slaan naar een andere pagina surf, dan voert hij blanco velden in in m'n database. Het is dus of geen smoel, of geen gegevens meer. Wat gaat hier fout?

Alvast bedankt!

Jaap


<?php
function do_edit()
{
    check_permissions();

    global $mysql_posts_table;

    if(isset($_GET['post']))
    {
        $query = mysql_query("SELECT id FROM $mysql_posts_table");

        $ids = array();

        while($row = mysql_fetch_array($query))
            array_push($ids, $row['id']);

        $post = $_GET['post'];

        if(!in_array($post, $ids))
        {
            display('error.php');
            print '<p>No such post to edit.</p>';

            exit;
        }

        //
        // Display the form for editing this post.
        //

        if(!$_POST['titel'] || !$_POST['content'])
        {
            $query = mysql_query("SELECT * FROM $mysql_posts_table
                WHERE id=$post");

            $row = mysql_fetch_array($query);
            
            global $edit_titel_mypm;
            global $edit_content;
            global $edit_voor;

            $edit_titel_news = $row['titel'];
            $edit_content = $row['content'];
            $edit_voor = $row['voor'];

			$edit_content = str_replace('<br>', "\n", $edit_content);

            $edit_titel_mypm = stripslashes($edit_titel_news);
            $edit_content = stripslashes($edit_content);
            $edit_voor = stripslashes($edit_voor);

            display('edit_2.php');
			exit;  // de bewuste exit
        }

        //
        // Update het bewerkte bericht.
        //

        $titel = $_POST['titel'];
        $content = $_POST['content'];
        $voor = $_POST['voor'];
        $html = $_POST['html'];

        if(!$html)
        {
            $titel = htmlspecialchars($titel);
            $content = htmlspecialchars($content);
            $voor = htmlspecialchars($voor);
        }

        $titelpic = str_replace("\n", '<br>', $titelpic);
		$content = str_replace("\n", '<br>', $content);

        $titel = addslashes($titel);
        $content = addslashes($content);
        $voor = addslashes($voor);

        mysql_query("UPDATE $mysql_posts_table SET titel='$titel', content='$content', voor='$voor' WHERE id=$post");

        global $blog_path;

       }

    
}
?>


PS, nee, ik ben nog geen professional :-). En er hoort nog een gewoon html-form bij met invoerveldjes. Geen bijzonderheden.
zou je even de code ook even tussen <?php en ?> willen zetten dan krijgen we ook mooie kleurtjes

en er komen geen foutmeldingen?
Het is nog geen rechtstreeks antwoord op je vraag, maar deze manier:
<?php
$query = mysql_query("SELECT id FROM $mysql_posts_table");
$ids = array();
while($row = mysql_fetch_array($query))
array_push($ids, $row['id']);
$post = $_GET['post'];
if(!in_array($post, $ids))
{
display('error.php');
print '<p>No such post to edit.</p>';
exit;
}
?>
om te checken of er een post is om te editen kan een heel stuk netter:
<?php
if (isset ($_GET['post'])) {
if (ctype_digit ($_GET['post'])) {
$sql = "
SELECT id
FROM " . $mysql_posts_table . "
WHERE id = " . $_GET['id'] . "
";
if ($res = mysql ($sql)) {
if (mysql_num_rows ($res) == 0) {
$msg = '<p>Geen post met id: ' . $_GET['id'] . '</p>';
}
}
}
}
?>
Nog een tip: exit gebruik je liefst zo weinig mogelijk. Maak liever een var aan ($msg in dit voorbeeld) die je later met isset controleert.
De rest van je script hangt dan van de waarde in die var af.
Sorry van de <? en ?>, maar het was een functie uit een grotere file.

Nee, foutmeldingen kwamen er niet, het werkt verder wel gewoon. Als basis gebruik ik een simpel nieuwsscript dat ik eens ergens tegen kwam. Die heb ik vervolgens uitgebreid en aangepast met de inmiddels opgedane kennis.

Met hetgeen Jan geplaatst heeft, kan ik dus weer verder aan de slag. Hopelijk is een andere opbouw dus de sleutel naar probleemloos editen.

Bedankt voor de reacties.
Ik heb Jan's bijdrage ingepast in de functie, maar krijg nu een melding

Warning: Wrong parameter count for mysql() in


<?php
    if (isset ($_GET['post'])) {
        if (ctype_digit ($_GET['post'])) {
            $sql = "
                SELECT id
                FROM " . $mysql_posts_table . "
                WHERE id = " . $_GET['id'] . "
                ";
            if ($res = mysql ($sql)) {  // hiernaar verwijst de foutmelding
                if (mysql_num_rows ($res) == 0) {
                    $msg = '<p>Geen post met id: ' . $_GET['id'] . '</p>';
                }
            }
        }
    }
?> 


Ik heb inmiddels wel mijn code "netter" proberen te maken als het gaat om de query's. Voor de rest is het nog veel bijleren.
Maak van die mysql() eens mysql_query() ;-)
Ah! Mercy ! :-)
YES: Jaap-doet-dansje!!!!!!!!!!

Met het stukje script van Jan bleef ik er niet uitkomen, echter met de tips over het maken van een variabele en het gebruik van isset is het gelukt!!!!

Ik heb in de gebruikte form een hidden veld toegevoegd met de naam en de value "zomaar". Deze controleer ik nu met isset. Doordat dit nieuwe stukje het oude update-gedeelte tussen accolades heeft gezet, krijgt het script geen foute opdrachten meer.

Vanaf nu is het exit met de exits!!!!!!

Bedankt Jan, en de anderen ook natuurlijk!!!!


Jaap

Reageren