Hallo,

Ik heb een vreemd probleem.
Ik heb een script waar ik mijn database mee kan update.
Dit werkt perfect.
Alleen in mijn formulier worden de database waardes niet goed weergeven
Als er 2 woorden in de tabel staan word alleen het eerste woord weergeven.
Weet iemand hoe ik dat kan oplossen?

Want als ik nu bijvoorbeeld maar 1 regel wil aanpassen en een andere regel bevat bv Jan klaassen.
Veranderd dit in 'Jan'

Dit is mijn scipt:

<?php
$sql = "SELECT * FROM `tabel' WHERE ID='1'";

$result = mysql_query( $sql, $db );
while( $row = mysql_fetch_array( $result )) {


echo "<form action=update.php method=post>";
echo "<table width=600 border=1>";
echo "<tr><td width=230 align=right><span class=style2>ID:</span></td>";

echo "<td width=370><input type=text name=ID value=" . $row['ID'] . "></td>";
echo "</tr><tr><td align=right><span class=style2>Regel1:</span></td>";
echo "<td><input type=text name=regel1 id=regel1 value=" . $row['regel1'] . " ></td>";
echo "</tr><tr><td align=right><span class=style2>Regel2</span></td>";
echo "<td><input type=text name=regel2 id=ragel2 value=" . $row['regel2'] . "></td>";
echo "</tr><tr><td align=right><span class=style2>Prijs:</span></td>";
echo "<td><input type=text name=prijs id=prijs value=" . $row['prijs'] . "></td>";
echo "</tr><td>" . "<input type=submit name=update value=update" . " </td>";
echo "<td>" . "<input type=hidden name=ID value=" . $row['ID'] . "</td>";
echo "</form>
</table>";
}
?>
Waarom gebruik je een while-loop voor een enkel record? Lijkt me overbodig...
En wat zegt een print_r() op $row?
Ik zou eerst je HTML eens op orde gaan maken.

Je begint een tabel binnen een form om diezelfde tabel buiten de form te beeindigen,
je gebruikt inline CSS wat behoorlijk achterhaald is, er is nagenoeg geen enkele quote gebruikt bij de id- en naam-waarden, er wordt nergens ingesprongen waardoor het overzicht totaal kwijt is.

Hoe zou ik dat anders kunnen doen als een while-loop?
Als ik print_r() doe krijg ik netjes alle informatie te zien.


Is de html zo beter?

<?php
$sql = "SELECT * FROM `tabel` WHERE ID='1'";


$result = mysql_query( $sql, $db );
while( $row = mysql_fetch_array( $result )) {

echo "<form action=update.php method=post>";
echo "<table width='300' border='1' cellspacing='5' cellpadding='0'>";
echo "<tr><td>ID:</td>";
echo "<td><input type='text' name='ID' value=" . $row['ID'] . "></td>";
echo "</tr><tr><td>Regel 1:</td>";
echo "<td><input type='text' name='regel1' value=" . $row['regel1'] . ">";
echo "<tr><td>Regel 2:</td>";
echo "<td><input type='text' name='regel2' value=" . $row['regel2'] . "></td>";
echo "</tr><tr><td>Prijs:</td>";
echo "<td><input type='text' name='prijs' value=" . $row['prijs'] . "></td>";
echo "</tr><tr>";
echo "<td><input type='hidden' name='ID' value=" . $row['ID'] . "></td>";
echo "<td><input type='submit' name='update' value='update'> </td>";
echo "</tr></table>";
echo "</form>";
}
?>
Kijk eens naar onderstaande code, ik denk dat dit een stuk duidelijker is, het is bovendien minder typewerk, veel minder quotjes en punt kommas.

Bovendien zag ik op deze manier in één oogopslag dat er een </tr> ontbrakt na naam1.

Binnen HTML code moet je dubbelquotes gebruiken ipv enkelquotes.

Op de regel <form stonden helemaal geen quotes.


<?php
$sql = "SELECT * FROM tabel WHERE ID=1 ";


$result = mysql_query( $sql, $db );
while( $row = mysql_fetch_array( $result )) {

	echo	<<<EOT
	<form action="update.php" method="post">
		<table width="300" border="1" cellspacing="5" cellpadding="0">
			<tr>
				<td>ID:</td>
				<td><input type="text" name="ID" value="$row[ID]"></td>
			</tr>
			<tr>
				<td>Regel 1:</td>
				<td><input type="text" name="regel1" value="$row[regel1]">
			</tr>
			<tr>
				<td>Regel 2:</td>
				<td><input type="text" name="regel2" value="$row[regel2]"></td>
			</tr>
			<tr>
				<td>Prijs:</td>
				<td><input type="text" name="prijs" value="$row[prijs]"></td>
			</tr>
			<tr>
				<td><input type="hidden" name="ID" value="$row[ID]"></td>
				<td><input type="submit" name="update" value="update"></td>
			</tr>
		</table>
	</form>
EOT;

}
?>

Jurgen de Brouwer op 15/11/2014 19:55:59

Hoe zou ik dat anders kunnen doen als een while-loop?
Als ik print_r() doe krijg ik netjes alle informatie te zien.


Is de html zo beter?


Nou ik zag nog het één en ander

<?php

// indien dit bestand in de POST methode wordt aangeroepen is het formulier verstuurd.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
	// GEBRUIK GEEN mysql_ meer maar gebruik mysqli_ of PDO !!!
	
	// update de record in de tabel
	$result = mysqli_query($db, "UPDATE tabel SET regel1='".mysqli_real_escape_string($_POST['regel1'])
											."', regel2='".mysqli_real_escape_string($_POST['regel2'])
											."', prijs='".mysqli_real_escape_string($_POST['prijs'])
											."' WHERE id=".intval($_POST['id']));
							
	if($result === FALSE)
		throw new Exception('Update naar tabel mislukt.' . mysqli_error($db));
		
	// optioneel voor een update is een redirect.
	else
		header('Location: index.php');
}

$id = $_GET['id'];

// query is het handigste tussen double quotes
$sql = "SELECT * FROM tabel WHERE ID=" . $id;
$result = mysqli_query($db, $sql);

// gebruik mysql_fetch_assoc()! mysql_fetch_array() gebruikt dubbel zoveel geheugen. 
$row = mysqli_fetch_assoc($result);

/*
 * als je zeker weet dat je niet meer dan één record 
 * krijgt vervang je de while gewoon voor een if.
 * Bovendien heeft een record update geen zin als die 
 * niet bestaat dus dan maar een foutmelding geven.
 */
if($row === FALSE)
{
	throw new Exception('Geen record gevonden met id '.$id. ' in de tabel.');
	exit;
}

/* 
 * Na alle PHP logica komt de output. Dat kunnen we buiten de PHP tags doen
 * De <form> attributen stonden niet tussen double qoutes en dat hoort wel.
 * De action hou ik gewoon op de pagina zelf. Waarom weggaan zolang niet alles goed is?
 * Singleton elementen zoals input en img sluit je af met /> en niet alleen met een >
 */
?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Untitled Document</title>
        <style>
			.labels {
			  float:left;
			  line-height: 25px;
			  width: 70px;
			  background-color: #CCC;
			}
			
			.form {
			  float:left;
			  line-height: 25px;
			  width: 70px;
			  margin-left:3px;
			}
			
			.clear {
			  clear:both;
			}
	</style>
    </head>
    
    <body>
        <form action="" method="post"> <!-- waarom naar update.php? -->
            <div class="labels">
                <label for="id" >ID:</label><br>
                <label for="regel1" >Regel 1:</label><br>
                <label for="regel2" >Regel 2:</label><br>
                <label for="prijs" >Prijs:</label>
            </div>
            <div class="form">
                <input type="text" id="id" name="id" value="<?php echo $row['id']; ?>" /> <!-- singleton, dus />  -->
                <input type="text" id="regel1" name="regel1" value="<?php echo $row['regel1']; ?>" />
                <input type="text" id="regel2" name="regel2" value="<?php echo $row['regel2']; ?>" />
                <input type="text" id="prijs" name="prijs" value="<?php echo $row['prijs']; ?>" />
                <input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
                <input type="submit" value="update" />
            </div>
            <div class="clear"></div>
        </form>
    </body>
</html>
* Singleton elementen zoals input en img sluit je af met /> en niet alleen met een > */


Is niet nodig. Het mag wel, zodat het gelijk is aan X(HT)ML, maar het is in HTML(5) niet nodig. Ook in andere versies (4 bijvoorbeeld) niet nodig.

