J'ai un peu de problèmes avec certains index Undefined. Je me rends compte que cela pourrait être résolu en changeant le rapport d'erreur en utilisant error_reporting(E_ALL);
, ou ini_set('display_errors', '1');
, mais je voudrais résoudre ce problème sans avoir besoin de changer cela. Juste ici est mon bloc de code qui jette l'erreur.Note: Indéfini index: PHP
// print out errors
if (!empty($errors)){
echo '<div class="form_errors">';
foreach ($errors as $key => $value) {
var_dump($value);
if (isset($value) == null or empty($value)){
$value = ' A blank value ';
}
echo '<p>Please check '. $key . ' for errors.' . $value . 'is not a valid entry.</p>';
}
echo '</div>';
}
La partie qui traite mon formulaire soumettre est
if(isset($_POST['Submit'])){
//create the fields you would want required and what fields on form to check.
$fields = array(
'required' => array(
'name' => '^[a-zA-Z\`\-\s]{1,30}$', //only letters plus apostrophe and hyphens, and up to 30 characters
'Address1' => '^[a-zA-Z0-9\s\.]{1,50}$' // only letters plus numbers, spaces, periods, and up to 30 characters
),
'fields' => array(
'name' => $_POST['name'],
'Address1' => $_POST['Address1'],
'Address2' => $_POST['address2']
),
'redirect' => 'thankyou.php'
);
$errors = TForm::validate($fields);
// if no errors redirect
if (empty($errors)){
TForm::redirect($fields);
}
}
Et ma classe TForm ressemble à ceci
class TForm {
//validation returns an error array when done.
public function validate($fields){
$errors = array();
foreach($fields['fields'] as $key=>$value) {
foreach ($fields['required'] as $req_key => $req_value) {
if ($key == $req_key){
$req_key = '\''.$req_value.'\'';
if (preg_match($req_key , $value) == false) {
$errors[$key] = $value;
}
}
}
}
return $errors;
}
//redirect function
public function redirect($fields){
header('Location: '. $fields['redirect']);
}
}
C'est aussi la première classe que j'ai jamais écrit si quelqu'un Je me sens capable de montrer où j'aurais pu mieux performer ou enfreindre les normes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mise à jour ~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
@jordan Désolé, je ne comprenais pas à propos du rapport d'erreur E_ALL
est ce que je suis actuellement en utilisant et sur une machine de production, cette erreur ne serait pas signalée car vous utiliseriez 0
. Ma solution était d'utiliser !empty($_POST['Name']) ? $_POST['Name']:''
Si je pense correctement s'il n'est pas vide, il utilise tout ce qui est dans $_POST['Name']
et s'il est vide, il définit la valeur à ''
.
'fields' => array(
'Name' => !empty($_POST['Name']) ? $_POST['Name']:'',
'Address1' => !empty($_POST['Address1']) ? $_POST['Address1']:'',
'Address2' => !empty($_POST['Address2']) ? $_POST['Address2']:''
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Update2 ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
en utilisant les résultats de @ Mike isset dans le domaine ne toujours à savoir
'fields' => array(
'Name' => !isset($_POST['Name']) ? $_POST['Name']:'',
'Address1' => !isset($_POST['Address1']) ? $_POST['Address1']:'',
'Address2' => !isset($_POST['Address2']) ? $_POST['Address2']:''
)
résultats dans lorsque le nom correspond à une variable valide, comme Frank Wiebenga
Please check Name for errors. A blank value is not a valid entry.
Please check Address1 for errors. A blank value is not a valid entry.
utilisant le vide rencontré Hod lorsque le nom correspond à une variable valide, tel que Frank Wiebenga retourne correctement
Please check Address1 for errors. A blank value is not a valid entry.
Quel est le message d'erreur complet, qui Undefined index? –
error_reporting Valeur de développement: "E_ALL | E_STRICT" TOUJOURS dans quelle ligne est l'erreur? – ZiTAL
Notez également que quelle que soit votre erreur, cette ligne n'a pas de sens: 'if (isset ($ value) == null ou vide ($ value))'. 'isset' renvoie boolean, donc il ne peut jamais être littéralement nul, bien que le vérifier avec == null sera également évalué à false ... mais au lieu de cette construction entière, vous auriez pu simplement cocher' if (empty ($ value)) ' – poncha