Quote verkeerd geplaats?
Maar krijg hier dus een foutmelding. Als ik het goed begrijp iets met een quote? Ik zie de fout zelf niet.
syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
Link naar werk: http://75076.ict-lab.nl/Php%20Project/editPage.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
while ($row = $result)
{
echo "<div class='formContainer'>";
echo "<form action='editStudents.php' method='post'>";
echo "<h3> Edit student </h3>";
echo "<input type='hidden' name='id' value='".$row['ID']"'>" . "<br>" . "<br>";
echo "<input type='text' name='fname' value='".$row['Firstname']"'>";
echo "Surname: <input type='text' name='lname' value='".$row['Lastname']"'><br><br>";
echo "<a align=center href='studentList.php' class='backButton'>Return</a>";
echo "<input type='submit' value='Submit'><br>";
echo "</form>";
echo "</div>";
}
{
echo "<div class='formContainer'>";
echo "<form action='editStudents.php' method='post'>";
echo "<h3> Edit student </h3>";
echo "<input type='hidden' name='id' value='".$row['ID']"'>" . "<br>" . "<br>";
echo "<input type='text' name='fname' value='".$row['Firstname']"'>";
echo "Surname: <input type='text' name='lname' value='".$row['Lastname']"'><br><br>";
echo "<a align=center href='studentList.php' class='backButton'>Return</a>";
echo "<input type='submit' value='Submit'><br>";
echo "</form>";
echo "</div>";
}
Ik hoop dat ik ze allemaal heb zo.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
while ($row = $result)
{
echo "<div class='formContainer'>";
echo "<form action='editStudents.php' method='post'>";
echo "<h3> Edit student </h3>";
echo "<input type='hidden' name='id' value='".$row['ID']."'><br><br>";
echo "<input type='text' name='fname' value='".$row['Firstname']."'>";
echo "Surname: <input type='text' name='lname' value='".$row['Lastname']."'><br><br>";
echo "<a align=center href='studentList.php' class='backButton'>Return</a>";
echo "<input type='submit' value='Submit'><br>";
echo "</form>";
echo "</div>";
}
{
echo "<div class='formContainer'>";
echo "<form action='editStudents.php' method='post'>";
echo "<h3> Edit student </h3>";
echo "<input type='hidden' name='id' value='".$row['ID']."'><br><br>";
echo "<input type='text' name='fname' value='".$row['Firstname']."'>";
echo "Surname: <input type='text' name='lname' value='".$row['Lastname']."'><br><br>";
echo "<a align=center href='studentList.php' class='backButton'>Return</a>";
echo "<input type='submit' value='Submit'><br>";
echo "</form>";
echo "</div>";
}
Toevoeging op 15/01/2018 00:00:12:
En zo mag het ook:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while ($row = $result)
{
echo" <div class='formContainer'>
<form action='editStudents.php' method='post'>
<h3> Edit student </h3>
<input type='hidden' name='id' value='".$row['ID']."'><br>
<br>
<input type='text' name='fname' value='".$row['Firstname']."'>
Surname: <input type='text' name='lname' value='".$row['Lastname']."'><br>
<br>
<a align=center href='studentList.php' class='backButton'>Return</a>
<input type='submit' value='Submit'><br>
</form>
</div>";
}
{
echo" <div class='formContainer'>
<form action='editStudents.php' method='post'>
<h3> Edit student </h3>
<input type='hidden' name='id' value='".$row['ID']."'><br>
<br>
<input type='text' name='fname' value='".$row['Firstname']."'>
Surname: <input type='text' name='lname' value='".$row['Lastname']."'><br>
<br>
<a align=center href='studentList.php' class='backButton'>Return</a>
<input type='submit' value='Submit'><br>
</form>
</div>";
}
Je kan alles ook prima buiten je PHP-blok zetten, en alleen de nodige variabelen tussen de PHP-tags.
Dit scheelt je weer een hoop quote-gekloot ;-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
/*Hier jouw code...*/
while ($row = $result) { ?>
<div class="formContainer">
<form action="editStudents.php" method="post">
<h3> Edit student </h3>
<input type="hidden" name="id" value="<?php echo $row["ID"]; ?>"><br><br>
<input type="text" name="fname" value="<?php echo $row["Firstname"]; ?>">
Surname: <input type="text" name="lname" value="<?php echo $row["Lastname"]; ?>"><br><br>
<a align=center href="studentList.php" class="backButton">Return</a>
<input type="submit" value="Submit"><br>
</form>
</div>
<?php
} // einde while
?>
/*Hier jouw code...*/
while ($row = $result) { ?>
<div class="formContainer">
<form action="editStudents.php" method="post">
<h3> Edit student </h3>
<input type="hidden" name="id" value="<?php echo $row["ID"]; ?>"><br><br>
<input type="text" name="fname" value="<?php echo $row["Firstname"]; ?>">
Surname: <input type="text" name="lname" value="<?php echo $row["Lastname"]; ?>"><br><br>
<a align=center href="studentList.php" class="backButton">Return</a>
<input type="submit" value="Submit"><br>
</form>
</div>
<?php
} // einde while
?>
Voor het gemak heb ik in je HTML de double-quotes gebruikt. Deze zijn overigens gebruikelijk binnen HTML5.
Gewijzigd op 15/01/2018 00:05:36 door - Ariën -
Niet
Maar
zodat je html intact blijft als iemand een " in zijn naam lijkt te hebben, of html-tags ingevoerd heeft.
Ik vroeg me tog wel hoef of ik niet een GET variablen aan moet maken, zodat hij weet welke row hij moet aanpassen en welke waardes hij in de textbox moet zetten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
// Show erros
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Database + connection
require_once ('../../config.php');
// Make and check the connection with PDO
try {
$conn = new PDO($dsn, $name, $pass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sql = "SELECT * FROM Students";
$result = $conn->prepare($sql);
while ($row = $sql)
{
echo "<div class='formContainer'>";
echo "<form action='editStudents.php' method='post'>";
echo "<h3> Edit student </h3>";
echo "<input type='hidden' name='id' value='".$row['ID']."'><br><br>";
echo "<input type='text' name='fname' value='".$row['Firstname']."'>";
echo "Surname: <input type='text' name='lname' value='".$row['Lastname']."'><br><br>";
echo "<a align=center href='studentList.php' class='backButton'>Return</a>";
echo "<input type='submit' value='Submit'><br>";
echo "</form>";
echo "</div>";
}
?>
// Show erros
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Database + connection
require_once ('../../config.php');
// Make and check the connection with PDO
try {
$conn = new PDO($dsn, $name, $pass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sql = "SELECT * FROM Students";
$result = $conn->prepare($sql);
while ($row = $sql)
{
echo "<div class='formContainer'>";
echo "<form action='editStudents.php' method='post'>";
echo "<h3> Edit student </h3>";
echo "<input type='hidden' name='id' value='".$row['ID']."'><br><br>";
echo "<input type='text' name='fname' value='".$row['Firstname']."'>";
echo "Surname: <input type='text' name='lname' value='".$row['Lastname']."'><br><br>";
echo "<a align=center href='studentList.php' class='backButton'>Return</a>";
echo "<input type='submit' value='Submit'><br>";
echo "</form>";
echo "</div>";
}
?>
betekent: zolang het lukt om de variabele $row te vullen met de waarde die in $sql staat.
In $sql staat een string die met een S begint.
Doorgaans gaat dit kopieren wel lukken.
Echter, $sql is een string en geen array. Dus ook $row is dan geen array: $row['ID'] bestaat dan niet he.
Je wilt op regel 24 iets met de resultset $result uit regel 20 doen...
while ($row = $sql)
Dat geeft altijd TRUE.
Je zult in ieder geval je data moeten fetchen in je while().
Je kunt, zoals @Ariën aangeeft, te allen tijde in en uit een PHP-blok springen.
Ik weet ook niet of het volledig conform HTML-specs is om attribuut-waarden in HTML te omvatten met enkele quotes. Ik kan mij wel zo voorstellen dat dit eerder voor problemen zorgt met bepaalde invoer. Op dat vlak kan de functie die @Ivo aandroeg weer helpen, maar NIET met het default gedrag van deze functie (2e parameter, ENT_COMPAT | ENT_HTML401), omdat deze enkele quotes met rust laat.
Verder lijkt het mij verstandig om eens na te gaan denken hoe je dit soort pagina's organisatorisch vormgeeft en opdeelt. Ik bedoel, ben je ooit bezig met het in bulk aanpassen van de namen van studenten? En zelfs als je dat doet, de huidige opzet is nu zo dat je slechts de informatie van één student kunt submitten omdat alles in een eigen form zit... Waarom stop je dan alles in aparte forms? Of uberhaupt in een form? Wat ik eerder zou verwachten is dus een readonly lijst van studenten met een edit-hyperlink naar een enkel studentenprofiel.
Ook zou je eens kunnen kijken naar naamgeving (editStudents.php?) en het opdelen van taken in gescheiden acties. Maak bijvoorbeeld eens één script, bijvoorbeeld /admin/student.php, waarin je de volgende acties logisch scheidt:
- default actie (lijst van studenten, wellicht gefilterd op klas?)
- addStudent (het formulier)
- addStudentProcess (de verwerking van dit formulier)
- editStudent (het formulier, geldig id vereist)
- editStudentProcess (de verwerking van dit formulier)
- deleteStudent (waarbij je een student dus niet daadwerkelijk verwijdert, zoals reeds aangehaald in een andere thread)
En los van dit alles - doe je iets met character encoderingen? In je PDO dsn-string, in de meta-tag van je webpagina? In een mogelijke Content-Type header? In je database-tabellen? Dit is mogelijk een dingetje als je studentendata gaat im- en exporteren, dat wordt dan een ramp. Zorg dat dat ook op orde is.
EDIT: en nog iets, weet niet of dit tegenwoordig nog zo is, maar als je connectie mislukt dan worden alle connectie-gegevens uitgespuugd. Die constructie met echo is dus niet erg handig, want stel nu dat de database -om wat voor reden dan ook- niet actief is. Er is dan in principe niets mis met de connectie-parameters, maar die gooi je dan met een echo gewoon op straat.
En als studenten één ding leuk vinden...
Gewijzigd op 15/01/2018 14:51:20 door Thomas van den Heuvel