Voor de rest: veel beter. Al is $id = $_GET['id'] niet echt handig. Wat als die niet bestaat? En het is nu nutteloos kopieren. Gooi er dan tenminste nog een intval() overheen.
jep correct Eddy. Dank je wel voor de aanvulling.

p.s. Ik wist niet waar $id vandaan kwam dus gaf er wat dat betreft maar even een slinger aan :-)
Bedankt voor jullie reactie.
Weer veel van geleerd.

Alleen als ik de code gebruik van frank.
Word de datebase niet bijgewerkt.
Krijg ook geen fout meldingen
Hij was niet getest :-) Maar als je hem een beetje compleet plaatst kunnen we nog eens meekijken.
Sorry voor de late reactie.
Heb alleen tegen het weekend tijd om te hobbye.

Ik heb zelf een oplossing gevonden.
Dit is het script:

<?php
error_reporting(E_ALL);
session_start();
require_once("info.php");
$db = mysqli_connect ($host, $user, $password) or die ("Kan geen verbinding maken met de database ");

mysqli_select_db($db, $dbnaam) or die ($fout);

// indien dit bestand in de POST methode wordt aangeroepen is het formulier verstuurd.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // GEBRUIK GEEN mysql_ meer maar gebruik mysqli_ of PDO !!!
    
    // update de record in de tabel
    
   	$regel1 = $_POST['regel1'];
	$regel2 = $_POST['regel2'];
	$prijs = $_POST['prijs'];
	$id = $_POST['ID']; 
    
   $result = mysqli_query($db, "UPDATE tabel
   								SET 
   									regel1 = '$regel1',
   									regel2 = '$regel2',
   									prijs = '$prijs'	
   			                   WHERE 
   			                   		ID = '$id'");
                            
    if($result === FALSE)
        throw new Exception('Update naar tabel mislukt.' . mysqli_error($db));
        
    // optioneel voor een update is een redirect.
    else
        echo('Reclame Bijgewerkt!');
}



// query is het handigste tussen double quotes
$sql = "SELECT * FROM middelbeers WHERE ID=1";
$result = mysqli_query($db, $sql);

// gebruik mysql_fetch_assoc()! mysql_fetch_array() gebruikt dubbel zoveel geheugen. 
$row = mysqli_fetch_assoc($result);

/*
 * als je zeker weet dat je niet meer dan één record 
 * krijgt vervang je de while gewoon voor een if.
 * Bovendien heeft een record update geen zin als die 
 * niet bestaat dus dan maar een foutmelding geven.
 */
if($row === FALSE)
{
    throw new Exception('Geen record gevonden in de tabel.');
    exit;
}

/* 
 * Na alle PHP logica komt de output. Dat kunnen we buiten de PHP tags doen
 * De <form> attributen stonden niet tussen double qoutes en dat hoort wel.
 * De action hou ik gewoon op de pagina zelf. Waarom weggaan zolang niet alles goed is?
 * Singleton elementen zoals input en img sluit je af met /> en niet alleen met een >
 */
?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Untitled Document</title>
        <style>
            .labels {
              float:left;
              line-height: 25px;
              width: 70px;
              background-color: #CCC;
            }
            
            .form {
              float:left;
              line-height: 25px;
              width: 70px;
              margin-left:3px;
            }
            
            .clear {
              clear:both;
            }
    </style>
    </head>
    
    <body>
        <form action="" method="post"> <!-- waarom naar update.php? -->
            <div class="labels">
                <label for="id" >ID:</label><br>
                <label for="regel1" >Regel 1:</label><br>
                <label for="regel2" >Regel 2:</label><br>
                <label for="prijs" >Prijs:</label>
            </div>
            <div class="form">
                <input type="text" id="ID" name="ID" value="<?php echo $row['ID']; ?>" /> <!-- singleton, dus />  -->
                <input type="text" id="regel1" name="regel1" value="<?php echo $row['regel1']; ?>" />
                <input type="text" id="regel2" name="regel2" value="<?php echo $row['regel2']; ?>" />
                <input type="text" id="prijs" name="prijs" value="<?php echo $row['prijs']; ?>" />
                <input type="hidden" name="ID" value="<?php echo $row['ID']; ?>" />
                <input type="submit" value="update" />
            </div>
            <div class="clear"></div>
        </form>
    </body>
</html>


Wat is het voordeel van een mysqli_real_escape_string zoals in jullie voorbeeld gebruikt word?

Reageren