Boekje PHP5 2° editie verwijderen.php

Status
Niet open voor verdere reacties.

Triksken59

Gebruiker
Lid geworden
6 dec 2008
Berichten
33
Ik heb aan de hand van dit boekje een db gemaakt
naam DB: soft
tabel: licentie
id bigint auto_incr prim sleutel
naam varchar (50)
versie varchar (50)
taalrol varchar (50)
Invoegen, opvragen, aanpassen deze pagina's werken zoals moet, maar bij verwijderen heb ik een probleem.
Ik krijg volgende foutcode:
Undefined index: wegid in C:\wamp\www\soft\verwijderen.php on line 4
Undefined index: wegdoen in C:\wamp\www\soft\verwijderen.php on line 5
wanneer ik klik op de link delete krijg ik:
Notice: Undefined index: wegdoen in C:\wamp\www\soft\verwijderen.php on line 5

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\wamp\www\soft\verwijderen.php on line 31

Warning: Invalid argument supplied for foreach() in C:\wamp\www\soft\verwijderen.php on line 33

Hieronder de code:
PHP:
<?php
include ("header.php");
include ("db_soft.php");
$wegid=$_GET['wegid'];
$wegdoen=$_GET['wegdoen'];
if(isset($wegdoen)){
		$iduser=explode(",",$wegdoen);
		trim($iduser);
		$idweg="$iduser[1]";
		$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
	    $sql="delete from licentie where id=$idweg";
	    //$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;
			}
			else {
			echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
			mysql_close($mysql_id);	
			exit;
			}	    	
}
if(isset($wegid)) {
		$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
		$sql="select * from licentie where id=$wegid";
		$res=mysql_db_query("$db","$sql",$mysql_id);
		$row=mysql_fetch_row($res);
		echo "<h3>De volgende licentie zal verwijderd worden</h3>\n";
		foreach($row as $col) {
		echo "<b>$col</b><br>\n";
	}
mysql_close($mysql_id);
		echo "<br><h3><a href=\"verwijderen.php?wegdoen=ok,$wegid\">Ja, verwijder deze licentie</a></h3><br>\n";
}
else {
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$sql="select * from licentie";
$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 "<br><br>";
echo '<table border=2 celpadding=2 width="100%">';
for($i=0;$i<$aantal_velden;$i++) {
	printf("<th class=\"db\">%s</th>",mysql_field_name($res,$i));
	}
	echo "<th class=\"db\">Delete</th>"; # toegevoegd
for($i=0;$i<$aantal_lijnen;$i++) {
	$row=mysql_fetch_row($res);
	echo '<tr>';
	foreach($row as $col) {
		$wegid=$row[0];
		if(!$col) $col="&nbsp;";
		echo "<td class=\"db\">$col</td>";
	}
	echo "<td class=\"db\"><a href=\"verwijderen.php?wegid=$wegid\" class=\"links\">Delete</a></td></tr>"; # veranderd
	}
echo "</table>";
echo '<br><br>';
mysql_close($mysql_id);
}
//include("footer.html");
?>

Alvast bedankt voor een reactie.
 
De eerste twee errors geven aan dat de betreffende keys niet bestaan in je $_GET array.

Kun je makkelijk oplossen:

PHP:
$wegid = ( isset ( $_GET['wegid'] ) ? $_GET[ 'wegid' ] : 'standaardwaarde';
$wegdoen = ( isset ( $_GET['wegdoen'] ) ? $_GET[ 'wegdoen' ] : 'standaardwaarde';

Nu kijkt ie eerst of de waarde bestaat en wijst 'm alleen toe áls ie bestaat. Als ie niet bestaat krijgt ie de waarde: 'standaardwaarde'.

Voor wat betreft die tweede error: weet je zeker dat $db een waarde heeft? Is die toegewezen in db_soft.php? Overigens, die hoef je in de functie aanroep niet tussen quotes te zetten (regel 30, evenals $sql). Het kan ook zijn, doordat $wegid geen geldige waarde heeft (bijvoorbeeld geen waarde of geen integer), dat je query niet geldig is. Zet eens onder $sql = ... echo $sql; en post hier even wat er dan komt te staan. Dat is het meest waarschijnlijke, dat daar de fout zit.
 
Boekje php5

Reeds bedankt voor uw reactie. Ik ben nog maar een beginner, als ik de code invoer krijg ik een nieuwe foutboodschap:

Parse error: parse error in C:\wamp\www\soft\verwijderen.php on line 4
Hieronder de code + de echo $sql;

PHP:
<?php
include ("header.php");
include ("db_soft.php");
$wegid = ( isset ( $_GET['wegid'] ) ? $_GET[ 'wegid' ] : 'standaardwaarde';
$wegdoen = ( isset ( $_GET['wegdoen'] ) ? $_GET[ 'wegdoen' ] : 'standaardwaarde'; 
if(isset($wegdoen)){
		$iduser=explode(",",$wegdoen);
		trim($iduser);
		$idweg="$iduser[1]";
		$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
	    $sql="delete from licentie where id=$idweg";
		echo $sql;
		$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;
			}
			else {
			echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
			mysql_close($mysql_id);	
			exit;
			}
 
Ik ben twee keer een haakje vergeten. :$

PHP:
$wegid = ( isset ( $_GET['wegid'] ) ) ? $_GET[ 'wegid' ] : 'standaardwaarde';
$wegdoen = ( isset ( $_GET['wegdoen'] ) ) ? $_GET[ 'wegdoen' ] : 'standaardwaarde';
 
@Erik: Waarom dubbel werk verrichten?

Er wordt immers op regel 6 en 27 (eerste bericht) al gechecked of ze bestaan.
Gewoon een kwestie van daar de $_GET-variabelen gebruiken en het probleem is opgelost nietwaar?
 
Het wil nog niet lukken.
Ik heb in mijn db ook nog eens nagezien, en mijn id noemt eigenlijk li_id, dit heb ik aangepast in de code.
maar ik krijg nu volgende error:

Notice: Array to string conversion in C:\wamp\www\soft\verwijderen.php on line 8

Notice: Undefined offset: 1 in C:\wamp\www\soft\verwijderen.php on line 9
delete from licentie where li_id=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

PHP:
<?php
include ("header.php");
include ("db_soft.php");
$wegid = ( isset ( $_GET['wegid'] ) ) ? $_GET[ 'wegid' ] : 'standaardwaarde';
$wegdoen = ( isset ( $_GET['wegdoen'] ) ) ? $_GET[ 'wegdoen' ] : 'standaardwaarde';
if(isset($wegdoen)){
		$iduser=explode(",",$wegdoen);
		trim($iduser);
		$idweg="$iduser[1]";
		$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
	    $sql="delete from licentie where li_id=$idweg";
		echo $sql;
		$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;
			}
			else {
			echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
			mysql_close($mysql_id);	
			exit;
			}
 
@Tha Devil: je hebt gelijk. Kwestie van verder kijken dan m'n neus lang is hè? :eek:

@Triksken: Je hebt in $iduser een array, die kun je niet trimmen. Daarom krijg je een warning. Je zult wat regels moeten omdraaien:

PHP:
trim($iduser);
$idweg="$iduser[1]";

wordt:

PHP:
$idweg=$iduser[1];
trim($iduser);

Overigens denk ik dat je offset 0 wilt gebruiken. De eerste key in een numerieke array is 0.
Dat is dan ook meteen je tweede error. Je derde error komt daar ook meteen door doordat je een waarde in je query probeert te plakken die niet bestaat. Daardoor komt er een WHERE-clause die niet complete is te staan ("WHERE li_id = ").
 
Sorry, kan slechts tijdens de middag wat tijd vrijmaken.
Ik kan niet meer volgen.
ik heb een paar wijzigingen doorgevoerd maar het komt niet slim.
Ik zal mij dringend moeten bijscholen.


Notice: Array to string conversion in C:\wamp\www\soft\verwijderen.php on line 9
delete from licentie where li_id=standaardwaardeUnknown column 'standaardwaarde' in 'where clause'

PHP:
<?php
include ("header.php");
include ("db_soft.php");
$wegid = ( isset ( $_GET['wegid'] ) ) ? $_GET[ 'wegid' ] : 'standaardwaarde';
$wegdoen = ( isset ( $_GET['wegdoen'] ) ) ? $_GET[ 'wegdoen' ] : 'standaardwaarde';
if(isset($wegdoen)){
		$iduser=explode(",",$wegdoen);
		$idweg="$iduser[0]";
		trim($iduser);
		$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
	    $sql="delete from licentie where li_id=$idweg";
		echo $sql;
		$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;
			}
			else {
			echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
			mysql_close($mysql_id);	
			exit;
			}	    	
}
if(isset($wegid)) {
		$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
		$sql="select * from licentie where li_id=$wegid";
		$res=mysql_db_query("$db","$sql",$mysql_id);
		$row=mysql_fetch_row($res);
		echo "<h3>De volgende licentie zal verwijderd worden</h3>\n";
		foreach($row as $col) {
		echo "<b>$col</b><br>\n";
	}
mysql_close($mysql_id);
		echo "<br><h3><a href=\"verwijderen.php?wegdoen=ok,$wegid\">Ja, verwijder deze licentie</a></h3><br>\n";
 
Je zult wat regels moeten omdraaien:

PHP:
trim($iduser);
$idweg="$iduser[1]";

wordt:

PHP:
$idweg=$iduser[1];
trim($iduser);
.

Als je dit doet probeer je nog steeds de array $iduser te trimmen (zie ook de foutmelding die Triksken59 nog steeds krijgt). Ik denk dat dit beter werkt:
PHP:
foreach($iduser as &$user)
{
   trim($user);
}
of
PHP:
for($i=0;$i<count($iduser);$i++)
{
  trim($iduser[$i]);
}

Wat betreft je tweede foutmelding, probeer eens om regel 11 te vervangen door
PHP:
$sql="delete from licentie where li_id='$idweg'";
Dus met enkele aanhalingstekens om de waarde.
 
Laatst bewerkt:
Je beide trim stukjes zullen niet werken, omdat je de return-waarde nergens opslaat. Daarnaast maak ik uit de code van de TS op dat hij maar 1 waarde wil gebruiken. Dan is een loop dus niet nodig.

PHP:
$idweg = trim ( $iduser[1] );

Overigens denk ik nog steeds dat je $iduser[0] bedoelt.
 
Ik denk dat we steeds dichter bij de oplossing komen, Ik krijg nu volgende melding:

delete from licentie where li_id='standaardwaarde'

Ik weet me geen raad met 'standaardwaarde'

als ik mijn code bij $sql="delete... zie hieronder
PHP:
$wegid = ( isset ( $_GET['wegid'] ) ) ? $_GET[ 'wegid' ] : 'standaardwaarde';
$wegdoen = ( isset ( $_GET['wegdoen'] ) ) ? $_GET[ 'wegdoen' ] : 'standaardwaarde';
if(isset($wegdoen)){
		$iduser=explode(",",$wegdoen);
		$idweg = trim ( $iduser[0] );
		$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
	    $sql="delete from licentie where li_id='$idweg'";
		echo $sql;

wijzig in

PHP:
$sql="delete from licentie where li_id=9";

en ik zet hier een id nr van een licentie in mijn DB
dan krijg ik:

delete from licentie where li_id=9

De licentie werd uit de database verwijderd !

En is het record ook effectief verwijderd
 
Standaardwaarde kun je gewoon vervangen door iets wat je zelf wilt. Het veld zal een integer zijn, dus je kunt er wel 0 of -1 van maken, zolang het een id is dat niet voorkomt in de tabel.

Eigenlijk, zoals Tha Devil al zei, wordt er nu dubbel werk verricht. Je kunt het beter zo doen:

PHP:
if(isset($_GET['wegdoen'])){
        $wegdoen = $_GET['wegdoen'];
        $iduser=explode(",",$wegdoen);
        $idweg="$iduser[0]";
        trim($iduser);
        $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
        $sql="delete from licentie where li_id=$idweg";
        echo $sql;
        $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;
            }
            else {
            echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
            mysql_close($mysql_id); 
            exit;
            }           
}
if(isset($_GET['wegid'])) {
        $wegid = $_GET['wegid'];
        $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
        $sql="select * from licentie where li_id=$wegid";
        $res=mysql_db_query("$db","$sql",$mysql_id);
        $row=mysql_fetch_row($res);
        echo "<h3>De volgende licentie zal verwijderd worden</h3>\n";
        foreach($row as $col) {
        echo "<b>$col</b><br>\n";
    }
mysql_close($mysql_id);
        echo "<br><h3><a href=\"verwijderen.php?wegdoen=ok,$wegid\">Ja, verwijder deze licentie</a></h3><br>\n";

Zo heb je ook geen geklooi meer met de standaardwaarde.
 
Alvast bedankt voor jullie moed om mij te helpen, maar nog is het niet opgelost.
Ik heb de code aangepast zoals ErikBooy007 ze doorstuurde
ik heb enkel bij $sql="delete from licentie where li_id=$idweg";
de $idweg tussen enkele quotes geplaatst ...li_id='$idweg'" zoals Supersnail zegt.

Ik krijg nu geen foutmelding meer bij de pagina verwijderen.php
als ik klik op de link delete, krijg ik netjes het id nr + naam soft + versie + taalrol en de vraag om te bevestigen.

De volgende licentie zal verwijderd worden
2
Visio
2008
EN
Ja, verwijder deze licentie

Als ik klik om te bevestigen, dan krijg ik:
Notice: Array to string conversion in C:\wamp\www\soft\verwijderen.php on line 8

delete from licentie where li_id='ok' (dit is de echo $sql)

De licentie werd uit de database verwijderd !

In de databank is de record niet verwijderd

lijn 8 verwijst nog steeds naar
PHP:
trim($iduser);

ik plaats hieronder nog eens de volledig aangepaste code:
PHP:
<?php
include ("header.php");
include ("db_soft.php");
if(isset($_GET['wegdoen'])){
        $wegdoen = $_GET['wegdoen'];
        $iduser=explode(",",$wegdoen);
        $idweg="$iduser[0]";
        trim($iduser);
        $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
        $sql="delete from licentie where li_id='$idweg'";
        echo $sql;
        $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;
            }
            else {
            echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
            mysql_close($mysql_id); 
            exit;
            }           
}
if(isset($_GET['wegid'])) {
        $wegid = $_GET['wegid'];
        $mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
        $sql="select * from licentie where li_id='$wegid'";
        $res=mysql_db_query("$db","$sql",$mysql_id);
        $row=mysql_fetch_row($res);
        echo "<h3>De volgende licentie zal verwijderd worden</h3>\n";
        foreach($row as $col) {
        echo "<b>$col</b><br>\n";
    }
mysql_close($mysql_id);
        echo "<br><h3><a href=\"verwijderen.php?wegdoen=ok,$wegid\">Ja, verwijder deze licentie</a></h3><br>\n"; 
}
else {
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$sql="select * from licentie";
$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 "<br><br>";
echo '<table border=2 celpadding=2 width="30%">';
for($i=0;$i<$aantal_velden;$i++) {
	printf("<th class=\"db\">%s</th>",mysql_field_name($res,$i));
	}
	echo "<th class=\"db\">Delete</th>"; # toegevoegd
for($i=0;$i<$aantal_lijnen;$i++) {
	$row=mysql_fetch_row($res);
	echo '<tr>';
	foreach($row as $col) {
		$wegid=$row[0];
		if(!$col) $col="&nbsp;";
		echo "<td class=\"db\">$col</td>";
	}
	echo "<td class=\"db\"><a href=\"verwijderen.php?wegid=$wegid\" class=\"links\">Delete</a></td></tr>"; # veranderd
	}
echo "</table>";
echo '<br><br>';
mysql_close($mysql_id);
}
//include("footer.html");
?>
 
Maak er eens van:

PHP:
$idweg = $iduser[0];
$idweg = trim( $idweg );

(regel 7 & 8).

En maak van:

PHP:
$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;
            }
            else {
            echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
            mysql_close($mysql_id); 
            exit;
            }

eens:

PHP:
$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;
            }
            else {
              if ( mysql_affected_rows ( $res ) > 0 ) {
                echo '<div align="center"><h3>De licentie werd uit de database verwijderd !</h3></div>';
              } else {
                echo '<div align="center"><h3>De licentie kan niet worden verwijderd !</h3></div>';
              }
            mysql_close($mysql_id); 
            exit;
            }

Je keek eerst alleen of er een error was, zo niet, dan gaf je aan dat het record verwijders was. Nu kijk je, hoeveel records zijn er eigenlijk veranderd? Zijn dat er meer dan 0? Dán geef je aan dat het record verwijderd is.
 
Bijna, de record wordt verwijderd, maar ik kreeg de verkeerde boodschap.
ik heb de echo 'de licentie werd uit de database verwijderd moeten omwisselen met de 2° echo de licentie kan niet verwijderd worden.
De boodschap is nu juist. de record wordt verwijderd maar ik krijg nu bij de bevestiging de de licentie is verwijderd de volgende boodschap.

Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\soft\verwijderen.php on line 22
 
Dat is vreemd, ik zie zo niet waar dat aan kan liggen. Ik zal er morgen nog eens naar kijken!
 
Ik denk dat het probleem opgelost is.
Wanneer ik op lijn 22:
PHP:
 if ( mysql_affected_rows ( $res )> 0 ) {

vervang door

PHP:
 if ( mysql_affected_rows (  )> 0 ) {

De echo's heb ik ook terug gezet zoals ErikBooy007 in vorig bericht had vermeld.
Alles blijkt nu te werken.

Hartelijk dank aan alle personen die me op de goede weg hebben gezet.
Ik hoop in de toekomst nogmaals op jullie beroep te mogen doen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan